見出し画像

Arduinoで赤外線を使ってLチカする!!

こんにちは!!SUNABACOスタッフです!!
ここ最近のマイコンやシングルボードコンピューターなどには無線モジュールが標準搭載されていてびっくりです。
ただ初心者の自分には通信で遊ぶにはちょっと敷居が高い...もう少しお手軽に無線で制御してみたいなーってことで、テレビのリモコンを使ってLチカをしてみたいと思います!
こちらの記事を参考にさせていただきました👇

下準備

とりあえずプログラムは先ほどの記事にあるものをそのまま使います
(∩´∀`)∩

最初に赤外線センサーを使うよ~んということで必要なライブラリをArduinoのIDEに入れていきます。


画像1

ダウンロードしている間にリモコンを用意。SUNABACOにあったモニターのリモコンを今回は使用します。

画像2

まったく関係ない話なんですが、赤外線は目に見えませんがカメラを通すと光が見えるんですよ!よければお試しを( ^^) _U~~

画像3

とりあえずリモコンの信号を読み取る

画像4

Untitled Sketch_ブレッドボード

自分の持っていた赤外線受信センサ(VS1838)だと配線はこんな感じになりました。接続を間違えたままArduinoの電源を入れてしまうとセンサが高熱になるのでくれぐれもお気をつけて...

信号を読み取ってみる

早速プログラムを書き込んで信号を読み取ってみます。
シリアルモニタを開いて9600bpsにします。
スイッチオン!!!!!!!!!!

画像6

コメント 2020-06-17 142153

シリアルモニタに信号のデータが!!!!!

このコードだと16進数で信号を表示しているので、とりあえずとってきたデータをそのまま表示するようにプログラムを書き換えます。スラッシュで囲まれているところが追加部分です。

 #include  <IRremote.h>

int RECV_PIN = 11; 

///////////////////
String led_on = "";
//////////////////

IRrecv irrecv(RECV_PIN); 
decode_results results;  

void setup(){
Serial.begin(9600);
irrecv.enableIRIn();   
 

}

void loop() {

if (irrecv.decode(&results)) {      
Serial.println(results.value, HEX); 

//////////////////////////
led_on = (results.value);
Serial.println(led_on);     //10進数で表示する(値をそのままだす)
//////////////////////////

irrecv.resume();                    
}

delay(100);
}

書き込んだら再びリモコンのボタンを押します!!

コメント 2020-06-17 143423

すると10進数のデータが下に出てきました!
(この時点で気づいたんですけどそのまま16進数を10進数に変換すればよかったのでは)

LEDを光らせる

信号の取得ができたので、リモコンのボタンが押されたらLEDが光るようにしてみます。
とりあえず2番ピンにLEDを追加、330Ω抵抗も入れておきます。

Untitled Sketch_ブレッドボード

コードもさらに書き加えます。

 #include  <IRremote.h>

int RECV_PIN = 11; 
String led_on = "";


IRrecv irrecv(RECV_PIN); 
decode_results results;  

void setup(){
Serial.begin(9600);
irrecv.enableIRIn();   

////////////////////////追加部分
pinMode(2, OUTPUT);
///////////////////////

}

void loop() {

if (irrecv.decode(&results)) {      
Serial.println(results.value, HEX); 
led_on = (results.value);
Serial.println(led_on);      //10進数で表示する(値をそのままだす)
irrecv.resume();                    
}


///////////////////////追加部分
if(led_on == "604110602"){    //取得した値と同じであればLEDをON
   digitalWrite(2, HIGH);
   Serial.println("LEDON");
 }
else{                         //違うボタンであればLEDをOFF
   digitalWrite(2, LOW);
   Serial.println("LEDOFF");
 }
////////////////////////

delay(100);
}

led_onという変数にリモコンから飛んできた信号データを代入して、とりあえずシリアルモニタに出力するところまで動作しました。
その変数と、先ほど取得した10進数の数字が等しければLEDを点灯!!
それ以外ならば消灯!!といったプログラムです。16進数じゃなくて10進数にしたのはわざわざ16進数に変換して代入するのがめんどくさかったからです...つД`))

果たして光るか...???

画像10

画像11

光ったー!!!!!
(めんどくさがって配線適当なのがバレる!!)
意外と簡単にLチカできちゃいました。今回はおためしでしたがいくらでも応用が利きそうです(; ・`д・´)
次は受信だけじゃなくて送信もやってやってみたいですね...!!!

こちらのNoteはHanahanaworksが運営するコワーキングスペース&プログラミングスクール「SUNABACO」の提供でお送りしています。

SUNABACOでは通常のプログラミングスクールの他に、休日のイベントとしてUnityやBlenderのイベントを定期開催しています。イベント情報は公式サイトやTwitterで入手することができます。

公式サイト


SUNABACOは年中無休で12:00~22:00の時間帯で営業しております。気になった方は是非お近くのSUNABACOまでお越しください!


この記事が気に入ったらサポートをしてみませんか?