おもしろ工作・プログラミング動画配信中!せでぃあのYouTube

Arduino Uno R4 WiFiで乱数を使ってオンラインおみくじ電子工作を作る!スマホアプリから外出先でおみくじが引けます。

Arduino Uno R4 WiFiで乱数を使ったIoT Cloudおみくじで遊ぶ
  • URLをコピーしました!

この記事内には、プロモーションが含まれます。

スマイルSALE!

4/22まで!スマイルSALE開催中

こんにちは、せでぃあ(@cediablog)です。

Arduino UNO R4 WIFIを使って、Arduino IoT Cloudを使った「おみくじ工作」プログラミングで遊んでみました。

必要なもの

  • Arduino UNO R4 WIFI
  • スマートフォン
  • パソコン
  • USB TypeCケーブル

Arduino UNO R4 WiFi本体と、Arduino IoT Remoteアプリをインストールしたスマホがあれば手軽にIoTおみくじが楽しめちゃいます。

せでぃあ

この記事を読めば誰でも簡単にIoTおみくじが作れますので、あなたもぜひやってみてください!

この記事を読んでわかること
  • IoT Cloudおみくじの概要と遊び方
  • Arduino Cloud側の設定方法
  • Arduino動作プログラムの作り方
この記事を書いた人
せでぃあ

せでぃあはこんな人物です

✅プライム企業に勤める電気・機械設計エンジニア

✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作

✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞

✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中

✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中

Arduino UNO R4 WiFiはここで買えます

Arduino UNO R4 WIFIの使い方について詳しく知りたい方には、こちらの記事がおすすめです!

目次

おみくじの話

おみくじ

今回のプログラミングネタである「おみくじ」について、簡単に紹介します。

おみくじとは

おみくじは、神社や寺で引くことができる運勢占いの一種です。

おみくじには運勢に加えて、恋愛や仕事、学業などの各分野の運勢や、行動に関するアドバイスが書かれていることがあります。

おみくじは、自分の運勢を知るだけでなく、参考にして自分の行動を改めるきっかけにすることができます。

せでぃあ

おみくじは運勢が良くても悪くても、自分のためになるんですね!

おみくじの種類と意味

おみくじの運勢は7種類が一般的です。

「大吉」が一番良い運勢で、「大凶」が最も悪い運勢とされています。

運勢意味
大吉最高の運勢。何事もうまくいくという意味
中吉良い運勢。努力すれば目標が達成できるという意味
小吉まずまずの運勢。小さなトラブルに注意という意味
𠮷平凡な運勢。特に良くも悪くもないという意味
末吉少し良い運勢。苦労の末に良い結果が得られるという意味
悪い運勢。不幸や災難に見舞われるという意味
大凶最悪の運勢。むやみに動かずチャンスを待てという意味
おみくじの運勢と意味

「𠮷」の順位が神社によって異なる

ネットでおみくじの運勢順位を調べてみると「𠮷」については、神社によって順位の扱いが異なることが分かりました。

パターン1

大吉>中吉>小吉>𠮷>末吉>凶>大凶

パターン2

大吉>𠮷>中吉>小吉>末吉>凶>大凶

このように、吉が大吉の次に良い運勢とする神社もあるそうです。

今回は、パターン1の順位を踏襲した運勢コメントを設定しました。

スマホアプリ画面を操作しておみくじを引く

スマホアプリ「Arduino IoT Cloud Remote」を使って、スマホ画面を操作しておみくじを引くプログラム動作を説明します。

動作の解説動画「せでぃあブログちゃんねる」より
プログラムの動作説明
  • プログラム動作を開始して「おみくじ待ち」になる。
  • スマホのメッセンジャーウィジェットに「おみくじ」と入力するとおみくじ開始
  • LEDマトリクスとスマホ画面に運勢が表示される。
STEP
プログラム動作を開始して「おみくじ待ち」になる

プログラム転送後、または本体のリセットボタンを押すとプログラム動作を開始します。

プログラム動作を開始すると、自動的にWiFiネットワークへ接続してArduino IoT Cloudとつながります。

おみくじ待ちの状態表示
おみくじ待ちの状態表示

Arduino本体のLEDマトリクスに「くじ」と表示され、「おみくじ待ち状態」になります。

スマホのメッセンジャーウィジェットにおみくじを引く方法がコメント表示されます。

STEP
スマホのメッセンジャーウィジェットに「おみくじ」と入力するとおみくじ開始

