前回の記録ではSiriに喋りかけることでArduinoに取り付けられたLEDを制御した. 今回はArduinoに赤外線LEDと受光素子を取り付け,学習リモコンとして利用することで,Siriによるリモコン操作を実現する. 例えば送風機やTV,照明器具などなど...赤外線リモコンで操作できる家電をSiriでも操作できるようにする.
目指すところ
今回は部屋についたペンダントライト(照明器具)をSiriで操作できるようにする. 部屋にある照明器具はそのままでは赤外線操作に対応していないので,Panasonicが販売しているスイッチ(通称ほたるスイッチ)を購入した(右図). これは壁に取り付けられるプッシュスイッチだが,下のスイッチのみ赤外線リモコンでOn/Offの切り替えが出来るという代物. このスイッチに対応したリモコンの赤外線信号をArduinoに覚えさせ,Siriのコマンドに応じて照明器具をOn/Offできるようする.
用意するもの (用意したもの)
- Arduino UNO R3
- Ethernetシールド
- USBケーブル(A-B)
- ブレッドボード
- ジャンパワイヤ(導線)
- あればプッシュボタン
- 受光素子: TSOP38238
- 赤外線(IR)LED: YSL-R531FR1C-F1
- 上で説明したほたるスイッチと対応リモコン
ハードウェア
配線は上図を参照(Ethernetシールドの上から配線して問題ない). 私はブレッドボードで動作を確認した後,基盤へはんだ付けをして,Arduinoシールドを自作した(詳細は後述). シールドの自作は日常使いに対応した気分になるのでおすすめ. 下の写真は配線済みのもの. 私はLEDを2個並列につなげてみた. 1個でも十分なのだが,LEDの指向性を更に広げるため,2個のLEDをハの字状に配置する魂胆(注:写真はハの字状に向ける前に撮ったもの).
ライブラリの準備
z3t0/Arduino-IRremote | GitHub.com
Arduinoで赤外線通信を実現するためのライブラリである"Arduino-IRremote"がGitHubにて公開されているので,上記リンクよりダウンロード. GitHubをよく知らない方は緑色の"Clone or downloads"ボタンをクリックして"Download ZIP"するとよい.
ZIPでダウンロード出来たら早速展開. 出てきたフォルダを"IRremote"へ名称変更しておくと良い. そのフォルダをArduinoのプロジェクトフォルダ内にある"libraries"フォルダ内へ移動(上図参照). 続いてライブラリ間の競合を避けるため,ArduinoアプリをFinderで表示したら右クリックで"Show Package Contents(パッケージの内容を表示)"を選択し,"Contents > Java > libraries"内にある"RobotIRremote"フォルダを削除する(同じく上図参照). Windowsの場合は"C:\Program Files (x86)\Arduino\libraries"フォルダ内の同フォルダを削除でOK. これでArduinoを学習リモコンにするための準備が整った.
Homebridgeの設定変更
前回の記録で,homebridge-httpを次のように設定した.
- "on_url": "http://192.168.11.5?9=ON"
- "off_url": "http://192.168.11.5?9=OFF"
- "on_url": "http://192.168.11.5?Light=ON"
- "off_url": "http://192.168.11.5?Light=OFF"
この設定変更を行わず,後で紹介するHomeBridgeIRControllerスケッチの次の部分(76行目)を編集するだけでも,もちろん良い.
まずはSSHでRPiへ接続.
Ethernet.ino
if (getKey == "Light")
↓
if (getKey == "9")
この変更を行えば,RPiの設定をいじくる必要はまったく無い. ただ,後でこのスケッチを見返したときに,"なんで9なんだっけ?"とならないようにHomebridgeの設定を変更したいというだけの話.
ssh ユーザー名@ホスト名.local
おそらくHomebridgeをデーモン化してあると思うので次の場所にある設定ファイルを開く.
nano /var/homebridge/config.json
設定ファイル中の次の箇所を変更する("9"を"Light"へ変更).
config.json
...
"on_url": "http://192.168.11.5?9=ON",
"off_url": "http://192.168.11.5?9=OFF"
...
↓ 次のように編集
...
"on_url": "http://192.168.11.5?Light=ON",
"off_url": "http://192.168.11.5?Light=OFF"
...
Ctrl+Xを押したらyを押し,Enterで保存. 次のコマンドでHomebridgeサーバーを再起動する.
sudo systemctl restart homebridge
パスワードを入力してEnterで再起動. 以上で設定変更完了. SSHをlogoutして良い.
赤外線コードの受信 - 学習
ArduinoをPCにUSB接続して,Arduinoアプリケーションを開き,メニューバーの"Tools > Board"と"Tools > Port"がそれぞれ"Arduino/Genuino UNO"と"Arduinoの接続されたUSBポート"になっていることを確認したら,次のスケッチをArduinoへアップロード.
IRreceiver.ino | GitHub.com
何らかの都合によりコンパイルエラーになっても,何度か試すうちに(Arduinoのリセットボタンを押したりUSBケーブルをつなぎ直したりすると)うまくアップロードできる場合があるので,めげずに試そう. 正常にアップロード出来たら"Tools > Serial Monitor (Shift+Cmd+M)"を選択しシリアルモニターを開く. さあ,リモコンを受光素子へ向け,ボタンを押してみよう. 私はスイッチをON(点灯)にするボタンを押した. するとシリアルモニターにコードが表示されるはず. これが今リモコンから送信されたIR信号である. Arduinoに取り付けられたプッシュボタンを押すと,直前に受信したIR信号をLEDから送信してくれる. これで動作確認を行える.
この調子で,続けてリモコンの消灯ボタンも取得してみよう. この2つのコード(点灯と消灯)はそれぞれ分かるようにテキストエディタやメモ帳なりにコピペしておこう.
On信号 {3350, 1800, 400, 450, ... , 350};
Off信号 {3350, 1800, 350, 550, ... , 350};
[補足] IR信号について
上で表示されるコードは受光素子が受け取ったIR信号を数値にしたものなので,多少の誤差が生じる. 同じIR信号を受信しても,環境光や反射の関係か,微妙に値が変わる場合があるのだ. しかし,赤外線リモコン機器はそういった誤差も許容できるように作ってあるため,特に問題はない(±100くらいのバラ付きは出る). また,特にエアコンのリモコンに多いが,電源のONとOFFが同じボタンであっても,ON時とOFF時に違う信号を出力するリモコンがある. ボタンがひとつでも内部で複数の信号を切替えて出力している機種があるため注意が必要.赤外線コードの送信 - 再現
HomeBridgeIRController | GitHub.com
上記リンクからIR信号送信用のスケッチを入手. 入手したら次の項目を編集する.
試しに,"Hey Siri, Lights On."と喋ってみると,ほたるスイッチがOnになり照明器具が点灯した! もちろんHomeアプリからの操作もできる. シーンを設定しておけば"Good night."とSiriに言うだけで電気を消してくれるし,"Good morning."で電気をつけてくれる. 素晴らしい! HomeアプリでLightアクセサリをプレスすると上右図のようになる. "Details"をタップしてから,各アクセサリのアイコンをタップすることで,お好みのアイコンへと変更することができるので試してみよう. もちろん私はペンダントライトを選んだ. わかりやすい!
- IPアドレス: Homebridgeのstatus_urlなどと合わせる.
- MACアドレス: Ethernetシールド背面にあるシールに書かれている.
- On信号: 取得した点灯用IR信号の配列.
- Off信号: 取得した消灯用IR信号の配列.
IR.ino
...
unsigned int on_code[] = {3400, 1800, ... , 350};
unsigned int off_code[] = {3350, 1850, ... , 350};
...
変更できたらArduinoへアップロード. これで先程のリモコンの機能をそっくり真似たArduinoが出来上がる. EthernetシールドのLANポートをHomebridgeが走るRaspberry Piと同じネットワークへ接続することで,Siriのコマンドに対応したIR信号を送信してくれるようになる.
試しに,"Hey Siri, Lights On."と喋ってみると,ほたるスイッチがOnになり照明器具が点灯した! もちろんHomeアプリからの操作もできる. シーンを設定しておけば"Good night."とSiriに言うだけで電気を消してくれるし,"Good morning."で電気をつけてくれる. 素晴らしい! HomeアプリでLightアクセサリをプレスすると上右図のようになる. "Details"をタップしてから,各アクセサリのアイコンをタップすることで,お好みのアイコンへと変更することができるので試してみよう. もちろん私はペンダントライトを選んだ. わかりやすい!
おまけ: Arduinoシールドをつくる
Switch ScienceさんからArduino用バニラシールド基板とピンソケットセットを購入,各部品をはんだ付けして上のように配線をした(注:上図は基盤を上から見た図). これでブレッドボードのときと同じ配線を持つシールドの完成である. 名付けてIRシールド! 下に完成写真を載せる. 私は欲張ってLEDを2個つけているが,もちろん配線図通りの1個でも十分だ. Ethernetシールドの上から取り付けると,LANポートが若干干渉するが,動作に問題はないので良しとする.
3285561134641279543
https://www.storange.jp/2016/10/siri.html
https://www.storange.jp/2016/10/siri.html
Siriで赤外線リモコン操作を実現する
2016-10-31T14:13:00+09:00
https://www.storange.jp/2016/10/siri.html
Hideyuki Tabata
Hideyuki Tabata
200
200
72
72