『Doorbell using nRF24L01+』を自作してみるページ。
回路とスケッチについては後述しますが、より具体的に言うとArduino Nano互換機 5V 16MHzとnRF24L01+無線・トランシーバモジュールを各2個、パッシブブザー他を使いました。
が...、日本では、2.4GHzは無線LANで使われる周波数帯ですが、この機器に対しては、個別に技適を取る必要がある模様、輸入品や、まして個人での取得は、まず、無理らしい...無線LANで使ってるんだから良さそうなもんですが、グレーっぽいので要注意...。
よくわからないまま、単価100円程度になるならと10個セット買っちゃったけど...使える国に移住するか、いつか日本でも堂々と使えるようになるのを期待するか、造りを眺めて勉強するか、飾るか、ゴミか...何れにしても、ここまで知る前に、うっかり、やってみちゃったことだけは書いておきます。
結果から言うと無線LAN同様、壁や家具など障害をものともせず、他の部屋、キッチン、風呂場など数m余裕で通信可能でした。
回路・スケッチについては、後述しますが、送信側のシリアルモニタ上で応答を確認、受信側のnRF24L01+が応答した時に受信側回路上のパッシブブザーがドレミの音階を再生する動画がこれです。
送信側電源は、PCのUSBポート、受信側電源は、モバイルバッテリー、送信・受信側共にArduinoボードは、Nano互換機としました。
送信、受信の回路概略とスケッチは、以下の通り。
回路は、受信側のArduinoボードのD5/GNDをそれぞれパッシブブザーのプラス/マイナスに接続する以外、送信側も受信側も全く同じ(nRF24L01+トランシーバだけの動作確認参照)。
スケッチも共用で動作確認でも使わせて頂いたRF24ライブラリの送受信兼用サンプルスケッチである(デフォルトで受信、送信時には、シリアルモニタで[T]を、受信は[R]を入力の)GettingStartedとパッシブブザーのサンプルとして毎度使わせて頂いている圧電スピーカをつないで音を鳴らすのスケッチを組み合わせたもの。
尤も、これだけだと433MHz RFモジュールと違って単体でもブザーを付けても少なくとも数m範囲で送受信できることがわかったに過ぎず、課題がいくつかあります。
ちなみに有線モジュールだと用途が、かなり限定されるし、ZigBee/XBeeやESP8266でもESP-WROOM-02/ESP-WROOM-32は、日本の販売店から買う場合は、基本、技適済みのはずですが、比較的高価な上、WiFiモジュールだと無線ルータやアクセスポイントの接続数制限に影響があると思われ、そうだとするとドアベルやリモコン用途に使うのは、現実的ではない、Bluetoothも既に安いとも言い難いHC-05(/HC-06)も技適が必要となると仮に技適済みになったとしても、より高価になるであろうことを考えると尚更、コスパが見合わず、取り組む気にもなれない。
通信できない、インターネットにつなげない、つなげるけど構成パーツの一部がコスト高でトータルすると数千円なんてことになると、ほとんどのモノは、現実的ではなくなる...から通信はしない・できない...となると機能が制約され、単なる電子工作止まりで、IoTとは呼べず、せっかくの関心、興味が削がれ、経済格差が教育格差を生んでいるなんていわれる時代に小学生からコンピュータ教育なんて謳っといて早いうちに誰でも手に入るくらい安価にしておかないと、この分野でも教育格差が広がっちゃうし、結果、思ったほど普及せず、巷にあるのは家電メーカーなどの商品のみとかいう状況だとしたら...気づいた時には、日本は、IoT超後進国になっている...なんてことも想像に難しくないんだが...なんとかならんかね?
ふと、Arduino and NRF24L01を参考にさせて頂き、ちょっと変更したら、一方のArduino+nRF24L01回路上のタクトボタン押下で他方のArduino+nRF24L01回路上の圧電スピーカーを鳴らすことができたのでドアベル試作機完成。
尚、Reducing Arduino Power Consumptionによれば、かなり省電力化を図ることができる為、rocketscream/Low-Powerも使用させて頂くことにしました。
送信側(ボタン付き回路)のラフスケッチはこれ。
確実性を期すためには、やや長押しする必要がありますが、よしとしました。
受信側(圧電ブザー付き回路)のラフスケッチはこれ。
曲名を失念、合っているかわかりませんが、浮かんできたメロディを奏でるようにしてみました。
音の確認には、Linux用ソフトウェアシンセサイザYoshimiを使わせて頂きました。
ちなみに、なぜか、電源投入時、1回メロディを再生してしまいますが、よしとしました。
一応、送信側を電池(100均のモバイルバッテリ/単3x2本)とし、待機・仮使用可能時間/日数を計測中...と思いましたが、1時間ももたないし...スケッチ間違えたか?それとも3V => 5V昇圧 => Arduino 5V => 3.3V => nRF24L01+じゃダメか...。
あ、LowPower.powerDown()関数で第1引数を[SLEEP_FOREVER]にしたために、外部割り込みできなかったらしい...とりあえず、[SLEEP_8S]にして継続確認中。
[2018/06/21] [SLEEP_8S]にしてみたら、この回路でも短時間で電池を消耗することはなくなり、改めて検証中...。
ただ、原因不明、タイミングは不定ながら送受信共にArduinoボードをリセットしないと機能しないことがあったので、このままだと何らかの方法でリセットの実装が必要かも。
ん?初ウォッチドッグタイマだけど、これだとスイッチ押下時、常に有効なトリガにはならないから、任意のタイミングでリセットが...送受信ともウォッチドッグタイマかけると一方が起動してても他方は...っていうタイミングもあるよね?そしたら、そのタイミングだと機能しないか...ましてArduinoボードの内蔵時計...、仮に一方だけにしても、そういうことがあるとしたら、8秒じゃ長いっていうか、2秒でもその可能性はある上、8秒より電力抑制効果も薄れるとしたら、ウォッチドッグタイマ以外の方法の方がよいか...。
[2018/06/22] が、10時間くらいしかもたない...。
[2018/06/23] 10時頃、入力を単3x4(実際は6V弱)に変更、Arduino NanoのVin/GNDに接続...検証中...。
[2018/07/01] 22時時点で約208時間作動中...(引数を[SLEEP_8S]、入力を単3x4(実際は6V弱)、Arduino NanoのVin/GNDに接続、Nanoの3.3V => nRF24L01+で検証中)。
[2018/07/06] 朝、NanoのLEDが消灯しているのを発見、電池電圧約2V、昨夜は点いていた為、少なめに見積もって昨夜22時時点までとして約316時間、約13日と4時間作動...、ドアベルでよく使われるらしき12V 23A電池も買ってみましたが、単純計算で倍もつとしても1ヶ月弱...、それでも短いので再検討予定。
ところで、これに限らず、2.4GHz帯を使うWifiモジュールの存在を知った時、無線LANルータのある環境でないと使えないのかと思いましたが、そうではないとわかり、より魅力を感じますが、このnRF24L01+、技適対応済みでないところが、つくづく痛い...。
仕方ないから半ば渋々、技適済みのESP-WROOM-32/ESP-32を買った(Aliexpressで互換開発ボードを8ドル弱で買ったため国内の約半額と安価でしたが、nRF24L01+と比べると約8〜10倍、国内価格なら15倍〜18倍...)。
というか、ESP-32は、Wifi、Bluetooth/BLEが使える上、タッチセンサやホールセンサ搭載、Arduinoボード風にも使え、メモリも比較的大容量などハイスペック過ぎ、これが8ドル程度なのは、驚愕の安さなわけですが、これはこれとして、Bluetooth、なんならBLEだけでも、もしくは、技適対応済みnRF24L01+などのWifiモジュールとか、WifiかBluetoothかBLEに機能を絞った国内で安心して使えるコスパの良いモジュール希望。
そもそもArduinoなしでESP8266を2つ使ったWiFi玄関チャイム・呼び出しベルができました。