スマホのメッセンジャーウィジェットで、「おみくじ」と入力することでおみくじを引く動作が開始されます。

おみくじ抽選動作表示
おみくじ抽選動作表示

LEDマトリクスにおみくじを引くアニメーションが表示されます。

STEP
LEDマトリクスとスマホ画面に運勢が表示される
おみくじ結果の表示
おみくじ結果の表示

LEDマトリクスに運勢が表示されます。

スマホ画面には、運勢とコメントが表示されます。

運勢は乱数と言われるランダムに値を抽出する関数を使って選択しています。
同じ運勢が連続で出ることもありますし、なかなか出てくれない運勢もあるかもしれません。

乱数(ランダム)については、こちらの記事にて詳しく説明しています。

せでぃあ

7つの運勢すべてのコメントが見られるまで、おみくじを引きたくなってしまう魅力があります!

Arduino Cloudの設定方法と使い方

今回の動作を行うための設定方法と使い方を紹介します。

Arduino Cloudの説明
Arduino CloudのHome画面

Arduino Cloudの設定項目

  • Devices
    接続するマイコンボード
  • Things
    制御やデータ収集を行うデバイス
  • Dashboards
    情報を見える化して操作可能なツール
  • Sketches
    Arduinoを動作させるプログラム

Arduino Cloudで設定すべき項目は上記の4項目になります。

それぞれの設定方法を解説していきます。

Sketchの作成・編集は、Thing設定またはHomeから行うことができます。

Arduino Cloudへのサインイン

まずはじめに、Arduino Cloudサイトにログインします。

サインインするには、Arduino Cloudのユーザー登録(無料)が必要です。

ユーザー登録方法については、こちらの記事にて詳しく説明しています。

STEP
Arduino Cloudサイトに移動する。
Arduino公式サイトを開き、画面右上のCloudマークをクリックします。

Arduino公式サイトを開き、画面右上のCloudマークをクリックします。

STEP
「SIGN IN」をクリックする。
「SIGN IN」をクリックします。

「SIGN IN」をクリックして、サインインページに移動します。

STEP
登録したユーザー名またはメールアドレスとパスワードを入力する。
登録したユーザー名またはメールアドレスとパスワードを入力してサインインする。

登録したユーザー名またはメールアドレスとパスワードを入力し、「SIGN IN」ボタンをクリックします。

STEP
Arduino Cloudへのサインインが完了する。
Arduino Cloudのメイン画面

Arduino CloudのHome画面に移動したらサインイン完了です。

Devicesの設定

Devicesでは、接続するマイコンボードの選択と設定を行います。

Arduino UNO R4 WIFI本体とパソコンをUSBケーブルで接続した状態で設定を行ってください。

STEP
メニューからDevicesを選択して、「ADD DEVICE」をクリックする。
Home画面のメニューからDevicesを選択して、「ADD DEVICE」をクリックします。

Home画面のメニューからDevicesを選択して、「ADD DEVICE」をクリックします。

STEP
Arduino boardをクリックする。
Arduino boardをクリックします。

Arduino boardをクリックします。

マイコンとの接続が行われます。

USBケーブルで接続されたArduino UNO R4 WIFI本体との接続が行われます。

STEP
Arduino Create Agentのインストール
ArduinoCreateAgentのインストールを行う。

Arduino Create Agentがパソコンにインストールされていない場合は、インストール要求がされます。

「INSTALL」ボタンをクリックして、インストールを進めます。

ダウンロードフォルダに保存されたインストール実行ファイルを起動する。

ダウンロードフォルダに保存された、インストール実行ファイルを起動します。

「NEXT」をクリックします。

「NEXT」をクリックします。

承認ボタンをONにして、「NEXT」をクリックします。

承認ボタンをONにして、「NEXT」をクリックします。

インストールフォルダを選択して「承認ボタンをONにして、「NEXT」をクリックします。

インストールフォルダを選択して「承認ボタンをONにして、「NEXT」をクリックします。

特にこだわりがなければ、初期表示フォルダのまま進めてOKです。

「NEXT」をクリックします。

「NEXT」をクリックします。

インストールが行われるので、待ちます。

インストールが行われるので、待ちます。

インストールが完了したら「Finish」をクリックします。

インストールが完了したら「Finish」をクリックします。

STEP
Arduino UNO R4 WIFIを検出させる。
Arduino UNO R4 WIFIを検出したら「CONFIGRE」をクリックします。

Arduino UNO R4 WIFIを検出したら「CONFIGRE」をクリックします。

