Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】DIY Holding Tank Sensors Part 1: Or "Mommy, the AI made me code in C"

2025年10月01日に「Dev.to」が公開したITニュース「DIY Holding Tank Sensors Part 1: Or "Mommy, the AI made me code in C"」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

RV排水タンクの信頼できない水位センサーを、AIとESP32、非接触センサーでDIY改善。AIがC言語コードを生成したが、多くの修正やデバッグを経て、Bluetoothでスマホにタンク水位を送信できるシステムを構築した。

ITニュース解説

キャンピングカー(RV)の廃水タンクの液面センサーは、多くのRVユーザーが長年抱えてきた問題の一つだ。この記事では、この具体的な問題を解決するためのDIYプロジェクトが紹介されている。このプロジェクトは、最新のAI技術とマイクロコントローラーを組み合わせることで、専門知識がなくても複雑なシステムを構築できる可能性を示している。

まず、RVの廃水タンクセンサーが抱える長年の問題について説明しよう。多くのRVには、生活排水を貯めるグレータンクと、トイレの汚水を貯めるブラックタンクがある。これらのタンクの液面レベルを測る従来のセンサーは、非常に信頼性が低いことで知られている。一般的に使われているのは、タンクの側面に設置された複数の金属プローブで、液体がプローブに触れることで導通し、液面レベルが1/3、2/3、満タンといった段階で表示される仕組みだ。しかし、この方式には大きな欠点がある。タンク内部には、排水に含まれる微生物や有機物によって「バイオフィルム」と呼ばれるヌルヌルとした膜が形成されやすい。また、トイレットペーパーなどがプローブ間に挟まることもあり、これらが導電性を持つため、実際よりも高い液面レベルを誤って表示してしまうのだ。筆者もこの問題に長年悩まされ、センサーを交換してもすぐに誤作動を起こすため、最終的には経験と勘でタンクの排出時期を決めていたという。これは、オーバーフローのリスクや不快な状況を招く可能性があり、RVユーザーにとって大きなストレスだった。

そこで筆者は、この問題を解決するために、費用を抑えつつ信頼性の高いDIYシステムを開発することを決意した。市販の高度なシステムは高価な上に、古いユーザーインターフェースしか持たず、Bluetooth対応モデルも精度に問題があるという。筆者が目指したのは、自分で仕組みを完全に理解し、故障しても自分で修理や部品交換ができるような、開かれたシステムだ。 このDIYプロジェクトの肝となるのは、「非接触型液面センサー」の採用だ。従来の金属プローブとは異なり、このセンサーはタンクの外部から液体を検知するため、タンク内部の汚染物質に触れることがない。そのため、バイオフィルムや固形物による誤作動の心配がなく、高い信頼性が期待できる。センサーは、液体の接近によって回路の「静電容量」が変化するのを検知する仕組みで、非常に安価で手軽に入手可能だ。これをESP32という高性能なマイクロコントローラーに接続し、センサーのON/OFF信号を読み取る。そして、ESP32からBluetoothを通じて、液面データをスマートフォンのコンパニオンアプリに送信するという構想だった。

しかし、筆者はC言語の専門家ではなかった。マイクロコントローラーのプログラミングにはC言語の知識が不可欠だが、近年登場したAI、特に大規模言語モデル(LLM)の進化は目覚ましい。「vibe coding」と呼ばれる感覚的なコーディングスタイルで、AIに複雑な指示を与え、コードを生成させることに挑戦した。筆者はClaude ProというAIサービスを利用し、RVの廃水タンクセンサーシステムを構築するためのC言語コードの生成を依頼した。 AIによる開発は、決してスムーズな道のりではなかった。AIが最初に生成したプロジェクト構造は、そのままではコンパイルできない状態だった。開発環境であるVS Codeでは、大量の赤い波線が表示され、コードが正しく構成されていないことを示していた。AIとの対話を繰り返しながら、必要なファイルや設定を調整し、プロジェクトがコンパイルできるように修正していった。この過程では、AIが提供するコードが、必要なヘッダファイルを欠いていたり、関数名に重複があったりするなど、人間がプログラミングする際に起こりうるミスと同様の問題も発生した。筆者は根気強くAIに質問し、修正を指示することで、一つ一つの問題を解決していったのだ。 特に難航したのは、Bluetooth通信の実装だ。AIは当初、センサーの値をBluetoothの内部データベースに保存する方式を提案したが、これではデータがリアルタイムに更新されず、エラーが発生した。筆者がAIに問題を指摘すると、AIはセンサーの値を直接コールバック関数を通じて送信する方式に変更し、これによりシステムは正常に動作するようになった。この経験は、AIが生成したコードも常に完璧とは限らず、人間がその動作を検証し、必要に応じて修正を指示する重要性を示している。

システムの基本的な動作が確立された後、筆者はさらに機能の追加と改善を行った。まず、セキュリティ面では、当初はPINコードを導入する予定だったが、単に液面レベルを読み取るだけであれば不要と判断した。しかし、システムの「設定変更」に関してはPINコードが必要と考え、AIと協力してPINコードによる認証機能を実装した。これにより、タンクセンサーの有効/無効設定やPINコード自体のリセットには認証が必要となる。 次に、データ表示の精度と信頼性を高めるため、単に1/3、2/3、満タンといった段階表示だけでなく、「生のセンサーデータ」もスマートフォンアプリに送信するように変更した。これにより、例えば「満タン」センサーが反応しているのに「2/3」センサーが反応しないといった異常な状態を検知できるようになり、センサー自体の故障や不具合を早期に発見できるようになった。物理法則上、水は下から溜まっていくため、上のセンサーが反応していれば、下のセンサーも反応しているはずだという原理を利用した賢い改善だ。 さらに、PINコードをリセットする際に、別のボタンを追加することなく、ESP32開発ボードに元々備わっている「BOOT」スイッチを10秒間長押しすることでリセットできるようにした。これは、利便性と部品点数の削減を両立させる素晴らしいアイデアだ。 最終的に、AIがBluetoothの実装に「Bluedroid」というスタックを選択したが、より軽量な「NimBLE」という選択肢もあった。しかし、生成されたコードは問題なくコンパイルされ、ESP32のメモリにも収まり、期待通りに動作したため、筆者はこれを受け入れた。また、メモリ管理についても、変数が長期的なメモリリークの原因となりにくい「スタック」領域に配置されていることを確認し、長期間安心して運用できるシステムが完成した。

このプロジェクトの成功は、筆者に大きな喜びをもたらした。非接触センサーで正確にタンクの液面レベルを検知し、Bluetooth経由でスマートフォンにデータを送信する、プロフェッショナルなレベルのDIYシステムが完成したのだ。たとえ専用のスマートフォンアプリがまだなくても、汎用のBluetoothツールを使って生のデータを確認し、液面レベルを把握できる。この完全に透明で、自分でメンテナンス可能なシステムは、RV生活の質を劇的に向上させ、廃水レベルの不安から解放された筆者は、まるで人間性を取り戻したかのような感覚を覚えたという。この成功は、AIが個人の創造性と問題解決能力を大きく拡張できる可能性を示している。

関連コンテンツ

関連IT用語

関連ITニュース