Lチカの次へ!

読者です 読者をやめる 読者になる 読者になる

Lチカの次へ!

日常のこと、電子工作のこと、いろいろです。

【まるで魔法】手をかざすとぴかぴか光る!焦電センサーでLED3つを光らせてみた!【最終回・焦電センサーの接続】

この「手をかざすとLEDたちが光る」シリーズもついに最終回!

今回は「手をかざす」部分、つまり焦電センサーの配線&プログラミングをやっていきます!!

これで電子工作でも超花形のセンサー類をさわれるようになります!

もうただのLEDぴかぴかじゃな~い!たのし~~い!

今回使う焦電センサーのご紹介

今回は、『焦電型赤外線センサーPAPIRs 5m EKMC1601111』という名前の焦電センサーを使います!見た目はこんなかんじです。

f:id:toboli:20170123122320j:plain

電子部品をたくさん売っている秋月電子通商さんで480円(税込)で売っています!

店舗でもネットでも買えます。

迷い無く買うならネット、冒険したいなら店舗がいいかもしれません。笑

 

はじめて1人で秋葉原の店舗に行ったとき、お客さんが機械に詳しそうな男の人ばかりですごい緊張しました・・・。笑

部品の場所もいまいちわからなくておろおろしてたら、店員さんが声をかけてくれて一緒に探してくれました。忙しいのに、部品1つ1つの特徴や違いを丁寧に説明してくれて本当にありがたかったです!!!

 

見たことない部品やおもしろそうなキット、なにより電子工作が好きな人ってこんなにたくさんいたんだなあという感動が味わえるのが店舗ならではだと思います。

 

最初はきっと緊張しますが、すごく楽しいので店舗はおすすめです!

 

焦電センサーとArduinoをつなげてみる!

焦電センサーの足の役割は、以下の記事の中で書いた通りです!

でも、実際Arduinoにつなげるとなると、?ってかんじです。

しかも、複数のLEDを光らせるとなると、?????ってかんじです。

 

・・・こんなときは、分かるところから1つずつやっていくのが一番!

焦電センサーの足の役割を確認しながら、分かるところをつなげていきましょう!

 

焦電センサーの足には、①VDD ②OUT ③GNDという3つの役割がありました。

f:id:toboli:20170123140524j:plain

 それぞれの役割は・・・

  • VDD・・・電源の+側につなぐ足
  • OUT・・・「なにかが近づいたよ!」とお知らせメッセージを送ってくれる足
  • GND・・・ArduinoのGNDにつなぐ足

です!

 

足の区別は難しいですが、この焦電センサーに関しては、

  • 足の付け根が金色・・・GND
  • 金色のGNDのすぐ左隣の付け根が黒い足・・・OUT
  • もう一つの付け根が黒い足・・・VDD

となってます。

 

この区別については、例えば秋月電子通商さんの商品紹介ページを見ると、PDFデータシートと書かれたPDFファイルが載っていて、そこに書いてあります。

部品を買ったら、データシートを読む!!ってかんじです!

 

それぞれのピンの位置を確認しつつ、ブレッドボードにさします。

f:id:toboli:20170123141132j:plain

 

今回の主役の焦電センサーが舞台(ブレッドボード)に立ちました!!

いよいよArduinoとつなげていきます!

 

まず、VDD。

VDDは電源の+側につなげるので・・・こうだ!!

f:id:toboli:20170123155502j:plain

うん、なんかそれっぽい!

 

次は、GND。これはArduinoのGNDにつなげる足だから・・・こう!

f:id:toboli:20170123155655j:plain

最後は、OUT!

OUTは、何かが近づいたよというお知らせを送ってくれる足。

Arduinoの中で、お知らせを送ったり受け取ったりできるところは・・・

そう、デジタルピン&アナログピン!!

 

焦電センサーはデジタルピンが好きなので、今回はデジタルピンにつなげましょう!

(センサーにはアナログ好きなのと、デジタル好きなのがいるんです!この話はまた今度!)

なんとなく2番がいいので2番にします!

f:id:toboli:20170123161336j:plain

できた~~!!!

これで完成!プログラム書き込むだけ!!!

 

ではないのです・・・

 

OUTの部分にはもうひと工夫しないといけないそうなんです!

それは、プルダウン抵抗を加えること!!!

 

やること自体は簡単です!こんなかんじ!

f:id:toboli:20170123161402j:plain

 ただ抵抗をさすだけ。

でもなんでこんなところに抵抗が必要なのか気になります。

そこでプルダウン抵抗について調べてみました!

 

白か黒か!どっちつかずは嫌いなデジタルピン。

焦電センサーはお知らせの仕方がかなり男らしくて、「来た!」「来ない!」だけで知らせてくれます。余分な物は一切無し!かっこいい!!

 

センサーが反応しているとき(ここでは何かが近づいてきたときです)は「来た!」のメッセージ。

 

じゃあ、センサーが反応していないとき(何も近づいてきてないとき)は?

もちろん「来ない!」じゃないの?

 

それがちがうんです・・・!

 