デバイス名を入力して、「NEXT」をクリックします。

デバイス名を入力して、「NEXT」をクリックします。

任意のデバイス名を入力してください。

STEP
デバイスIDとシークレットキーを控える。
デバイスIDとシークレットキーが表示されるので、控えます。
その後チェックを入れて「CONTINUE」をクリックします。

デバイスIDとシークレットキーが表示されるので、控えます。

画面下のチェックを入れて「CONTINUE」をクリックします。

シークレットキーは、ネットワーク設定で必要になりますので絶対に控えておいてください。

STEP
セットアップ動作が開始される。
セットアップが開始されます。

セットアップが開始されます。

「CONFIRM」をクリックします。

「CONFIRM」をクリックします。

セットアップが完了したら「DONE」をクリックします。

セットアップが完了したら「DONE」をクリックします。

Home画面のDevicesをクリックすると、登録したデバイスが表示されます。

Home画面のDevicesをクリックすると、登録したデバイスが表示されます。

Thingsの設定

Thingsでは、接続するデバイス「モノ」の選択と設定を行います。

STEP
メニューからThingsを選択して、「CREATE THING」をクリックする。
メニューのThingsを選択し、「+CREATE THING」をクリックします。

Home画面のメニューからThingsを選択して、「CREATE THING」をクリックします。

STEP
Thing名を変更する。
Thing名がUntitledになっているので、Renameをクリックする。

Thing名がUntitledになっているので、Renameをクリックして名前を変えます。

Thing名を変えなくても動作に支障はありませんが、変えておくとデータを紐づけるときにわかりやすいです。

新しいThing名「UNO_R4_WIFI」を入力して、RENAMEをクリックします。

新しいThing名を入力して、RENAMEをクリックします。

Thing名が変更されました。

Thing名が「UNO_R4_WIFI」に変更されました。

STEP
クラウド変数を追加する。
SetupタブのADDをクリックします。

SetupタブのADDをクリックします。

クラウド変数情報を設定して、「ADD VARIABLE」をクリックします。

クラウド変数情報を設定して、「ADD VARIABLE」をクリックします。

クラウド変数の設定内容

  • 変数名:message
  • 変数の型:Character String
  • 権限:Read & Write
  • 更新頻度:On change
クラウド変数が追加されました。

クラウド変数が追加されました。

STEP
デバイス「Arduino UNO R4 WiFi」を紐づける。
Select Deviceのリンクボタンをクリックします。

Select Deviceリンクボタンをクリックします。

ASSOCIATEをクリックして登録済のデバイス「Arduino UNO R4 WIFI」を紐づけます。

ASSOCIATEをクリックして、登録済のデバイス「Arduino UNO R4 WiFi」を紐づけます。

Arduino UNO R4 WiFiが紐づけられました。

Arduino UNO R4 WiFiが紐づけられました。

この時点ではネットワーク設定前のため、Offline状態で問題ありません。

STEP
ネットワーク設定する。
Configureリンクボタンをクリックします。

Configureリンクボタンをクリックします。

ネットワーク接続設定情報を入力して、SAVEをクリックします。

ネットワーク接続設定情報を入力して、SAVEをクリックします。

ネットワーク情報が設定されました。

ネットワーク情報が設定されました。

STEP
Metadataを設定する。
Metadataタブをクリックして、Timezoneを設定します。

Metadataタブをクリックして、Timezoneを設定します。

STEP
Sketch(動作プログラム)を作る。
sketchタブをクリックすると、自動でプログラムが作られています。

sketchタブをクリックすると、自動でプログラムが作られています。

このプログラムを編集して、動作させたいプログラムを作り上げていきます。

プログラム内容については、このあと詳しく説明していきます。

検証ボタンをクリックして、プログラムコードを検証します。

プログラムが作れたら検証ボタンをクリックして、プログラムコードを検証します。

転送ボタンをクリックして、プログラムコードをArduino本体に転送します

転送ボタンをクリックして、プログラムコードをArduino本体に転送します。

Dashboardsの設定

Dashboardsでは、デバイスから得た情報を見える化して操作可能なツールの設定を行います。

STEP
メニューからDashboardsを選択して、「CREATE DASHBOARD」をクリックする
メニューのDashboardsを選択し、「+CREATE DASHBOARD」をクリックします。
STEP
Dashboard名を変更する。
Dashboard名がUntitledになっているので、Renameをクリックする。

Dashboard名がUntitledになっているので、Renameをクリックします。

新しいDashboard名を入力して、RENAMEをクリックします。

