おもちゃ、家電、もろもろの修理の足跡と備忘録

色々と忘れるので、趣味のメモ

気圧/温度/湿度測定のその後 AHT20とBMP280のコンボ素子に付け替えてみました

2023-05-30 17:41:07 | ESP8266DEVkitで遊ぶ
 気圧、温度、湿度の計測ですが、外においておいたら雨がかかってしまってBMP280がお隠れになりました、、、、。
 で、違う素子を買うとまたソフト書かないと行けないし、なにか良い方法は無いかな、と調べていたら、なんとaht20とbmp280 のコンボ基板が有ったのでポチりました。価格は単体価格で142円(送料がかかるので、2個買って453円、一つあたり227円)。
 前回買ったAHT20と以前使っていたAHT25はほぼソフトコンパチだ、という情報が有ったのでI2Cのアドレスを調べて、こちょこちょっといじったら動きました。素晴らしいです。
 やっぱり、こういうコンボものが売っているということは、気圧、気温、湿度の組み合わせで、かつ、そこそこの値段で使いたい人がいるっってことですね。でも計測してみるとどちらの素子にも入っている気温センサからの出力が微妙~に異なるのはご愛嬌です。

 それとあとは、湿度がある閾値より下がったら通知が来るようにしてみました。これは、ambientで受信した測定データを定期的にWSL2/Windows11の上で作ったアプリが読みにゆき、予め設定した湿度の閾値を下回ったらLine notifyを使ってスマホに通知が来るようにしたものです。pythonとshell script、cronを使ってちょこちょこっと作りました。洗濯物の取り込みが終わって装置を止めても閾値だけ見ているとアラームが出続けるので、前回差分を取って数値が同じだったら送信をスキップするようにしました。
 雨の日は、浴室で朝洗濯物を干して除湿機で乾かすわけですが、湿度が50%を切るとほぼほぼ乾いているので、乾いたものを取り込み、まだ湿気っているものを継続して乾かす、という感じでの運用?をしています。
洗濯物の量だったり、季節でやはり違うのですが、大体50%位からは湿度のカーブが変わるので、まぁ、そんなもんかと。(経験則、、)
上のグラフは、お昼休み明け?に覗きに行ったので、そのときにちょっと数値が上がっています。その後湿度が50%を切ったので、13:40以降Line notifyで通知された結果です。このあと測定器の電源を切ったのでスキップして14:40以降は止まっています。
 ESP8266でのお遊びはこれくらいで終結でしょうか。
上の写真の後ろに見えているのは、ESP32です。今後はこちらでと思っています。

湿度が測りたくなって、AHT25を追加した

2023-01-07 17:58:34 | ESP8266DEVkitで遊ぶ

【左がBMP280、右がAHT25】
随分経ちますが以前、BMP280で気圧と気温を計測できるようにしました。
この巣ごもり中に雨の日などに浴室に乾燥機を入れて洗濯物を乾かすわけですが、一体湿度はどう変化しているのだろう、と気になり、年末年始のお休みに湿度を測れるようにセンサを加えて計測できるようにしてみました。

BMP280(もともとBME280を買ったつもりがBMP280が届いた、、BME280は気圧、気温、湿度が計測できるが、BMPは湿度が計測できない)には湿度計測機能が無いので、BME280を買い直すのが一番てっとり速いのでしょうが、秋月のお買い物ついでに、AHT25という温度、湿度計測センサがあったのでポチってしまいました。
で、お正月のお休みにこいつをBMP280と一緒に動かして計測できるようにしました。

方針:
・BMP280で計測していた物にAHT25を同じI2Cの系に入れて計測する
・開発環境はLUA5.1 on ESP8266を使う

ということにしました。
色々と途中ではまりましたが、なんとか動くようにできました。
ハマったところは
・BIT演算したかったのに、LUAはv5.3から整数演算とができるようになったようだが、https://nodemcu-build.com/ で作れるのはこれまでのv5.1のみ。仕方ないので、やりたいBIT演算ができるようにLUAで作る
・BME280(BMP280)のライブラリが新しい環境に移行し始めていて、そのうち使えなくなるよ、と都度言ってくるので、他の人のを参考に載せ替えた
・載せ替えたりコードを追加したりしているうちにfileから起動するとメモリが足りないとおっしゃる
などなどいろいろありましたが、とりあえず動く様にしました。以下が結果です。
左上が、これまでのBMP280の気圧と気温。
右上が、今回のATH25の気圧と湿度。
左下が、BMP280とAHT25の気温。

