つれづれなる備忘録

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

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

 今回はmicro:bitを用いた前回のセンサ測定値の無線通信の応用で、親機から子機に無線でい指令を送信し、センサ測定値を受信する方法について紹介したい。

atatat.hatenablog.com

1. 親機と子機の動作

 親機のAボタンを押すと無線で番号1を子機に送信し、子機が番号1を受信するとTを表示して温度のセンサ値を親機に送信し、親機のLED上に温度の値を表示する。同様に親機のBボタンを押すと無線で番号1を子機に送信し、子機が番号2を受信するとLを表示して子機がライトレベルのセンサ値を親機に送信し、親機のLED上にライトレベルの値を表示する。親機(赤)と子機(緑)の動作を図示すると以下のようになる。

"親機と子機の動作"
親機と子機の動作

2. 親機側の設定

 子機からセンサ値を受信したときの処理は前回と同じ。今回はAボタンが押された際にラジオで送信された番号1を追加する。Bボタンについても同様にラジオで送信された番号1を追加する。

"親機の設定"
親機の設定

3. 子機側の設定

 子機は親機から無線で番号が送信されてくるので、入力>ラジオが受信した"値"をドロップする。ここで"値"は"変数の名前を変更"して例えば変数"L"を新しく定義する。 Lは親機から送信される番号1または2が格納されるので、Lの値によって処理を分岐する。まずコントロール>trueの場合は以下を実行を選択し、"true"の緑短冊部分を計算>1=1ブロックに置き換える。 さらに左側の"1"を変数>Lに置き換え、右側の"1"はそのままにしておく。"trueの場合は以下を実行"の内部には"文字列Tを表示"としては後は子機側から温度のセンサ値を親機に送信する処理は前回と同じ。 同様に"trueの場合は以下を実行"で1=1ブロックの左側をL,右側を"2"に置き換え、"trueの場合は以下を実行"の内部には"文字列Lを表示"としては後は子機側からライトレベルのセンサ値を親機に送信する処理を追加する。

"子機の設定"
子機の設定

親機のBボタンを押したときのTinkercadのシミュレーションの実行例を示す。

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

4. 定期的にセンサ測定値を受信

 上の例は親機のボタンを押すことで子機からセンサ測定値を取得するものだったが、実用上としては定期的に測定値を取得したい場合がある。そこで上の親機のコードブロックを一部変更してコントロール>永久にを用いて、ラジオが送信した番号の処理を適当な待機時間を入れて繰り返すことで、定期的に親機から子機へ命令を送る。(子機側から定期的にセンサ値を送信するようにしても良い)

"一定時間ごとに処理"
一定時間ごとに処理

5. まとめ

 今回は親機から無線で命令を送信し、子機側は条件分岐処理を追加することで、親機からの命令に応じて処理を切り替える例について紹介した。