🌏

電子工作 その20(赤外線リモコンからLEDをON/OFFしてみた)

2024/01/26に公開

こんにちは、Ideagearの鈴木陽介です。

前回は、赤外線受光モジュールのVS1838Bの使い方についてご説明しましたが、今回はその知見を活用し、赤外線リモコンからVS1838B経由でLEDをON/OFFしたり、音声再生モジュールに再生指令を出したりしてみましょう。

はじめに

明日、明後日の屋外販売イベントでデジペを展示するにあたって、お店の前を通る人に対してリモコンからデジペをしゃべらせることでお店の前で足を留めてもらいやすくなると考えました。

ということで、新たに下記赤外線リモコンを入手し、先日てテストした赤外線受光モジュール(VS1838B)と組み合わせて、改めてLEDのON/OFFからテストしました。
https://www.amazon.co.jp/gp/product/B08XXQGNHF/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

上記はリレーモジュールも付いていますが、シンプルなリモコンが欲しかっただけなのでそちらは無視w

LEDのON/OFFは、最初間違えて赤外線LEDを使ってしまうという凡ミスがありましたがw、発光ダイオードに変えて無事使用できました。


青色のは発光ダイオードではなく、赤外線LEDだったため光らず。。。

参考記事

https://deviceplus.jp/arduino/how-to-send-ir-commands-to-project-with-remote-control/

配線とライブラリー

VS1838Bの配線やライブラリーについては、下記前回記事をご覧ください。
https://zenn.dev/suzuky/articles/01a50f1645fa47#ライブラリー

ソースコード

参考記事のソースコードを拝借しますが、それに合わせて、下記の通り配線してください。

Arduino Uno VS1838B 発光ダイオード
5V VCC -
GND GND GND
デジタル8番ピン OUT デジタル6番ピン

※発光ダイオードのカソードとGNDの間には、300Ω~1kΩ程度の抵抗を入れてください。

赤外線の受信(出力)は、デジタル8番ピン
LEDの出力は、デジタル6番ピン

を使用します。

#include <IRremote.h>
 
int receiverPin = 8;
int LEDPin = 6;
bool lightOn = false;
IRrecv receiver(receiverPin);
decode_results results;
 
void setup() {
    Serial.begin(9600);
    receiver.enableIRIn();
}
 
void loop() {
    if(receiver.decode(&results))  {
        Serial.println(results.value, HEX);
        receiver.resume();
    }
 
    if (receiver.decode(&results)) {
        if (results.value == 0x00000000) {
            if (lightOn == true) {
                digitalWrite(LEDPin, LOW);
                lightOn = false;
            } else {
                digitalWrite(LEDPin, HIGH);
                lightOn = true;
            }
        }
        receiver.resume();
    }
}

一点だけ、お使いの赤外線リモコンに合わせて変えなければいけない項目があります。
上記ソースコード上で「0x00000000」となっている赤外線識別コードの部分です。
具体的には下記の場所です。

if (results.value == 0x00000000) {

ここを、下記のように具体的な8桁の16進数の英数字へと変更します。

if (results.value == 0xFF02FD) {

赤外線識別コードの確認方法

上記ソースコードは、ご丁寧にシリアルモニタで赤外線識別コードを確認できるよう組まれています。

Arduinoへ書き込み後、シリアルモニタを開き、赤外線リモコンの送信部をVS1838Bへ向けて任意のボタンを押します。すると、そのボタンに対応した識別コードが、下記のようにシリアルモニタ上に表示されます。

このリモコンにはONとOFFの2つのボタンしかありません。

ONを押すと「FF02FD」が表示され、OFFを押すと「FF9867」が表示されます。
これがそれぞれに対応する識別コードです。

なお、「FFFFFFFF」が複数ありますが、要は受信エラーです。

アマゾンで買った赤外線リモコンがショボいのか、受光モジュール(VS1838B)との相性が良くないのかは不明ですが、約2回に1回しかエラーにならないとなると、おもちゃならまぁ良いとして、正式なデジペのリモコンとして使うのは厳しそうです。

ただ、ソースコードの当該箇所に先ほど確認した識別コードを入れてもコンパイルエラーになってしまいます。

で、いろいろと試行錯誤した結果、桁数が足りないことが原因であることがわかりました。

下記前回記事のソースコード(Arduinoのサンプルコード)を使い、シリアルモニタで正しい識別コードを確認します。
https://zenn.dev/suzuky/articles/01a50f1645fa47#ソースコード


こちらはONボタンの識別コードです。
「FF02FD」の頭に「0x」を加えて、「0xFF02FD」とする必要があったようです。


こちらはOFFボタンの識別コードで、同じく「0xFF9867」が正しいようです。

改めて、元のソースコードの「results.value ==」に正しい識別コードを記載します。

コンパイルが通りました!


LEDが光る前の様子


このようにLEDが光れば成功です!

動作テスト

ONボタンを押すことで、LEDがON/OFFすることが確認できます。
https://twitter.com/Ideaport_Suzuky/status/1750864126971417085

一度のプッシュで反応しないのがじれったいですが、前述の通り、約2回に1回は受信エラーになっているので仕方ありませんね。。。

おまけ

深センラボでの動作テスト
https://twitter.com/Ideaport_Suzuky/status/1743591397486428615

まとめ

いかがでしたでしょうか?

赤外線の識別コードさえわかれば、家に転がっているテレビや扇風機、エアコン等のリモコンでも十分い遊べるのがいいですね。

赤外線受光モジュールと赤外線リモコンを使って、手軽で快適な遠隔操作ライフをぜひ楽しんでください。

次回は、この組み合わせを活用して遠隔からデジペをしゃべらせてみます。

それではまた!

Discussion