右上で温度、湿度が最後に急激に上がっているのは、写真を取るために場所を移動したので、その影響です。気にしないで下さい。
グラフは、室内設置で、5分間隔で300ポイント(25時間分)になります。
・気温が急に上下しているところは、窓を開けたところで、湿度が急激に下る(外気のほうが湿度が低い)ことが見て取れます。
・想定外なのは、BMP280とAHT25の気温は、ほぼ平行ですが、急激な気温の変化に対してはBMP280のほうが俊敏。両者の写真を見ると、どう見てもBMP280のほうがベースが大きいので比熱が高いと思いきや、逆なんですね。
ちなみに、BMP280は何度とっても数値は安定していましたが、AHT25は取るたびに数値が荒れるので、10回連続取得したものの平均値を取っています。このあたりになにか影響があるのか無いのか。とりあえず、細かいので放置しました。

【最後の40ポイント(200分)のトレンド15:00の所の変化に注目】
ということで、今度雨が降ったら(関東は年末から全然雨が降っていません、、)湿度のトレンドを取ってみたいと思います。

BMP280のデータ、気圧と気温の数値を評価しました

2020-05-14 17:41:49 | ESP8266DEVkitで遊ぶ
 ズルズルとやってきた気圧/気温のリモート監視装置?に区切りをつけるために、一ヶ月続けてデータを取りました。どのくらい精度があるのかの検証?のために地域で公開している気象データと比較しました。(気象情報は勝手に公開してはいけないのだそうです、、どこかに書いてあった。けれど、グラフだから良いでしょう、、)
 データは、AmbientからPythonで簡単に持ってこられました。Ambientの例題を参照。

 気圧は、このデバイスがこんなに精度があるとは思っていませんでした。公開データの場所より高度が高い(気圧が低い)ところで、その気圧の差分は平行移動(高度差、ということです)。細かい急激な変化も捉えています。グラフから気圧差をとって高度を計算したものと、国土地理院の地図(今はNetworkで見られるんですね、、昔はわざわざ大きな本屋さんまで買いに行ったのに、、。その上高度まで表示してくれます。DEMデータを持っているんですね。)での高度を比較するとほぼほぼあってます。



 気温については、センサ一式をジップロックにモバイルバッテリーと一緒に無造作に放り込んで、二階のバルコニに設置放置で、日中日が当たらない場所に置きはしたものの、輻射で気温も上がるのでそれを差っ引くと、それなりに精度はあるとような気がします。トレンドもよく合っています。きちんとした百葉箱?のようなものに設置すれば問題ない程度だと思います。



 結論、海外からの送料込みで100円足らずのデバイスでも、精度は非常に良いです。外気温と気圧はわざわざ個別に測定しなくても、近隣の公開データ(10分間隔ですが)で十分かな、ということでした、、、、。(当然室内の温度はそれではだめですけどね、、)まぁ、制御デバイスとセンサデバイスで、合計しても600円足らずで楽しめたから良しとしましょう。
さて、飽きたから、つぎやろ。

nodeMCU/AMICA の電源

2020-04-12 13:52:21 | ESP8266DEVkitで遊ぶ
順調に動いている気圧と気温測定装置ですが、お手軽だったのでUSB経由で電源を供給していたのですが、最終形態にするために、直接電源をDevKITに供給することを考えます。ボードにVinというPINがあるので、USBのVBUS、Vin、3V3の関係を調べてみました。

micro-USB(VBUS)-->Diode-->Vin端子-->3.3Vregulator-->3V3端子
となっているようです。
参考:https://analogicintelligence.blogspot.com/2019/06/nodemcu-devkit.html 

3.3Vのレギュレータは、NCP1117というもので、調べるとDropOut電圧はなんと190mV!。Vinの最低電圧は、3.3+0.190=約3.5V以上となります。
Vin手前のDiodeは、0.45V@1Aのようなので、VBUS=5Vですから、そんなもんなのでしょう。

まとめると、
Vin→DevKITボードへの電源供給端子(出力端子ではない)
3V3→DevKITボードからの外部への供給、出力端子、全部で最大1A
なので、DevKITボードへ電源を供給する場合はVinへ3.5V以上、最大10V程度(NCP1117自体は最大入力20Vと書いてありますが、海外のESP8266関連の書き込みで、12Vで焦がしちゃった、のような書き込みをいくつか見ました。9Vの006Pは大丈夫なようです(自己責任でお願いします)。)


ESP8266/AMICA@LUAでdeep sleepする

2020-04-12 10:55:54 | ESP8266DEVkitで遊ぶ
単にsleepする方法で動かしてきましたが、連続で動作させると、やはり電源が気になるので、deep sleepを使って、もう二桁ほど消費電力を下げます。

ESP8266のdeep sleepは内蔵時計を使って外から自分をRESETする
deep sleepは、ESP8266の内蔵時計RTC(RealTimeClock)を使って、設定時間になると外部PINに信号(Low)を出すようにできるので、それをESP8266のRESET端子に接続することによって、自分自身を外からRESETする、という事で実現するようです。
ESP8266 DevKITは、いくつかの会社から出されていますが、私が使っているのはAMICA製です。PIN配置、名称、機能などが違うようですので気をつけてください。

