profile-photo

雨降りロボット

雨の降り始めを検出して、メールを送信するロボット


雨降りロボット。と、言っても、雨を降らしたり、雨の中を走り回るロボットではありません。
雨の降り始め(水滴)を検出して、Wi-Fiネットワークを通して
「雨が降り始めたよ〜」と、メールを送信するだけのものだ。
ただし、メールサーバはインターネット上のものを使っているので、Wi-Fi自体はインターネットに繋がっている必要がある。

洗濯物を外に干して、家の中で仕事したり本を読んだりしているのだが、天気の怪しい時には時々外を覗かないと心配だ。
更に別のことに熱中していると、洗濯物のことを忘れてしまうこともある。
また時には少し家を離れることもあったりする。 そんな時に、洗濯物と一緒にこのロボットを屋外に出しておくのだ。
そうすれば雨が降り出した時に、メールで知らせてくれるので安心だ。
ただし、メールはpush通信が可能なものでないと、逆に時々メールを確認しなくてはならず、かえって鬱陶しい。
IOSやMacのユーザならiCloudのメールを受信先にして、メールの設定を「PUSH」にしておくだけなので簡単だ。
Gmailもプッシュに対応している様だが、僕は使っていないので良く分かりません(^_^;

今回は、設置場所に電源が無いので、バッテリーで運用しなくてはならないのが課題だった。
ESPにはスリープモードがあって、消費電力を減らすことができるようになっている。
なので、雨が降っていない時はスリープしていて、雨(DO)でESPを目覚めさせるように考えた。

ESPは小型で機能も高く便利なICだが、消費電力の大きいことが頭痛のタネだった。
だが、低消費電力のスリープモードもあるのだ。スリープモードには
"Modem-Sleep"
"Light-Sleep"
"Deep-Sleep"
の3つのモードがある。
このうち、Deep-Sleepモードはデータシートによると10μAと驚異的なのだが、復帰はリセット状態からになるので、なかなか使いにくい。
今回は、雨を待っている間、Light-Sleepモードになるようにして見た。データシートではこの時900μAとなっている。
実際に作成して、消費電流を測ってみたところ、次の様になっていた。
Wi-Fi接続中:90mA〜70mA(実際には200mAを越える時期もあるそうだが、デジタルテスターでは追従しないので、この程度の値が表示された)
接続済み・メール送信中など:30mA〜20mA
Light-Sleep中:3mA〜2mA(この状態ならバッテリーは数日は楽勝だと思われる。(今回使用したバッテリー、2,800mAHと書いてあるので、それが本当なら「900時間強=1ヶ月強」と言うことになるが、ネット上のバッテリーの評価では実質1,000mAHも無いとか。それでも数日は十分動作することになる。)
その後実際に動作させてみたところ、3日程で3.0Vを切るところまでダウンした。雨降りロボットは1日以上動作させることはあり得ないので、取りあえず良いことにしたが、理論値に比べてあまりにも短い。この当たりはまた時間を見てテストをしてみたいと思っている。

スタート 4.07V 直後からLight-Sleep
24時間後 3.92V
48時間後 3.75V
60時間後 3.0V 直前に1回起動(リセットが掛かったか?)

※)SMTPサーバの接続について
SMTPサーバーはport25番だった。
でも、最近はセキュリティ対策のため、465(SMTPS(over SSL))とか、587(STARTTLS)を使って、認証と暗号化が必須になりつつある。
SSLなどの暗号化はちょっとArduinoには重すぎるのか、ネット上を見渡したところそのようなライブラリは見つからなかった。
雨降りロボットは25番ポートで認証無し・平文でメールを送っている。今後セキュリティ対策が必要になれば、AWSで送るとか、SMTP2GOを経由するとか考える必要もあるかと思う。

 

100

外観
表示器は緑・オレンジのLED1つだけなので、外から見えるのはRaindropセンサー基板のみ

1000

完成した内部の様子。
電源はAA(単3)電池とほぼ同サイズの14500Li-Poバッテリー。直径14mm長さ50mmなので、「143500」と言うそうだ。
空中配線したレギュレーターや心配な配線部分はホットボンドで固定してしまった。

200

電源スイッチと3.3Vレギュレータ回り。
左のスイッチは2線式電圧計への押しボタンスイッチ

300

基板取付前のケース内部の様子

400

表示・操作部。
一応雨が掛からない様、ケースの中に引き込んである。
雨が心配なら、ここにカバーを取り付ける積もりではある。

500

バッテリーチェックの様子。
電圧計を電池に押しボタンスイッチで接続するだけ。

600

メイン基板のハンダ面。
片面基板で作るので、どうしても数本のジャンパーワイヤーが必要になる。
(今回は訂正の後では無い(^_^;)

700

メイン基板の部品面。
ESP以外にはリセットとモード切替SW(IO0)とユニットの接続コネクタだけ。

800

メイン基板の上には、Raindrop検出用のコンパレータ基板が乗る。

SLEEPからの割り込み復帰

雨滴センサーには、市販の”Raindrop module”と言うセンサー基板とオペアンプのコンパレーターをセットにしたものを使用。
これをESP-WROOM-02(以下ESP)に接続してセンサーからのデジタル出力を『雨』と、判断するのだ。
ESPのマニュアルではGP-IOのピンをデジタル入力に割り付け、そこが"LOW"になるとスリープから復帰すると書いてある。
ここで、しばらくハマってしまった。
バラックセットではESPのピンをGNDに当てると、確かに割り込みから復帰することが分かった。
「これは簡単だ。」と、良い気になった。
しかしプロトタイプの回路を作り、Rainsensorを繋いで、GP-IOのDIをLOWにしても割り込みから復帰しないのだ。(勿論Rainsensorの出力は「雨検出でHIGH」なので、インバーターを繋いでテストした。)
ネット上を色々見ていたら、どうもLOWになったあと、再びHIGHにする必要があるようだと分かった。つまり、GP-IOのDIからの復帰タイミングは、LOWになった信号の立ち上がりになっているようなのだった。
最初バラックセットで実験した時は、単に線の端をGNDに触れさせていたので、チャタリングやノイズで信号がバタ付いて立ち上がりのエッジが出た様だ。
結局、トランジスターで微分回路をドライブしてワンショット・パルスを出力することにした。ついでにその後にもう1段トランジスターを追加して極性を反転させた。

電源回りのあれこれ

当初はユニバーサル基板に実装して済ませるつもりだったが、予想外に配線が増えたので、PWBを起こすことにした。
最初からそのつもりなら、ESPもパターンを作って基板に直接ハンダ付けすれば良かったのだが、あの狭いピンピッチに苦労させられた悪い記憶があるので今回はブレークアウトボードを用意してしまった。このブレークアウトボードをメインのボードに実装することにした。
電源は最初はNi-MHの予定だった。1.2Vx3に逆流防止用のダイオードを付けると3.4Vになるので、そのまま全回路をドライブする予定だった。
しかし、部品を並べてみると電池の大きさが気になりだした。そこで、途中から14500のLi-Po電池に設計変更。ただしその時にはPCBが出来上がっていた。
そこで、4V→3.3Vのレギュレータを急遽追加した。この部分はIC(NJM2845DL-33)とコンデンサー2個(0.1uFと47uF)を強引に空中配線で実装した。全てSMDなので、丁度上手くICの足の上に載せることができた。因みにのNJM2845と言うICはVo+0.1V位から動作出来、無負荷時の電流も400uAでローノイズ・低飽和型の優秀なレギュレータだ。そうそう出力電流も800mAと、沢山流せて安心なので僕は良く使わせて貰っている。
ついでにESPは、ToutにA/Dコンバーターが付いていて電源電圧の監視もできる。そこで電池の電圧チェックもソフトでやるつもりだった。しかし、表示器をどうしようとか考えていたら超小型の2線式電圧計が手元にあることに気がついた。結局電池の電圧監視は、完全手動と言うことで押しボタンスイッチとこの電圧計で誤魔化してしまった。


参考までにハードウェア・ソフトウェアの情報を。ただしこれらは僕の覚えであり、正確に改版を反映していない可能性があります。この通り作って動かないからと、怒らないで欲しい。