前回まで/次回以降の取り組みはこちらから。
Raspberry Pi側のアプリを作りこんでいきます。
もくじ [hide]
今回の完成図
こんな感じ。
LED照明に関して、時刻と照度で自動制御できるようになりました。
「時刻設定1」「時刻設定2」「照度設定」のチェックが入っていればそれぞれ有効になり、ロジックは「(時刻設定1 or 時刻設定2) and 照度設定」にしました。
例えば、
![]() | LEDは常に点灯する。 |
![]() | 0:00~6:00の間点灯する。 |
![]() | 18:00~23:59の間点灯する。 |
![]() | 照度が40以下なら点灯する。 |
![]() | 0:00~6:00の間と、18:00~23:59の間に点灯する。 |
![]() | 0:00~6:00の間、照度が40以下なら点灯する。 |
![]() | 18:00~23:59の間、照度が40以下なら点灯する。 |
![]() | 0:00~6:00の間と18:00~23:59の間、照度が40以下なら点灯する。 |
こんな風に設定できます。
Arduinoスケッチ
前々回、センサデータの先頭に「d」という1文字を送ることで、Arduinoがデータの先頭を判断できるようにしました。
pythonプログラム
main_0_0_7.py
mainwondow_0_0_7.py
Raspberry PiとArduinoでLEDを連携制御する
前回まで
これまでは、Raspberry PiがArduinoからセンサの値を受け取るためにこんな風に動いていました。
Raspberry PiはArduinoにシリアル通信で「d」という文字を送り、データを受信する体制に入ります。
Arduinoは「d」という文字を受け取ったら、決められた順番に沿ってセンサのデータを返事していきます。
今回は
LEDの制御をするために、こんな風なやり取りをしています。
Raspberry Piから受け取ったデータ文字列によってON/OFFのしきい値とフラグを変えます。
フラグが「true」ならLEDをON、「false」ならLEDをOFFにします。
照度センサの値がしきい値以下であり、フラグがtrueならLEDをONします。
それ以外の状態、照度センサの値がしきい値より大きいとか、照度センサの値がしきい値以下でもフラグがfalseならばLEDをOFFします。
A:点灯させるとき(照度しきい値なし)
Raspberry Piのアプリで「照度設定」のチェックが入っていなくて、設定時間になった場合です。
または、「照度設定」にも「時刻設定1/2」にもチェックが入っていない場合です。
Raspberry Piから「L000」という文字列を送信します。
Arduinoはしきい値を「1024」、フラグを「true」にします。
照度センサの値は0~1023の範囲しかとらないので常にしきい値以下です。
照度に関係なくLEDが点灯するというわけです。
B:点灯させるとき(照度しきい値あり)
Raspberry Piのアプリで「照度設定」のチェックが入っていて、設定時間になった場合です。
または、「照度設定」にだけチェックが入っていない場合です。
Raspberry Piから「Lxxx」という文字列を送信します。
「xxx」にはしきい値が入ります。0~998の範囲で指定します。
(999が入らない理由は別のことに使ってるからです。次のセクションで出てきます)
Arduinoはしきい値を「xxx」、フラグを「true」にします。
LEDフラグはtrueなので照度センサの値がしきい値以下になればそれでLEDが点灯します。
C:消灯させるとき
Raspberry Piのアプリで「時刻設定」がされていて、設定時間外になった場合です。
Raspberry Piから「L999」という文字列を送信します。
この場合はArduinoはフラグを「false」にします。
照度センサの値とかしきい値とか、問答無用でLEDはOFFになります。
センサデータのやり取り
センサデータのやり取りについてもちょっと変更しました。
これまでは文字データ「d」でしたが、照明制御の時とデータの長さを合わせるために文字列「d000」に変更しました。
今回は照明用LEDの制御が完成しました。
この方法をほとんどそっくりそのまま使えば水やりの制御もできてしまいそうです。
また、クリスマスのイルミネーションや玄関灯にもこのまま応用できそうですね。
まだまだ続きます。
コメント