【組み込み工作】電子百葉箱製作~Arduino動作確認編~

Arduino

ArduinoでBME280とLCDの動作確認

前回に引き続き温湿度気圧計を作っていきます。

【組み込み工作】電子百葉箱製作~構想編~
ATtiny85を使用した温度湿度気圧計の作成記事になります。今回はその構想編です。内容は材料、機能、動作フローなどを書いています。

今回の記事はArduinoでの動作確認を行っていこうと思います。あと、前回の構想の時に抜けていた所(スリープ方法など)も触れながら進めていこうと思います

回路構成

回路図になります。今回使用するLCDはモジュール化していない裸の物を使用するために昇圧回路のコンデンサを取り付ける必要があります。

また、5V電源からとってきていますが、LCDドライバの設定で昇圧をOFFにしております。

その他はI2Cラインをプルアップするだとか、スイッチのチャタリング防止にコンデンサ入れるだとか位なので回路的には難しいところはないと思います。

ソフト

機能構想修正

スリープ機能のフローを追加しました。動作としては画面表示後10タイマ割り込みサイクル中に画面切り替えの動作がなかったらスリープします。復帰はタクトスイッチ押下です。

めちゃシンプル。スリープまでのカウントは前述の通りタイマ割り込み中にカウンタを設けています。割り込みボタンが押されたらカウントがリセットされる仕組み。

POINTスリープまでの待機時間はタイマ割り込み関数内にカウンタを作ります(volatile)を忘れずに。
2020/1/18 : ATtiny85実装時は割り込みを廃止しています。

コード

ライブラリを使用していないのでめっーーーーーちゃダラダラ書いています。(どこか簡単に置き換えられる所あったらご教授お願いしますm(__)m)

一から解説は長くなるのでやめておきますが、一つだけ頭を使ったのはLCDに値を表示する際に温度と湿度、気圧で得られる文字数と小数点の位置が異なるのでforループと剰余・除算で一個づつ分解しています。このやり方が一般的なのか不明ですが、一応動きます。

あと、忘れがちなのですがスリープ前にはタイマ割り込みは停止しましょう、スリープモードに入ってもタイマ割り込みですぐに復帰してしまいます。

もう一つ、こだわりがありましてスリープに入る2カウント前に画面をリセットして[sleep]と表示させています。

POINTスリープ開始前にはタイマ割り込みの停止やLCDのクリア,電源OFFを設定しましょう

動作確認

補足

今回スリープモードとして【SLEEP_MODE_PWR_DOWN】を使用しています。外部割込みやWDT、リセット以外では復帰しない最も深いスリープモードです。その分消費電力も最小になるそうです。

確認のためにUSB電流計で消費電流を測定してみました。

左がスリープ前(50mA), 右がスリープ後(20mA)です60%くらい消費電力が減りました。

でもスリープ状態でも20mAあるのは結構大きいですね。スリープ状態でもUNO上のいくつかのLEDはつきっぱなしだったのでそこらへんも関係しているのかな?ATtiny85に実装の際にはここら辺もう少し詰めていきます。

おわりに

基本的な動作はこの記事の動作で完結いたします。

次からはATtiny85に移行するにあたってのコードのリバイスとハード側(筐体)の加工を進めていこうと思います。

ではでは~

次回記事

【組み込み工作】電子百葉箱製作~コード最適化編~
ATtiny85で電子百葉箱を作るコード最適化編です。ArduinoコードからATtiny85用にコードを最適化します。基本的にはI2CやTimerライブラリを修正して、Arduino関数をATtiny85のレジスタ操作に置き換えます。

コメント

タイトルとURLをコピーしました