Raspberry Pi 2とArduinoを用いた総合的なプールコントローラキット:リレー基板、温度センサー、アクセサリー付き
コンポーネントと用品
| Raspberry Pi 2 Model B | × | 1 |
| PNY 16GB Turbo MicroSDXC CL10 | × | 1 |
| SparkFun Arduino Pro Mini 328 - 5V/16MHz | × | 1 |
| SainSmart 5V 4チャネル ソリッドステートリレー基板 | × | 1 |
| Tolako 5V Arduino用リレーモジュール | × | 1 |
| DS18B20 防水温度センサー | × | 1 |
| 4.7kΩ 抵抗 1/4W 5% (10本セット) | × | 1 |
| Raspberry Pi用 USB WiFiドングル | × | 1 |
| USB Aオス-メス 延長ケーブル 1フィート | × | 1 |
| American Valve CL40PK6 40番クランプ 6個セット | × | 1 |
| J-B Weld 8272 MarineWeld エポキシ接着剤 2oz | × | 1 |
| シートワッシャー | × | 2 |
| Micro USB電源アダプター | × | 1 |
必要なツールと機器
| Printrbot Simple | 筐体とセンサーマウントの造形に使用 |
| FTDI USB-TTL シリアルアダプター (Arduino Mini Pro用) | Arduino Mini Proへのスケッチ書き込みに使用 |
アプリとオンラインサービス
| Microsoft Windows 10 IoT Core |
| Microsoft Visual Studio 2015 |
| Microsoft IIS |
| Arduino IDE |
| OneWire Library |
| Dallas Temperature Library |
| openHAB オープンソースホームオートメーションソフトウェア |
このプロジェクトについて
自動プールコントローラ
3ヶ月の間にプールポンプのタイマーが2回故障しました。これがこのプロジェクトを始めるきっかけとなりました。タイマーの交換費用は120ドル以上かかりましたが、得られたのは制御機能が乏しく、故障率の高いタイマーだけでした。さらに、ソーラー給湯器の温度センサー故障で30ドルの追加出費もありました。
私は、既存のタイマーよりもはるかに多くの制御が可能で、コストパフォーマンスに優れた自動プールコントローラを自作できると確信しました。単純な時刻と曜日だけでなく、より多くの変数に基づいてポンプを制御したかったのです。また、プールポンプの自動化だけでなく、プール環境のさまざまな状態を監視し、どこからでも任意のデバイスで操作できることを目指しました。
このプロジェクトは、Windows 10 IoT Coreを搭載したRaspberry Pi、リレー、Arduino Mini Pro、温度センサー、配線、3Dプリント部品を活用しており、非常にコスト効率が良いものです。以前の2つのタイマーとソーラー温度センサーの購入費用よりもはるかに安く完成させることができました。
プールポンプ制御 (ACコンポーネント)
まず、Windows 10 IoT Coreを稼働するRaspberry Piからソリッドステートリレーを制御し、プールポンプなどのAC(交流)コンポーネントを操作することから始めました。これらのリレーは、旧タイマーが使用していた既存の30A ACリレーを制御します。プールポンプの回路設計とテストを終えた後、プールの滝、プールライト、庭園ライトなど、他のACコンポーネントの制御機能も追加しました。これにより、これらすべての要素をリモートで制御できるようになりました。家族も私も、コントロールボックスを物理的に開けて滝やライトを点けたり、ポンプのタイマーを設定したりする必要がなくなりました。
プールコントローラ筐体
息子がプールコントローラの筐体を設計し、3Dプリンターで造形しました。Raspberry Piとソリッドステートリレーがコントローラボックス内に確実に固定されるよう工夫されています。
温度センサー
プロジェクトの設計目標の一つは、曜日と時刻以外の変数でも制御できるようにすることでした。外気温、ソーラー給湯器の水温、プール水温を考慮して、ポンプの稼働/停止を判断できるようにしました。例えば、外気温が氷点近くまで下がり、プール水温も凍結に近い場合、プールポンプと滝ポンプを稼働させて配管の凍結と破損を防止する必要があります。このプロジェクトを使えば、外出先からでもこの対応が可能です。これを実現するため、温度センサーを組み込みました。センサーのデータはArduino Mini Proで読み取り、I2Cインターフェースを通じてプールポンプと滝ポンプを制御している同じRaspberry Piに送信されます。
外気温センサー
最初に組み込んだのが外気温センサーです。ここでも息子がセンサーマウントを設計・造形しました。PLAとABSの両方を試しましたが、ABSの方が耐候性に優れ、ガラス転移温度が高いため耐熱性も高く、より適しています。インフィル率は最低75%以上で造形してください。 センサーは回路図に従って接続します。
水温センサー
次にプール水温とソーラーヒーター水温のセンサーを追加しました。これにより、ユーザーへの水温表示と、コンポーネントの稼働/停止判断のためのさらなる変数を得られます。まずセンサーマウントを設計・3Dプリントしました。前述の通り、ABSが耐候性と耐熱性の面で優れています。ここでもインフィル率75%以上で造形してください。
水温センサーの組み立てと設置
水温センサーマウントをプリントした後、センサー穴の周りに45度のカウンターシンク加工を施し、J-B Weldの接着面積を増やしました。3Dプリントの設計変更ではなくドリル加工を選んだのは、ドリルの粗い切削面がJ-B Weldの保持力を高めると判断したためです。
次に、温度センサーをマウントに挿入し、先端がマウント底部から約3/4インチ(約19mm)突出するようにします。シートワッシャーで固定します。
マウントの上部をJ-B Weldで充填し、24時間乾燥させます。
J-B Weldが完全に乾燥したら(最低24時間)、水温センサーを設置します。
重要な注意: 水温センサーを設置する前に、すべてのポンプが停止していることを確認してください!
すべてのウォーターポンプが停止していることを確認したら、設置箇所の水圧を逃がせるバルブを開けておくと、設置が容易になります(濡れる心配もありません)。
プール配管に5/16インチ(約8mm)の穴を開け、水温センサーを取り付け、2つのクランプでしっかり固定します。私がやってしまった失敗ですが、クランプを締めすぎるとセンサーマウントが潰れてしまいます。バルブを閉じ、ポンプを起動し、漏水がないか確認してください。
ソーラーヒーター弁制御
温度センサーの設置が完了したら、ソーラー給湯器の弁制御を設計・設置します。ソーラーヒーターは、これまでのプールコンポーネントで使用していたAC電圧ではなくDC電圧で動作します。そのため、ACリレーではなくDCリレーを制御する必要があります。基本概念は似ていますが、制御対象デバイスの電圧タイプに適したリレーを使用してください。
この制御により、プール水を屋根のソーラーパネルに導くことができます。外気温が60°F(約15.5℃)以上のときのみ水をパネルに導くようにします。水をパネルに導いたら、戻り水がプール水より少なくとも2°F(約1.1℃)以上高温であることを確認してください。そうでなければ、水をパネルに汲み上げるエネルギーが無駄になります。
この制御の配線と接続については、「プールコントローラ DCコンポーネント回路図」を参照してください。
アプリケーション開発
Raspberry PiにWindows 10 IoT Coreをインストールした後、管理用の組み込みWebサーバーがあることに気づきました。これがIISの簡易版であれば、IIS上でRESTfulサービスを書いて呼び出せると考えました。しかし、多くのWeb検索と調査の結果、現時点ではそれが不可能であることがわかりました。望ましいアプローチでしたが、実現できませんでした。
別のアプローチとして、「Blinky Web Server」のサンプルと「Druss Blog」の記事を参考にしました。ヘッドレスなWindows 10 IoT Coreバックグラウンドアプリケーションとして、HTTP GET/POSTリクエストに応答するシンプルなHTTP Webサーバーを構築することにしました。
数日で動作するプロトタイプが完成し、プロジェクトの成功に大きな自信を得ました。Visual Studio 2015のデバッガーでコードを徹底的にテストした後、アプリケーションの展開も容易だろうと考えていました。
アプリケーションの展開
ここで苦労したので、同じ問題に遭わないよう解決方法を共有します。Visual Studio 2015のデバッガーで徹底的にテストしたため、DebugからReleaseモードに変更するだけで展開できると思っていました。実際に展開はされ、Debugモードで起動しました。しかし、デバッグを停止してAppX Managerからアプリケーションを実行しようとすると、「アプリケーションの初期化に失敗しました」という一般的なエラーが発生しました。
解決策は、現在の展開を削除し、AppX Managerからアプリケーションをインストールし直すことです。この問題で多くの時間を費やしたので、皆さんはこの手順で回避してください。
Visual Studio 2015のデバッグモードでは完璧に動作していたのに、最初のHTTPリクエストを受信するとアプリケーションが終了してしまいました。原因究明に多くの時間を費やしましたが、結局わからずじまいでした。
プロジェクト完了のプレッシャーから、「Blinky Web Server」サンプルと同じ構成に変更することにしました。当初、WebサーバーでGPIOピンを制御しI2Cインターフェースを読み取る予定だったため、Windows 10 IoT Coreの画面アプリケーションは不要と判断していました。しかし、画面アプリケーションでWebサーバーを起動し、Webサーバーから画面アプリケーションにメッセージを送り返してHTTPコールの内容を表示する方式に変更したところ、非常に安定して動作しました。コードは最初の試みと全く同じです。
ユーザーインターフェース
最後に、ほぼあらゆるデバイスで動作するHTMLコントロールプログラムを作成しました。これにより、プールポンプ、滝、プールライトの制御だけでなく、追加センサーの監視もどこからでも可能になりました。
その後、openHABを活用してサイトマップを作成し、さらなるインターフェースを実現しました。
このプロジェクトを読んで楽しんでいただけたなら幸いです。作成する側としても非常に楽しいプロジェクトでした。ありがとうございました。
製造プロセス
- Raspberry PiとDS18B20によるプロフェッショナルな温度監視
- Raspberry Pi 2とADS-WS1で屋外気象観測ステーションを構築
- Raspberry Piでサーバークローゼットの温度を正確に監視
- SensorflareとRaspberry Piで433MHzスマートホームコントローラーを構築
- OpenCVでRaspberry Pi上級卓球球追跡
- LIRCでプロフェッショナルなRaspberry Piユニバーサルリモコンを構築
- Raspberry PiでPIRモーションセンサーとLEDを制御
- Raspberry PiでRFをDCに変換: エンベロープ検波器の構築とトラブルシューティング
- Cycle Chaser: Raspberry Piで自転車をナイトタイムライトショーに変身
- Raspberry Piで低コスト土壌水分センサーを構築 - スマート灌漑に活用
- Raspberry Piベースの泥棒検知器を構築 - ステップバイステップガイド