新しいDashboard名を入力して、RENAMEをクリックします。

Dashboard名が「kuji」に変更されました。

Dashboard名が「kuji」に変更されました。

STEP
ウィジェットを配置する。
ADDボタンをクリックしてウィジェットウィンドウを開き、Messengerをクリックします。

ADDボタンをクリックしてウィジェットウィンドウを開き、Messengerボタンをクリックします。

Link Variableボタンをクリックします。

メッセンジャーウィジェットが表示されました。

Link Variableボタンをクリックします。

Variablesにmessageを選択して、LINK VARIABLEボタンをクリックします。

Variablesにmessageを選択して、LINK VARIABLEボタンをクリックします。

DONEボタンをクリックします。

DONEボタンをクリックして設定を完了させます。

メッセージ入力欄に文字入力してエンターするとメッセージ欄に文字が表示されます。

メッセージ入力欄に文字入力してエンターするとメッセージ欄に文字が表示されます。

これでダッシュボードの設定が完了しました。

Arduino UNO R4 WIFIにプログラムデータを転送済であれば、「おみくじ」と入力することでおみくじ結果が表示されます。

せでぃあ

他にもいろいろなウィジェットがあるので、試してみてくださいね!

スマホアプリからの操作方法

ここではスマホアプリ「Arduino IoT Cloud Remote」を使った、スマホ画面上のメッセンジャーウィジェットを使っておみくじを引く方法を紹介します。

Arduino UNO R4 WIFIに電源を供給して、オンライン接続状態にしてください。

STEP
アプリをインストールする。
Arduino IoT Cloudをインストールする。

Arduinoが提供するアプリ「Arduino IoT Cloud」をインストールします。

Arduino IoT Cloud Remote
Arduino IoT Cloud Remote
開発元:Arduino
無料
posted withアプリーチ
STEP
アプリを開く。
インストールできたら、アプリを開きます。

インストールができたらアプリを開きます。

アプリの初回起動時の画面が出るのでしばらく待ちます。

アプリの初回起動画面が出るので、しばらく待ちます。

STEP
Arduino Cloudにサインインする。
Arduino Cloudにサインインする。

パソコンで登録したArduino Cloud登録情報を入力して、サインインします。

STEP
ダッシュボードを選択する。
ダッシュボード画面から「kuji」を選択します。

ダッシュボード画面から、先ほど作成した「kuji」を選択します。

STEP
ウィジェットを操作して動作確認する。

先ほど作成したメッセンジャーウィジェットが配置されています。

おみくじ と入力するとおみくじが引けるコメントが表示されます。

「おみくじ」と入力するとおみくじが引けます、というコメントが表示されます。

入力メッセージ入力欄に「おみくじ」と入力します。

入力メッセージ入力欄に「おみくじ」と入力します。

運勢とコメントが表示されます。

無作為に抽出された運勢と、それに合うコメントが表示されます。

「おみくじ」以外の文字を入力すると、おみくじを引くための方法説明が表示されます。

「おみくじ」以外の文字を入力すると、おみくじを引くための方法説明が表示されます。

おみくじは何度も引くことができます。

おみくじは何度も引くことができます。

せでぃあ

パソコンのArduino Cloud画面に設置したメッセンジャーウィジェットからでも、同様の動作が可能です。

LEDマトリクス表示の作り方

メインプログラムを作る前に、LEDマトリクス点灯パターンコード及びアニメーション表示プログラムを作ります。

  • 単独表示:LEDマトリクス表示コードをプログラムに記載する。
  • アニメーション表示:アニメーションファイルを作成し、メインプログラムにてインクルード命令で呼び出して使う。

今回作成する単独表示

  • 「くじ」表示
  • 「大吉」表示
  • 「中吉」表示
  • 「小吉」表示
  • 「𠮷」表示
  • 「末吉」表示
  • 「凶」表示
  • 「大凶」表示

今回作成するアニメーション表示

  • おみくじ箱振り動作
  • おみくじ結果飛び出し動作

これらの表示パターンはLEDマトリクスエディタを使って作ります。

これらの作り方を説明していきます。

マトリクスエディタの使い方については、こちらの記事にて詳しく説明しています。

単独表示パターンコードを生成する

アニメーションではなく、単独表示パターンであってもLEDマトリクスエディタを使ってコード生成すると、32ビット整列のデータを確認できるため便利です。

STEP
「くじ」表示パターンを作る
LEDマトリクスエディタを使った、「くじ」表示の作り方

