前回、Arduinoと赤外線LEDを使って、リモコンの信号を読み取りました。今回は送信機能を実装し、実際に家電を操作してみます。スマートスピーカーとの連携を見据え、PCからのシリアル通信で信号を遅れるようにします。リモコンの信号について前回に続き、家電協(AEHA)方式とNEC方式について、送信方法について解説します。OFFで信号を通信するのですが、LEDがONの時、38kHz、デューティサイクル1/3で変調がかかっています。あるAEHA方式の信号をオシロスコープで見てみると、リーダーのONが8T,OFFが4Tあって、その後データ部分が続いているように見えますが...すこし拡大してみると、高速にON,OFFを繰り返していることがわかります。デューティサイクル1/3のパルスでON,OFFが繰り返されているのがわかります。OFFが17μs程度です。OFFを繰り返します。1個リモコンを固定して、部屋中の家電を操作しようとすると、赤外線LEDを部屋中に向ける必要があります。赤外線LEDだけだと、動いているかわからないので、適当な色のLEDを光らせて動作の確認が出来るようにしています。タクトスイッチは動作確認用です。押したら適当な信号を出すようにします。信号はデジタル入出力のPORTDを使って出力します。4個と、確認用のLEDを1個を、それぞれ2~6番ピンに繋いでいます。(LEDをArduinoのデジタルピンに抵抗無しで直接繋いでいますが、本来ならば200Ω程度の抵抗を入れるべきです。直挿しだと電流が流れすぎて、LEDが焼き切れ、Arduinoも故障する可能性があります。言え、かれこれ半年ほど問題なく使えていますので、真似する場合は自己責任で。デューティサイクル1/3でLEDを点滅させる関数を書いてみます。出力の切り替えは、digitalWriteを使うより、直接ポートを書き換えた方が早くて精度が出せます。17μs辺りを狙います。命令自体が結構遅いので、間にif文などを入れると狙った通りのタイミングになりません。オシロスコープがあれば、ディレイ時間と実際の時間の関係を探った方が良さそうです。デューティサイクル30.7%になりました。(なぜかHIGHが9μsより早い。)ここまで仕様に寄せなくても、動くならそれでOKです。信号の送信は、データの方式をtrans関数の引数data1に、前回デコードした0と1の羅列を引数data2に入れて送ります。high(t);}PCとの接続スマートスピーカーと連携を見据え、PCと常時接続し、PCから受けたシリアル通信に応じて家電に信号を発信出来るようにします。この時、信号の方式選択以外にもコマンドを追加し、信号送信後の待機時間と、リピート回数を仕込んで、同じ信号をリピートして送信出来るようにしました。シリアル通信では、コマンド5文字と、任意の桁数のデータを「0」と「1」で送り、最後に「e」を送ることとしました。3」により、AEHA方式で、100Tの間隔を開けて信号(test2)を3回繰り返し送信しています。delay(3000)で3秒開けて、別の信号(test3)をさらに3回送信しています。スケッチ中で、文字列から数字への変換は、数字のASCIIコードから0x30を引くことで実装しています。Arduinoを使ってリモコンを作ります。