自動灌水システムのアップグレード
以前作成した自動潅水システムですが、運用を続ける中で細々とアップデートしてきました。 直近の更新は以下の2点。
- モータの定電圧制御 バッテリーの電圧でポンプを回していたのですが、電圧によって吐出圧に変動が出てしまうので、制御を行う必要があると思っていました。モータの電圧を測りながらPWM制御を加えることも検討しましたが、オシロスコープを持っていないため断念。また、バッテリー電圧の下限が11.5Vなので12V以下になったら出力が下がるという問題もありました。諦めかけた時に、Amazonで昇降圧対応のInput:9-36V Output:12V5Aまで出せる安めのDC/DCコンバーターを発見したので、これを出力側に入れることで解決することができました。(より安いものをAliexpressで探しましたが無かった…)
すぐに元に戻せるように、平端子カプラとDC/DCコンバータ、出力側に還流ダイオードをつけて対応完了。電池の電圧が高い際のモーターの騒音防止にもなりました。
- 電圧をマイコン側で測定しWebに表示する対応
バッテリーに小型のアナログ電圧計を付けていたのですが、何も考えず常に通電した状態で付けていたのと、確認のために外に出なくてはいけないので、電圧を測定する回路を作成し、定期的にESP32のADCで測定した結果をWebに表示する対応をしました。
今回は12Vバッテリー(11v-15Vの範囲)の電圧を測定したいため、分圧抵抗を12.2kΩと2.2kΩに設定しました。(手元にあった10kΩと2.2kΩの金属皮膜抵抗を利用) これは、ESP32に搭載されているADCの減衰が11dBの場合に、精度良く計測できる150~2450mVの範囲に抑えるためです。(想定最大電圧15Vとすると2289mVになります) また、ESP32はノイズに弱いためADCとGNDの間に0.1㎌ のキャパシタを挟めと公式で指示されたので、手持ちの1μFのキャパシタを挟むことにしました。 (回路図はGitHubリポジトリ参照 https://github.com/ayumu-bekki/irrigation_system))
以下プログラムのUpdate()関数内で電圧を計測・算出しています。 https://github.com/ayumu-bekki/irrigation_system/blob/v1.1.2/main/voltage_check_task.cpp
適当な電子工作
このシステムを作った際に、回路の設計ができるのは凄いねと言われましたが、燃えたり爆発しなければOKというポリシーで、適当かつ簡単なものしか作っていません。マイコンはRaspberry Piを少し使っていたくらいで、半分は中学生で習った理科の内容で実現しています。 回路の設計をする際も、最近は電子回路シミュレーター(SPICE)が無料で使うことができるため、試行錯誤が簡単にできます。LTspiceといった高機能なソフトウェアがメジャーですが、私はもっと手軽なWebブラウザで利用できるCircitJS1を利用しています。 https://www.falstad.com/circuit/circuitjs.html 今回の電圧測定の回路もこちらでシミュレーションしてから実装しました。
実際に作った回路ファイル (voltage.circuitjs.txt)
ESP32のような多機能で導入しやすいマイコンを利用することで、いろいろな工作ができます。複雑なことは回路でなくプログラムにやらせることができますし、必要に応じてシリアル通信で制御できるモジュール(温度センサー・距離測定センサー・液晶ディスプレイ・モータドライバー等)を導入すれば良いので、昔に比べて電子工作でやりたいことが実現しやすくなったと思います。