つれづれなる備忘録

日々の発見をあるがままに綴る

Tinkercadによるマイコンシミュレーション7

 今回はmicro:bitを用いた無線通信でセンサの測定値を無線で送受信するシミュレーションについて紹介したい。

atatat.hatenablog.com

1. センサ測定値の送信(子機側)

 今回は子機側でAボタンを押すと温度センサの値、Bボタンを押すとライトレベルの値を親機に送信し、親機は温度の場合はT:+値+deg、ライトレベルの場合はL:+値+lmをLEDに表示する。

まず子機のコードブロックは、開始時にラジオセットグループを1に設定する。センサの値を送信するには"ラジオが送信した番号"を使用するが、Aボタンが押されたか、Bボタンが押されたか区別するため、温度の場合T:、ライトレベルの場合L:という文字列を付加して送信する。これを実行するには以下のようにボタンAが押されたらラジオが送信した文字列"T:"、ラジオが送信した番号"温度(℃)"、ラジオが送信した文字列"deg"とする。なお"温度(℃)"は入力からドラッグしてラジオが送信した番号にはめこむ。ボタンBについても同様にコードブロックを形成する。

センサの値は、"番号"として扱われるため"文字列"にはめこんでも値が認識されない。通常のコーディングでは、センサの値(int型)を文字(Str型)にキャストしてラジオが送信した文字列のみを使用するとすっきりするが、Tinkercadのブロックではキャストに相当する命令がないため、番号と文字列を送信するブロックを両方とも使用している。

"子機のコードブロック"
子機のコードブロック

2. センサ測定値の受信(親機側)

 次に親機側のコードブロックについて示す。子機と同様に開始時にラジオセットグループを1に設定する。子機からは文字列、番号が送信されてくるためブロックとしては"ラジオが受信した文字列"と"ラジオが受信した番号"を用意する。"ラジオが受信した文字列"は前回と同様に、文字の部分をドラッグして文字を表示にはめこむことで、受信した文字をLEDに表示する。"ラジオが受信した番号"については以下のように"値"をクリックして"変数の名前を変更"を選択して受信した番号を格納する変数を入力する。以下は既に定義済だが"T"という変数を定義すると、変数ブロックに"T"が追加される。数字を表示に変数>Tをドラッグすると受信した数字をLEDに表示することができる。

"変数の設定"
変数の設定

親機の側のコードブロック全体は以下のようになる。プログラム的には"ラジオが受信した文字列"と"ラジオが受信した番号"が並列になっているところが気持ち悪いが(上から下に実行されるわけではない)、子機側の方で文字列、番号、文字列の順で送信しているのでT:+値+degのように表示できる。

"親機のコードブロック"
親機のコードブロック

3. シミュレーション実行例

 以下シミュレーションの実行例を示す。子機(緑)のAボタンを押すと親機(赤)のLEDに"T:21deg"と表示され(左から右に1文字づつ流れていく)、Bボタンを押すと"L:128lm"と表示される。 赤枠の温度やライトレベルのゲージを動かすと、センサの値が変化してボタンを押すと変化した値が親機のLEDに表示される。

"シミュレーション実行例"
シミュレーション実行例

4. まとめ

 今回はmicro:bitを用いてセンサの測定を無線通信するシミュレーションについて紹介した。