LEDマトリクスエディタを使って、単独表示パターンを作ります。

パターンを作ったら画面右上のコードファイル生成ボタンを押して、ファイル生成します。

ファイル名は、他ファイル名と重複しなければ何でも良いです。

STEP
プログラムコードを確認する

生成したコードファイルは、ダウンロードフォルダに保存されています。

生成ファイルを右クリックして、プログラムから開くからメモ帳を使ってファイルを開きます。

メモ帳を使って「くじ」表示のコードを確認します。

すると、コードの中身を確認することができます。

中かっこ内の4列のうち、上から1~3列目までがマトリクス表示コードです。

4列目はアニメーション表示時間のため、今回は使用しません。

STEP
他の表示パターンも作成する

残りはおみくじの運勢表示を作成して、表示プログラムコードを確認していきます。

LEDマトリクス「大吉」表示。
LEDマトリクス「大吉」表示
LEDマトリクス「中吉」表示。
LEDマトリクス「中吉」表示
LEDマトリクス「小吉」表示。
LEDマトリクス「小吉」表示
LEDマトリクス「吉」表示。
LEDマトリクス「吉」表示
LEDマトリクス「末吉」表示。
LEDマトリクス「末吉」表示
LEDマトリクス「凶」表示。
LEDマトリクス「凶」表示
LEDマトリクス「大凶」表示。
LEDマトリクス「大凶」表示
おみくじの運勢表示プログラムデータ

複数の表示パターンを作成した状態でコードを生成すると、このように上から順番に1コマ目、2コマ目の表示コードが表示されます。

7つの表示を順番に切り替える、アニメーションファイルが生成されます。

せでぃあ

確認した単独表示コードは、プログラム作成時に使用します。

アニメーション表示プログラムを生成する

今回2つのアニメーション表示プログラムを作成します。

アニメーション表示:生成ファイル名

  • おみくじ箱振り動作:omikuji_animation1.h
  • おみくじ結果飛び出し動作:omikuji_animation2.h
STEP
おみくじ箱振り動作アニメーション表示を作る
おみくじ箱振りアニメーション表示


おみくじ箱振り動作アニメーション表示を作ります。

アニメーション表示パターンを作成したら、プログラムデータとして出力させます。

生成ファイルは「ダウンロードフォルダ」に保存されます。

STEP
おみくじ結果飛び出しアニメーション表示を作る

続いて、おみくじ結果飛び出しアニメーション表示を作ります。

おみくじが飛び出した状態の表示時間は「200msec」に変更しました。

コマ表示の下にある数字欄は「表示時間(msec)」で、数値変更が可能です。

これでLEDマトリクス表示に関する事前作業は完了です。

アニメーションプログラムをインポートする。

スケッチ画面にて、メインプログラムから呼び出して使用する「アニメーションプログラム」をインポートします。

インポートするファイル

  • omikuji_animation1.h
  • omikuji_animation2.h
STEP
スケッチの「+」タブをクリックする

Arduino Cloudのスケッチ画面の+タブをクリックします。

STEP
Import Fileをクリックして、アニメーションプログラムをインポートする

「Import File」をクリックすると、対象ファイルを選択するウィンドウが開きます。

事前に生成しておいたアニメーションプログラムファイルを選択して、インポートします。

タブに「omikuji_animation1.h」と「omikuji_animation2.h」が追加されたら、インポート成功です。

せでぃあ

この作業を忘れると、プログラム検証時にエラーになります。

動作プログラムの解説

ここからはプログラムの内容を解説していきます。

プログラム(スケッチ)はある程度自動で作成されるので、自分が動作させたい部分を追加編集して作っていきます。

