A接点のないインターホンを、CdSセルとESP32で無理やりIoT化する

必要なのはどのご家庭にあるESP32マイコンとCdSセルだけです。

A接点のないインターホンを、CdSセルとESP32で無理やりIoT化する

先日、インターホンの音を聞き落とすという大惨事を起こし、物流の2024年問題の発端を担いかけた。
スマホ、ないしスマートウォッチに通知が来てくれれば、そんな失態を起こすリスクは減る。
しかしインターホン自体にそのような機能はない​ため、自分で用意するしか無い。

インターホンとマイコンをつなげる。

インターホンが鳴ったことを取得できれば、その情報をマイコンで監視して、インターネットにトラフィックをぶん投げ、LINEやSlack、Discordで通知可能になる。

この方法の代表例として、インターホンのA接点を用いた記事が多数存在する。
A接点は、チャイムがなったときに短絡する仕組みで、その回路とマイコンの汎用I/O(GPIO)をつなぐことで、簡単にインターホンが鳴ったことを検知できる。

うちのインターホンにはA接点がない

賃貸である我が家には備え付けのインターホンがある。
このインターホンの型番から取扱説明書を探し出し、書かれた回路構成を見てみたが、どうやらうちのインターホンにはA接点がないらしい。

つまりA接点以外の方法で、インターホンが鳴ったことを検知する必要がある。
といっても、普通のインターホンは相手の顔が見えたり、音が鳴るので、それを検知すればよいという至極単純な解決策が可能である。

比較してみると

    • ピンポンの音で判別、家で熱唱したら誤動作しそう
    • 特定の周波数を検知対象にすれば誤動作防げそうだが、プログラムが面倒
    • マイクロフォンが必要→秋月で1個50円〜
    • インターホンの画面の光量変化で判定、昼と夜、部屋の照明の状態で変わりそう
    • 光量だけの判断で実現できれば簡単にプログラム作れる
    • 光センサが必要→CdSセルなら秋月で1個30円〜

この比較より、より簡単で安価な「光」の検知で、インターホンが鳴っているかを判断することにした。

CdSセル

CdSセルは光量で抵抗が変わる素子である。
ちなみにCdSセルのCdSは硫化カドミウムの組成式らしい。
高校化学の知識は遠の昔に忘却の彼方へ押しやられていて気づかなかった。

1つ30円
CdSセル 5mmタイプ: オプトエレクトロニクス 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作CdSセル 5mmタイプ秋月電子通商 電子部品通信販売

このちっこいやつがCdSセルである。
こいつとマイコンをつないで、 抵抗の変化を観測できれば勝ちである。

Arduinoを始めとしたマイコンには、アナログ入出力用のGPIOピンがあり、ここで電圧の変化を計測可能である。

抵抗の変化を電圧の変化にするには、高校物理の分圧の法則が役立つらしい。

E=V1+V2みたいなやつ。
CdSセルは受ける光量で抵抗が変化し、このとき回路の電圧も変化する。
この変化をマイコンで取得すればよいらしい。

こんな感じの回路を組めば実現できる。

ESP32C3

マイコンにはESP32C3を用意した。
ESP32C3自体をはんだ付けするのは大変なため、マイコンボードとしてSeeed Studio社の「Seeed Studio XIAO ESP32C3」を使用する。

Seeed Studio XIAO ESP32C3: 開発ツール・ボード 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作Seeed Studio XIAO ESP32C3秋月電子通商 電子部品通信販売

マイコンは何でも良いのだが、ESP32C3は技適の通ったWi-Fi通信モジュールを内蔵しており、「Seeed Studio XIAO ESP32C3」は1000円ほどで購入できるので入手性が高い。
冷静に考えると人類の存在価値すら危ぶまれる価格設定である。

また、どうでも良いがESP32C3のISAはRISC-Vであり、大変に将来が楽しみである。

このマイコンと、CdSセル、10KΩ抵抗、ブレッドボードを組み合わせて回路を作成した。

単純でありながら、これでインターホン監視装置の完成である。

光を検知する部分のみのプログラムを掲載すると、

 lightValue = analogRead(A0);
  if (lightValue <= 3000)
  {
    if (!isInterPhoneRunning)
    {
      isInterPhoneRunning = true;
      discordMessage("🔔自宅のインターホンがなりました");
    }
  }
  else
  {
    isInterPhoneRunning = false;
  }

この単純さである。
我が家の環境ではアナログ入力で取得された値が3000以下のとき、インターホンが鳴っている明るさであることが分かった。
この3000という値はインターホンを押しまくって地道に検証し導き出した値である。

動作確認

ブレッドボードをインターホンにマスキングテープで取り付ける。

軽くて小さいマイコンなので、マステ1つで固定できた。

試しにインターホンを鳴らしてみる。

無事Discordに通知が飛び、スマホ経由でスマートウォッチにも通知された。
インターホン駆動から通知までのレイテンシは1秒程度であり、実用に耐えうるものが完成した。

これで地球の反対側にいたとしても、自宅のインターホンが鳴ったことが確認できる。
鳴ったことを確認できるだけであり、誰が来たかまでは閲覧できない致命的な欠点を抱えているが……