反応していないとき、デジタルピン2番には「来た!」も「来ない!」もどっちのお知らせもこない中途半端な状態になっているんだそう。

 

デジタルピンは、白黒はっきり付けるのが好きなので、来たのか来ないのか分からない瞬間を一瞬たりとも作りたくない。

 

そこで出てくるのがプルダウン抵抗

 

焦電センサーのOUTピンとデジタルピン2番へのつながりだけでなく、OUTピンとGNDへのつながりを抵抗をはさんで作ることで、

センサーに反応があったら「来た!」、反応がなければ「来ない!」と、白黒はっきりお知らせできるようになるんだそうです!

 

ちょっとめんどうだけど・・・デジタルピンへの気遣いだと思えば!笑

 

 

焦電センサーとLEDをつなげる!!

これでひとまず焦電センサーのすべてのピンがArduinoにつながりました!やったー!

何かが近づいてきたら、「来た!」というお知らせをArduinoに送れちゃう!

 

お知らせは受け取ったら活用しなければ意味がない!

舞台上で焦電センサーがサインを送ってくれてるんだから、誰かが出て行って踊らなくては!それをするのがLED!ついに2人の共演が見れる日がやってきましたー!!

 

焦電センサーとLEDは直接サインをやりとりすることはできなくて、監督のArduinoを通して伝え合います。

 

じゃあLEDがお知らせを受け取れるようにするには・・・そう、2番以外のデジタルピンにつなげてあげればいいのです!

 

なんとなくデジタルピン13番がいいので、そこにLEDを1つつないでみます。

こんなかんじです。

f:id:toboli:20170123181603j:plain

※抵抗値は自分の使いたいLEDを確認して、計算します!以下の記事に計算方法を書きました!

 

これで配線はできたーーーー!!!

次はプログラミングです!

 

焦電センサーとLEDのプログラム

焦電センサーで1つLEDを光らせるプログラムを書いてみます!

 

const int LED = 13; //これから先、「LED」という文字は、デジタルピンの13番のことを指しますよ~~

const int sensor = 2; //これから先、「sensor」という文字は、デジタルピンの2番のことを指しますよ~~

 

 

void setup() {
pinMode(LED, OUTPUT); //LED(つまり13番のピン)は出力する場所として使います!!

pinMode(sensor, INPUT); //sensor(つまり2番のピン)は入力する場所として使います!!

}

void loop(){

int sensorState = digitalRead(sensor);//sensor(2ピン)のお知らせを読んで、「来た(HIGH)」or「来ない(LOW)」を「sensorState」と名付けた場所に入れておきます!

 

//もし「sensorState」に「来た(HIGH)」というお知らせが入ってたら・・・
if(sensorState == HIGH){
digitalWrite(LED, HIGH);//LED(13ピン!)がひか~る
delay(1000);//1000ミリ秒(1秒)キープ
digitalWrite(LED, LOW);//LEDがきえる!
delay(1000);//消えたまま1秒キープ!
}

 

//「sensorState」に「来ない(LOW)」が入ってたら・・・

else{
digitalWrite(LED, LOW);//LEDはきえる!
}

}

 

こんなかんじになります!

焦電センサーのプログラミングって聞いてドキドキしてたけど、LEDのプログラミングとあんまり変わらない!

これで焦電センサーに手をかざすと・・・ぴかぴかひかります!やったー!!

 

あとはLEDの数を増やして・・・

(LEDの配線方法は、以下の記事で!!)


プログラミングはこんなかんじ!

 

const int LED1 = 11;
const int LED2 = 12;
const int LED3 = 13;

 

const int sensor = 2; //これから先、「sensor」という文字は、デジタルピンの2番のことを指しますよ~~

 

 

void setup() {

pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);

 

pinMode(sensor, INPUT); //sensor(つまり2番のピン)は入力する場所として使います!!

}

 

void loop(){

int sensorState = digitalRead(sensor);//sensor(2ピン)のお知らせを読んで、「来た(HIGH)」or「来ない(LOW)」を「sensorState」と名付けた場所に入れておきます!

 

//もし「sensorState」に「来た(HIGH)」というお知らせが入ってたら・・・
if(sensorState == HIGH){
digitalWrite(LED1, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
delay(1000);
digitalWrite(LED2, HIGH);
delay(1000);
digitalWrite(LED2, LOW);
delay(1000);
digitalWrite(LED3, HIGH);
delay(1000);
digitalWrite(LED3, LOW);
delay(1000);
}

 

//「sensorState」に「来ない(LOW)」が入ってたら・・・

else{
digitalWrite(LED1, LOW);//LED1はきえる!

digitalWrite(LED2, LOW);//LED2はきえる!

digitalWrite(LED3, LOW);//LED3はきえる!
}

}

 

書き込むと・・・

 

できた~~~~~~!!!!

f:id:toboli:20170123190107g:plain

 

焦電センサーに近づくと、LEDが順番に光ります!ばっちり!!!!

 

 

センサーとLEDをかけ合わせれば、夢が広がります!!

どんどんLチカの次に行きましょう~~!!!