/*
  Sketch generated by the Arduino IoT Cloud Thing "Cloud_LED_MATRIX"

  Arduino IoT Cloud Variables description

  The following variables are automatically generated and updated when changes are made to the Thing

  String message;

  Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/

#include "thingProperties.h"

// Arduino_LED_Matrixライブラリをインクルードする
#include "Arduino_LED_Matrix.h"

// Arduino_LED_Matrixアニメーションファイルをインクルードする
#include "omikuji_animation1.h"
#include "omikuji_animation2.h"

//おみくじ結果を格納する変数
int unsei = 0;

// マトリックスパネルのオブジェクトを作成する
ArduinoLEDMatrix matrix;

// LEDマトリクスに表示「くじ」
const uint32_t matrix_unsei0[] = {
  0xa512,
  0x52204202,
  0x2012209c,
};

// LEDマトリクス表示「大吉」
const uint32_t matrix_unsei1[] = {
  0x10411ffe,
  0x410e1002,
  0x9f45183f,
};

// LEDマトリクス表示「中吉」
const uint32_t matrix_unsei2[] = {
  0x10411ffe,
  0x492efe01,
  0x1f11111f,
};

// LEDマトリクス表示「小吉」
const uint32_t matrix_unsei3[] = {
  0x10411f10,
  0x454e5409,
  0x3f11111f,
};

// LEDマトリクス表示「吉」
const uint32_t matrix_unsei4[] = {
  0x401f004,
  0xe00001,
  0xf01101f0,
};

// LEDマトリクス表示「末𠮷」
const uint32_t matrix_unsei5[] = {
  0x104fff10,
  0x47ce1003,
  0x9f55193f,
};

// LEDマトリクス表示「凶」
const uint32_t matrix_unsei6[] = {
  0x11011,
  0x1b01501,
  0xb01101f0,
};

// LEDマトリクス表示「大凶」
const uint32_t matrix_unsei7[] = {
  0x100111ff,
  0x111b1152,
  0x9b45183f,
};

void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500);

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);

  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
  */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();

  // LEDマトリクス動作を開始する
  matrix.begin();

  //乱数の初期化
  randomSeed(analogRead(0));
}

void loop() {
  ArduinoCloud.update();
}

/*
  Since Message is READ_WRITE variable, onMessageChange() is
  executed every time a new value is received from IoT Cloud.
*/
void onMessageChange() {
  // Add your code here to act upon Message change

  //おみくじ開始前のとき
  if (unsei == 0) {
    matrix.loadFrame(matrix_unsei0);
  }

  if (message == "おみくじ") {

    //おみくじの抽選

    // 抽選中LEDマトリクスアニメーションを読み出す。
    matrix.loadSequence(omikuji_animation1);
    // 抽選中マトリックスアニメーション表示を有効
    matrix.play(true);
    delay(1500);

    // 抽選完了LEDマトリクスアニメーションを読み出す。
    matrix.loadSequence(omikuji_animation2);
    // 抽選完了マトリックスアニメーション表示を有効
    matrix.play(false);
    delay(1000);

    //【抽選結果】1:大吉、2:中吉、3:小吉、4:吉、5:末吉、6:凶、7:大凶
    unsei = random(1, 8);

    //おみくじ抽選結果による、メッセージの振り分け
    switch (unsei) {
      case 1:
        matrix.loadFrame(matrix_unsei1);
        message = "おみくじ結果は大吉です。何事もうまくいく最高の運勢です!";
        unsei = 0;
        break;
      case 2:
        matrix.loadFrame(matrix_unsei2);
        message = "おみくじ結果は中吉です。努力が実る良い運勢です!";
        unsei = 0;
        break;
      case 3:
        matrix.loadFrame(matrix_unsei3);
        message = "おみくじ結果は小吉です。大きな災難もないまずまずの運勢です!";
        unsei = 0;
        break;
      case 4:
        matrix.loadFrame(matrix_unsei4);
        message = "おみくじ結果は吉です。無難に過ごせる良くも悪くもない運勢です!";
        unsei = 0;
        break;
      case 5:
        matrix.loadFrame(matrix_unsei5);
        message = "おみくじ結果は末吉です。苦労の末に明るい結果が得られる運勢です!";
        unsei = 0;
        break;
      case 6:
        matrix.loadFrame(matrix_unsei6);
        message = "おみくじ結果は凶です。気を引き締めて物事にあたるとよい運勢です!";
        unsei = 0;
        break;
      case 7:
        matrix.loadFrame(matrix_unsei7);
        message = "おみくじ結果は大凶です。むやみに動かずチャンスを待つとよい運勢です!";
        unsei = 0;
        break;
    }
  } else if (message != "おみくじ") {
    message = "おみくじ と入力すると、おみくじが引けます。";
  }
}

これが完成したメインプログラムになります。

このプログラムをコピペして、Arduino本体に転送することも可能です。

自動作成されたプログラムから追加・変更した部分を解説していきます。

初期化プログラム

初期化プログラム部で追加・変更した部分を抜き取って解説します。

// Arduino_LED_Matrixライブラリをインクルードする
#include "Arduino_LED_Matrix.h"

// Arduino_LED_Matrixアニメーションファイルをインクルードする
#include "omikuji_animation1.h"
#include "omikuji_animation2.h"