1.ハードウェアの設定 <D0とRSTを接続する>
RTCのタイムアウトによる外部への信号線は、ESP8266 DevKITのD0/GPIO16です。負論理。これを外部結線でDevKITのRST端子に接続します。RST端子はESP8266の内部で軽PullUpされているようなので、外部ノイズなど気にしなければ直結のみで大丈夫そうです(私は直結のみです)。気になる方は適当な抵抗(20kohm位?)を介してPullUpしてください。

2.ソフトウェアの設定(LUA)<node.dsleepを使う>
ソフトウェアは、node.dsleep(sleep_time_in_micro_seconds) を使います。
詳しくは、
https://nodemcu.readthedocs.io/en/master/modules/node/#nodedsleep 
に出ています。他にもオプションがありますが、とりあえず入れなくても大丈夫なようです。時間はマイクロ秒です。桁を間違えないようにしてください。

TIPS:
(a)プログラムの中でdeep sleepしない状態に遷移する方法を用意する
deep sleepすると当然外部(serial/PC)からの制御が効かないので、次のRTCのtime outまで待つ必要があります。気をつけないといけないのは、RTCのtime out後のボードRESET、初期化から、自分が書いたプログラムがすぐに実行されてしまい、処理に時間がかからなければすぐに「次のdeep sleep」に入ってしまい、「debugできない状態」になります。他の方々のWEBなどを見ると、「Firmwareの書き込みからもう一度やっちゃった」のような、「やっちゃった事件」を経験されている方が少なからずいらっしゃいます。
ということですので、プログラムへの「debugができるよう」な仕組みの作り込みが必要です。私は、プログラムのシーケンスの中に、あるPINを見に行って、LOWに落ちていたらdeep sleepをしない処理を入れました。お気をつけください。
(b)RST端子とGND端子のshortでdeep sleepあけを模擬
deep sleepの時間を長くすると、当然その設定した時間分待たないとdebugできないのですが、あまりおすすめはできませんが、RST端子の隣がGNDなので、RST端子とGNDをピンセット等でshortしてあげると、deep sleepからの復帰の試験ができます。
(c)実際にdeep sleepに入るまでに多少時間がかかる
ソフトでnode.dsleepを設定したらすぐにdeep sleepに入るかというと、どうもちょっと時間が必要らしく、次の処理を開始してしまう、という事象があります。どうせdeep sleepで全リセットが掛かってしまうので気にしないか、タイマーを入れるなりして見栄え?を良くする方法があります。お好みで。
(d)とりあえずOnePass通ったらdeep sleepでもよい(かも)
deep sleepはDevKIT外部からのリセット信号でボードごと初期化されるので、とりあえずやりたい処理をして、後処理(次の工程に必要な環境、変数とかの設定など)はしても仕方無いので、DevKIT起動時の初期化さえきちんとできていれば、OnePass通ったら最後にnode.dsleepを入れての作りっぱ、でも大丈夫なような気がします、、。ご参考まで。(あまり勧められませんが、、)

その他の消費電力の削減方法:
とりあえずdeep sleepで消費電力を削減できるのではと思いますが、更に削減するのであれば、以下のような方法も考えられると思います(実際にやったわけではないですが、、、)
  • 複数回分をまとめて送る →消費する電力の殆どはWiFiに関するものだと思いますので、まとめて送る事で消費電力の削減が期待できます。ちなみに、ESP8266には少量ですが、RESETでも消えないメモリエリアがあるようです。
  • しきい値を作って、前回取得したデータと今回取得データ値の差分がある程度以上大きくなったら送信する →上と同様、送信する回数を減らす方法です
  • 固定IPを使う→当初、WiFiへの接続の試験をしているときに、WiFiがUpしたらすぐにIPがもらえるかと思ったらそうでもなかったので、環境が許せば固定IPを設定して使うことでWiFiの使用量を減らすことができるかもしれません。
  • どうても良い方法ですが、送信間隔を伸ばす、、。送信間隔を倍にすれば、消費電力は半分に、、、。
皆さんお楽しみください。

下のグラフは左のグラフが、温度と気圧の変化です。気圧が下がっていますが、明日は大荒れだということでどんどん下がってゆくのかもしれません。
右側のグラフは、adc.readvdd33(0)を使って読んだ内部電圧(DevKITのボード上では3V3の端子電圧)らしいのですが、3.0V位としか読めないので、どうなっているのかよくわかりません、、。(3V3端子をテスタで見ると3.3Vあるし)
ちなみに、このページのはじめにある写真は、2階のバルコニでビニール袋に入れられてテスト(放置)される僕、です。