以前Arduino Pro Microで空気モニターを作成する記事を書いた。
thom.hateblo.jp
あれから1年以上運用が続いていて、もうこれが無いと落ち着かないというほど日常の一部になっているのだが、残念なことに最近バグの発生頻度が酷くなってきた。
具体的な症状
Arduinoからのシリアル通信が届かなくなってラズパイ上のPythonプログラムが落ち、再実行するとArduinoから報告される気温が-190℃・湿度が100%になってしまうこと。
色々再起動したり放電しても直らないので最初センサー故障を疑ったんだけど、Arduinoへプログラムを再書き込みすることで修復することができることが分かった。
これまでの対処
もともと運用中にも低確率で発生していたが、パソコンから書き込んで一旦Arduinoの電源を抜くと再接続した場合は高確率で発生する。この時点で疑いが強まったのが何かしらの突入電流である。特にケースファンのモーターが何かしら悪さをしているのではないかと考えた。
しかし知識不足のため解消方法が分からない。
仕方なくラズパイにArduino IDEを入れて派生したらラズパイから書き込むという対処を採用した。
こうすればモーターの動き始めによる影響を緩和できると思ったのだ。
発生頻度増加と対策
ここ最近、1日に数回上記バグが発生し始めたので根本対策としてArduino Pro MicroからArduino Unoに変更してみた。
こちらのブログによると、Arduino Unoは電源まわりが一番ちゃんと作りこまれているらしいので期待できる。
radiopench.blog96.fc2.com
そもそもPro Microの電源まわりは弱くて、USBから5V供給した場合にVCCやRAWと書かれたピンから実際に出てるのは4.6V程度。ここにセンサー類と小さいファンを繋いだところ、出力が4V程度まで低下していて、たまに4Vを下回るなんてことが起きていた。
実際に電源の違いを確認
まずは大本のUSBからちゃんと5V来てるのか確認。
4.99Vなのでまぁ合格といって良い。
これをArduino Pro MicroにつないでRawピンを計ると、4.59ボルトしか来てないことが分かった。
Rawって生という意味なので、生の5Vが直接給電されてると思ってたんだけど、違うのかな。。
中で本体給電と分圧されてしまってるのか何なのか、原因は不明だけど故障じゃなくてこの製品は全部これくらいしか電圧出ない。
※ちなみに純正Arduinoではない。
Unoの場合は5V端子を計ると、4.938ボルト。
直接USBを計るよりは0.062ボルト程度低下してるけど誤差の範囲だ。
そしてセンサーをつないでみたのがこちら。
5V端子の電圧を計ってみると4.7ボルトくらいまで低下していた。定期的に一瞬4.6ボルト台に落ち込むタイミングがあるけど、これだけ出てればセンサー類も大概問題なく動く。
一応データシートや参考サイトで繋いでいるセンサー類の動作電圧範囲を調べてみた。
センサー | 型番 | 動作電圧範囲 |
Co2センサー | MH-Z14A | 4.5 V ~ 5.5V |
気温・湿度・気圧センサー | BME280 (5V対応モジュール) | 4V ~ 5V |
ダストセンサー | PPD42NS | 4.75~5.75 |
ダストセンサーが微妙に足りてないけどまぁダストは目安値だし、そんなに大きく狂わないだろう。
ケースへ組込
電源を抜き差ししてもArduinoそのものはバグらないことを確認。
その後まる1日稼働させても問題なかったので最後に組み込んで完成。
Arduinoが大きいのとUSBタイプBが邪魔になるのでL字プラグを買って被膜を剥いで加工するのが微妙に面倒くさかったけど、大本の給電はケースに固定したUSB Microで変更はなく、外観的には以前と変わらないのが良かった。
あと余談だけどUSBのケーブル被膜を剥くときに、電源ライン(赤・黒)とデータライン(緑・白)では銅線の太さが違うことに気づいた。これはモノによると思うので同じ太さの場合もあるだろうけど、新発見だ。確かに電流量が違うので小電流しか流れないデータラインの方を細くして少しでもケーブルを柔らかくするのは合理的だなと思った。
ということで、小型Arduinoの電源電圧降下が原因と思われるトラブルに見舞われたら純正のArduino Unoを使ってみると良いかもしれないという話。
以上。