//おみくじ結果を格納する変数
int unsei = 0;

// マトリックスパネルのオブジェクトを作成する
ArduinoLEDMatrix matrix;

// LEDマトリクスに表示「くじ」
const uint32_t matrix_unsei0[] = {
  0xa512,
  0x52204202,
  0x2012209c,
};

// LEDマトリクス表示「大吉」
const uint32_t matrix_unsei1[] = {
  0x10411ffe,
  0x410e1002,
  0x9f45183f,
};

// LEDマトリクス表示「中吉」
const uint32_t matrix_unsei2[] = {
  0x10411ffe,
  0x492efe01,
  0x1f11111f,
};

// LEDマトリクス表示「小吉」
const uint32_t matrix_unsei3[] = {
  0x10411f10,
  0x454e5409,
  0x3f11111f,
};

// LEDマトリクス表示「吉」
const uint32_t matrix_unsei4[] = {
  0x401f004,
  0xe00001,
  0xf01101f0,
};

// LEDマトリクス表示「末𠮷」
const uint32_t matrix_unsei5[] = {
  0x104fff10,
  0x47ce1003,
  0x9f55193f,
};

// LEDマトリクス表示「凶」
const uint32_t matrix_unsei6[] = {
  0x11011,
  0x1b01501,
  0xb01101f0,
};

// LEDマトリクス表示「大凶」
const uint32_t matrix_unsei7[] = {
  0x100111ff,
  0x111b1152,
  0x9b45183f,
};

初期化プログラムで追加したこと

  • ファイルのインクルード命令
  • 変数の宣言

ファイルのインクルード命令

まずはじめに、LEDマトリクス表示させるためのライブラリ「Arduino_LED_Matrix.h」のインクルードを行います。

さらには、LEDマトリクスアニメーションプログラム「omikuji_animation1.h」と「omikuji_animation2.h」をインクルードします。

変数の宣言

おみくじの運勢を格納する変数「unsei」を宣言して、0を代入して初期化しておきます。

プログラム内で「unsei=0のとき」は「おみくじを1回も引いていない状態」と判断させています。

ArduinoLEDMatrix型のオブジェクト「matrix」を作成します。

LEDマトリクス表示パターンのコードを定義します。

さきほどLEDマトリクスエディタを使って、確認した表示コードを割り当てます。

マトリクスLEDの点灯制御については、こちらの記事にて詳しく解説しています。

setupプログラム

setup関数内のプログラムは、プログラム演算開始後1回だけ実行されます。

setupプログラム部で追加・変更した部分を抜き取って解説します。

void setup() {

  // LEDマトリクス動作を開始する
  matrix.begin();

  //乱数の初期化
  randomSeed(analogRead(0));

}

setupプログラムで追加したこと

  • LEDマトリクス動作の開始命令
  • 乱数の初期化命令

LEDマトリクス動作の開始命令

ここではLEDマトリクス動作を開始するためのbeginメソッドを実行します。

乱数の初期化命令

random関数を使って生成される乱数の生成値は、乱数の種が同じ場合は生成順序が決まっています。

つまり、プログラム開始後のおみくじの運勢順序が決まっているということです。

初回は分からなくても、2回目以降はおみくじを引く前から次に引くおみくじの結果がわかってしまいます。

これでは面白くありません。

そこで「randomseed関数」を使って、乱数の種にランダムな値「未接続のアナログピン入力値」を割り当てることで、おみくじ結果の生成を真にランダムなものにしています。

seed:乱数の種となる数値(long型)

乱数制御については、こちらの記事にて詳しく説明しています。

loopプログラム

loop関数内のプログラムは、繰り返し演算されます。

loopプログラムは、自動生成されたプログラムのまま変更点はありません。

void loop() {
  ArduinoCloud.update();
}

onMessageChangeプログラム

メッセンジャーウィジェットを配置すると、onMessageChangeプログラムが自動的にスケッチ内に生成されます。

このプログラムは、メッセンジャーウィジェットのメッセージ内容に変化があったときに呼び出される関数になります。

