Arduinoを使って『玄関チャイム・ドアベル・呼び出しベル・呼び鈴』を自作してみるページ。
これがあると例えば、キッチンで「ご飯できたよ」の合図として(非金属で覆った)スイッチをタッチすると他の階や廊下でメロディが鳴るとか、玄関ばかりでなく、部屋のドアベルにもできたりもするでしょう。
このところ、暇さえあれば、Arduinoで、できれば、増えてきた手持ちのセンサーやモジュール、電子部品類で何か作れないか...と考えています。
そんな折、ふむふむと思ったのが、Arduinoで静電容量インターホンとリンク先で参照していた建築発明工作ゼミ2008 Arduino タッチセンサ。
37センサーキットに入っていて使い道がなかなか思いつかなかったものの1つにパッシブブザーやアクティブブザーがありました。
他方、タッチセンサは、電子パーツ購入時、度々見かけていたし、金属なら銅箔テープやアルミホイルでさえタッチセンサになり得るのも知ってはいましたが、どうも興味をそそらず、一方、Arduinoでインターホンというのも脳裏をよぎらなかったわけではありませんが、必要性を感じずじまいだったのですが、なぜか、今回は興味が湧きました。
音は、「ブー」とか、「ウィーン」とかでなく何らかのメロディを奏でたいと思い、参考にさせて頂いたのが、tone関数によるドレミを例示してくれていた圧電スピーカをつないで音を鳴らす。
その圧電ブザーがどちらを指すのか復習のため、アクティブブザーとパッシブブザーの動作確認を自己参照、tone関数を使えていることからパッシブブザーである模様。
メロディは、なぜか、あっさり、すんなり音階を口ずさむことが出来た曲『きらきら星』の一節とし、BEAT値を変更、小節区切りでdelay(BEAT)を1つ追加、鳥よけを作るでも使ったスリープ機能を取り入れ、attachInterrupt関数など割り込みに利用できるデジタルピンD2、D3を使うにあたり、ピン配置を変更してみたスケッチがコレ。
回路は、圧電センサ(パッシブブザー)モジュールのS、+(中央ピン)、-(マイナス)にD12、5V(or 3.3V)、GND、金属片からワニグチクリップなどを介して信号入力用に(スリープに対し、Unoで外部割り込みに使えるD2/D3の内)D3、また、出力用に1MΩの抵抗〜D8につなぎます。
この状態で金属部に手を触れると『きらきら星』が流れるのですが、この仕組みは、なかなか興味深い。
参照先にもありますが、タッチセンサについては、相応に抵抗値を大きくすれば、金属類に直接触れなくとも、絶縁体である紙や木、ガラスなどを介してもタッチに反応するので透明プレートのみならず、センサー自体を隠すことも可能。
ここでは、タッチセンサになり得る手持ちの金属ということで、手近にあって100均で買ったと思しきL字ステーを使ってみました。
今回の検証では、抵抗に1/4W カーボンの1MΩを使いましたが、それでも紙ペラ1枚ならこれを介しても反応しました。
また、Arduinoボードには、Unoを使いましたが、当然、NanoやPro Miniなどでも可であり、自身もそうするつもりです。
電源については、今回、ACコンセント接続のUSB充電器からとりましたが、モバイルバッテリからとることもできるでしょう。
ただ、この時点では、1台のArduinoボードで完結しており、表題の機能までには至っておらず、まだ、未完で続きがあります。
さて、表題の通り機能させるためには、これらの他、距離を考えれば、有線ではなく無線、無線なら10m程度までのエリアをカバーできるといわれているBluetoothか、無線LANならArduino YUN、Arduino UnoとWeMos D1シールド(開発ボード)やESP8266などのWifiモジュールとWifi環境が必要になるでしょう。
接続数などを考慮するとドアベルには、Bluetoothが妥当と言えるでしょうが、後述のESP-32はBluetoothだけでなく無線LANも対応しているため、オーバースペックと言えるでしょう。
一方、Bluetoothモジュールやその他無線の選択肢はそう多くなさ気、更に日本で使う場合、技適済みであるものと考えるといまのところ、相当限定される模様であるため、ここは敢えて無線LANでの実装を考えてみることにします。
無線LANを使う場合、Arduino YUNは無線LANばかりでなく、OSとしてLinuxもインストールされており、ここではオーバスペック、シールドや開発ボードだとArduinoボードを選ぶ、より柔軟に対応でき、価格面から言っても、より安価なESP8266などのWifiモジュールを使うのが無難でしょう。
更に同一ネットワーク上で通信可能な送信側と受信側の2組の構成が必要となるので、一方をWiFiモジュールで無線、他方を有線とするなら、有線側には、Arduino Ethernetか、Unoなどにイーサネットシールド(この場合、ArduinoボードとしてPro Miniは使いづらいかも)など、共に無線ならWiFiモジュールが2つ必要ということになります。
尚、ESP8266には、多くの種類がありますが、日本の技適を通っているもの(技術基準適合証明等を受けた機器)としては、このチップをも搭載したESP-WROOM-02やESP-WROOM-32といったものがあり、これらは、ユニバーサル基板やブレッドボードで使おうと思うとピッチが異なるため、ピッチ変換基板(ブレイクアウトボード)付きを買うか、別途これを用意する必要があります。
もし、ESP-WROOM-02を選択する場合、ピッチ変換基板(ブレイクアウトボード)付きには、シンプル版とフル版があるようですが、実装品の機能との兼ね合いにはなるものの、配線だけを考えると、これが容易なシンプル版を買う方がベターかもしれません。
ちなみに、ここでは、既に買ってしまって持っている、これはあくまで一時的な検証であるということでESP8266の内、ESP-01互換っぽいボードを使おうと思います。
ESP8266はマイコンを内蔵しており、自作簡易回路を使えば、Arduino IDEからスケッチを書き込み、機能させることもできるのですが、ここでは、Arduinoボードからシリアル通信によってESP8266の無線通信機能のみを利用します。
Arduinoボードでは、D0/D1(RX/TX)を使ったハードウェアシリアル通信と2つの任意のデジタルピンを割り当てられるソフトウェアシリアル通信を利用できます。
違いとしては、前者は、高速で通信可能なためESP8266でデフォルトの通信速度115200で通信できますが、利用可能なデジタルピンは固定、USB接続によるスケッチのアップロードにもハードウェアシリアル通信を利用、共有しており、共用する場合、スケッチのアップロードをする際には、ピンを抜く必要があるため、開発・デバッグ中は面倒で不便、後者には、この不便さはなく、任意のデジタルピンを利用できる柔軟性がありますが、体感的には許容範囲と思われるも安定して通信できる速度が最大で9600と若干遅いこと、最初に一度だけですが、ESP8266側の通信速度設定を変更する必要があります。
何れにしてもライブラリSoftwareSerial.hをインクルード、SoftwareSerial mySSC(SSC_RX, SSC_TX)などとしてインスタンスを生成、mySSC.begin(9600)として通信速度を設定すれば、あとは、インスタンスで利用可能なメソッドやオブジェクトを使うだけとスケッチを書く上では、簡単に利用できるようになっています。
というわけでESP8266で...
と思ったら、手持ちのESP-01らしき互換ボードの1つが壊れ、代替として買った同品も微妙に壊れた模様、追加で買ってあるESP-12Fもあるのですが、ブレイクアウトボードがなく、使えないため、準備が整い次第やってみることとし、ここでは、次のような苦肉の策を取ることにします。
つまり、サーバにHTTPアクセスした上で金属片にタッチするとメロディが1度だけ流れ、以後、触れなければスリープ、再度触れればメロディが...となります。
そのスケッチがコレ。
Webサーバ機能については、Arduino IDEのサンプルスケッチ『Ethernet => WebServer』を流用。
曲が同じでは芸がないので、このスケッチでは、メロディを『ウェストミンスターの鐘』(日本の学校でよくチャイムに使われる曲)にしてみました。
回路は、圧電センサ(パッシブブザー)モジュールのS、+(中央ピン)、-(マイナス)にD12、5V、GND、金属片からワニグチクリップなどを介して信号入力用に(スリープに対し、Unoで外部割り込みに使えるD2/D3の内)D3、出力用に1MΩの抵抗〜D5につなぐだけ。
本来は、クライアント側で検知した金属片へのタッチを示す信号を受け取るところだが...とか、あんなにうるさいくらい大きな音が、なぜか、耳に当てないと聴こえないほど小さくなりました、また、ブラウザでアクセスするまでの間、なぜか、雑音が入る...とか、delayの値設定の問題か、シリアルモニタ上の表示が微妙...といったことは、さておき、回路の使用・確認方法は次の通り。
1) PCにArduinoボードをUSB接続、先のスケッチを書き込み、配線をし、シリアルモニタとブラウザを開くとシリアルモニタに[server is at ...]とスケッチで指定のIPアドレスが表示されます。
2) そのIPアドレスをブラウザのURLアドレス欄に入力して確定(キーボードの[Enter]押下など)。
3) シリアルモニタに[new client]と表示されます。
4) 回路上の金属片に触れる。
5) シリアルモニタに[sleep down!]、[wake up!]と共に[playing the melody ...]と表示され、メロディが流れ、終わると[sleep down!]と表示され、スリープモードに入り、スイッチとしている金属に触れるとメロディが...といった流れになります。
尚、Arduino Unoとイーサネットシールド間のリセットにおけるバグについて考慮が必要となる場合もあるので留意のこと。
そもそもArduinoなしでESP8266を2つ使ったWiFi玄関チャイム・呼び出しベルができました。