void onMessageChange() {
  // Add your code here to act upon Message change

  //おみくじ開始前のとき
  if (unsei == 0) {
    matrix.loadFrame(matrix_unsei0);
  }

  if (message == "おみくじ") {

    //おみくじの抽選

    // 抽選中LEDマトリクスアニメーションを読み出す。
    matrix.loadSequence(omikuji_animation1);
    // 抽選中マトリックスアニメーション表示を有効
    matrix.play(true);
    delay(1500);

    // 抽選完了LEDマトリクスアニメーションを読み出す。
    matrix.loadSequence(omikuji_animation2);
    // 抽選完了マトリックスアニメーション表示を有効
    matrix.play(false);
    delay(1000);

    //【抽選結果】1:大吉、2:中吉、3:小吉、4:吉、5:末吉、6:凶、7:大凶
    unsei = random(1, 8);

    //おみくじ抽選結果による、メッセージの振り分け
    switch (unsei) {
      case 1:
        matrix.loadFrame(matrix_unsei1);
        message = "おみくじ結果は大吉です。何事もうまくいく最高の運勢です!";
        unsei = 0;
        break;
      case 2:
        matrix.loadFrame(matrix_unsei2);
        message = "おみくじ結果は中吉です。努力が実る良い運勢です!";
        unsei = 0;
        break;
      case 3:
        matrix.loadFrame(matrix_unsei3);
        message = "おみくじ結果は小吉です。大きな災難もないまずまずの運勢です!";
        unsei = 0;
        break;
      case 4:
        matrix.loadFrame(matrix_unsei4);
        message = "おみくじ結果は吉です。無難に過ごせる良くも悪くもない運勢です!";
        unsei = 0;
        break;
      case 5:
        matrix.loadFrame(matrix_unsei5);
        message = "おみくじ結果は末吉です。苦労の末に明るい結果が得られる運勢です!";
        unsei = 0;
        break;
      case 6:
        matrix.loadFrame(matrix_unsei6);
        message = "おみくじ結果は凶です。気を引き締めて物事にあたるとよい運勢です!";
        unsei = 0;
        break;
      case 7:
        matrix.loadFrame(matrix_unsei7);
        message = "おみくじ結果は大凶です。むやみに動かずチャンスを待つとよい運勢です!";
        unsei = 0;
        break;
    }
  } else if (message != "おみくじ") {
    message = "おみくじ と入力すると、おみくじが引けます。";
  }
}

onMessageChangeプログラムで追加したこと

  • 入力されたメッセージに対する判断
  • おみくじの抽選と結果の表示

入力されたメッセージに対する判断

メッセンジャーウィジェットに「おみくじ」と入力されたら、おみくじ抽選を行います。

それ以外の文字が入力された場合は、「おみくじ と入力すると、おみくじが引けます。」とメッセンジャーウィジェットに表示させています。

おみくじの抽選と結果の表示

おみくじを引く前「unsei = 0」のときは、LEDマトリクスに「くじ」と表示させて待機します。

「おみくじ」入力がされると、LEDマトリクスにおみくじ抽選アニメーションを表示させます。

おみくじ抽選は「random関数」で行い、結果に応じてLEDマトリクスにおみくじ抽選結果を表示して、さらにはメッセンジャーウィジェットにも抽選結果とコメントを表示させます。

random関数では、抽選したいMAX値+1した数値をMAX値として指定します。

Arduino IoT Remoteアプリとの連携が面白い【まとめ】

今回はArduino UNO R4 WIFIをArduino Cloudに接続し、スマホアプリからおみくじを引く方法を紹介しました。

メッセンジャーウィジェットを使うことで、Arduino本体とCloud経由で対話している感覚になりIoTを身近に感じられると思います。

LEDマトリクス表示もアニメーション表示があると、見ていて楽しくなりますね。

せでぃあ

Arduino本体をネットワーク接続した状態であれば、外出先からでもおみくじを引くことができます。

Arduino Cloudには4つのプランがあり、無料のプランも提供されています。

今回紹介した内容は、無料プランで対応可能です。

Arduino Cloudのプランについては、こちらの記事にて詳しく説明しています。

Arduino UNO R4 WiFiで遊んでみたい!と思った方は下記サイトで購入できますのでご検討ください。

Arduino UNO R4 WIFIが買える国内サイト

通信ケーブルは別売りですので、本体と併せて購入すると送料がお得になる場合があります。

Arduino UNO R4シリーズはビジュアルプログラミングには対応していません。

Arduino UNO R3はビジュアルプログラミングにも対応していますので、小学生にはこちらがおすすめです。

ELEGOOのArduino互換キットは、コスパに優れた初心者向けキットです!

マトリクスLEDの点灯制御については、こちらの記事にて詳しく解説しています。

乱数制御については、こちらの記事にて詳しく説明しています。

応援ありがとうございます(^^)/

Arduino Uno R4 WiFiで乱数を使ったIoT Cloudおみくじで遊ぶ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次