Lチカの次へ!

【まるで魔法】手をかざすとぴかぴか光る!焦電センサーでLED3つを光らせてみた!【その4・配線&プログラミング編】

f:id:toboli:20170113201710j:plain

電子工作界の主な登場人物が分かってきたところで、いよいよ配線とプログラミングしてみます!ひゃ~~緊張する!!!

 

いろんな話をしてきたので書きながら忘れがちになってますが(笑)、今回つくろうとしているのは

手をかざすとLEDたちが順番に光る

というしくみです。

これをもう少し詳しく書くと、

①焦電センサーが何か近づいたことを察知すると、②複数のLEDが順番に光る

となります!おおー!こう書くとなんかそれっぽくなりますね!ちょっとできる気がしてくる!!

 

さて、このしくみを作るには、2つのしくみ(上記のです!)をそれぞれ作り、あとで組み合わせればいい気がします。

 

この2つのうち、②(LEDを光らせる方)を先に作ることにします!

なぜなら、LEDなら1つは光らせてみたことがあるし(本をまるごとまねしただけだけど!)、とっつきやすそうだから!!

 

その前に、もう一度このしくみを作る作業に必要なものを書いておきます!

 

この作業に必要な物

(もしどんな見た目か分からなければ、過去記事を見てみてください!)

  • Arduino uno・・・・・・・1つ
  • ブレッドボード・・・・・1つ
  • LED・・・・・・・・・・3つ(できれば同じ色のものを!)
  • ジャンパーワイヤー・・・複数
  • 抵抗・・・・・・・・・・あとで計算して必要な本数を出します!
  • 焦電センサー・・・・・・1つ

 

さて、以下からは初心に返ってLEDを一つ光らせてた頃を思い出してみます・・・

 

「LEDを1つ光らせてみる」って、こんなかんじだったはず。

f:id:toboli:20170113213027j:plain

参考にした本によって少し違うかもしれませんが、だいたいこんな感じだったと思います!

LEDのアノード(+側!)にジャンパーワイヤーをつなげ、ジャンパーワイヤーの反対側をデジタルピンの好きな番号にさします。ここでは9番にしました!なんとなく!

 

LEDのアノード側・カソード側どっちでもいいですが、抵抗をつなげます。

ここではカソード側に抵抗をつなげました!

 

LEDのカソード側(ここでは、連なった抵抗の一番はしっこ)にジャンパーワイヤーをつなげ、ジャンパーワイヤーの反対側をArduinoのGNDにつなぎます。

 

そしてプログラム(以下に詳しく書きます!)をかきこむと・・・

f:id:toboli:20170113213047j:plain

こんな風に光ります!

 

画像を見たとき、抵抗が山ほどささっててびびったかもしれません・・・

これには理由があるんです・・・ちょっと話をきいてください・・・

 

LEDといってもいろいろあるので、使うLEDに合わせて抵抗を変えないといけないんだそうです。

 

抵抗値を平和に求めてみる!

 

①まず自分のつかうLEDの「順方向電圧」と「標準電流」を確認する。

  • 順方向電圧のみつけかた

LEDの入ってた袋に、"Vf:○○v"って書いてあったら、○○の数字がそれです!

もし書いてなければ、買ったLEDの型番(袋にPart NO:○○○・・・・って書いてあるやつの○○○・・・・の部分)をネットで検索すると、パーツのネットショップなどがヒットして、順方向電圧:○○vって書いてくれてるはず!)

 

  • 標準電流のみつけかた

LEDの入ってた袋に、”○○mA”って書いてある、○○の数字です!

すぐ後ろにIf(max):○○mAと書いてあったりもしますが、これは最大電流なので違うようです。

そこに載ってなければ、やっぱり型番をネットで検索して、ネットショップなどで確認するといいです!

 

②つかう電源の電圧を確認する。

Arduino unoから出てくる電圧は5vです(これもネットとかにでてます!)。

(※電源はarduinoのUSBケーブルをパソコンにさしているならそこがおおもとなんですが、arduinoを通して出てきた電気を使うので、arduinoの出力電圧5vでOKです。)

 

もしarduinoを使わず、ボタン電池とかで直接LEDを光らすなら、ボタン電池の電圧(○v)をチェックすることになります!

 

③「抵抗値=(電源の電圧-LEDの電圧)÷  標準電流」という式にあてはめる

今回私が使ったLEDは

①順方向電圧:2.1v、標準電圧:20mA

Arduino unoの電圧:5v

このうち、①の標準電圧は計算しやすいようにちょっと手直しします。

1A=1000mAなので、20mAは0.02Aです!この数値を使います!

 

なので・・・

 

抵抗値=(5-2.1)÷0.02

えーと・・・145だ!!ちなみに抵抗値の単位はΩ(オーム)だそうです。なんかなつかしい~~聞き覚えある!!

 

 このLEDを光らせるには、抵抗を145Ωぶんつなげないといけないみたいです。

 

ただ。

 

いま手元にあるのが45Ωと10Ω!!

これらを駆使した結果(45Ωを3本、10Ωを1本つかいました)、画像のようなごちゃごちゃした見た目になりました・・・笑

もし手元に100Ωとかがあれば、そういうものを使った方がスッキリします!

お手元の抵抗と相談ですね!

LEDを1つ光らせるプログラム

私は本を参考に、こんなふうにかいてました!

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

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

}

void loop(){
digitalWrite(LED, HIGH);//LED(9ピン!)がひか~る
delay(1000);//1000ミリ秒(1秒)キープ
digitalWrite(LED, LOW);//LEDがきえる!
delay(1000);//消えたまま1秒キープ!
}

プログラムの中の//の後ろに、プログラムの動きの意味が書いてあります。

void setup()とvoid loop()は、arduinoのプログラミングするソフト(Arduino IDE)を立ち上げると、勝手に書かれていますよね~~以下で少しだけ説明を付け加えてみます!

 

  • void setup()

void setup()のなかには、いろんな準備(ここだったら、9番ピンは出力に使うよ!とか)を書くために使うそうです。(詳しいことは、もっと楽しいことがやれるようになってから知れば大丈夫だと信じてます。笑)

 

  • void loop()

void loop()のなかには、どんな動きをしてほしいかを書くそうです!

 

 

ほかのプログラムについても付け加えます!

  • const int ○=△

○には好きな名前、△にはピンの番号が入ります。

△ピンのことを、これからは○と呼ぶよ!という意味です。

こんなことしなくても、上のプログラムのLEDって書いてあるところを全部9って書いたって動くんです。

でも、LEDの数がどんどん増えて、もっと楽しい動きをさせたくなったとき、「あれ、9ピンってどのLEDのことだっけ?11ピンは??あれ??」ってなるので、わかりやすく最初に名前をつけた方が良いよね!ってことみたいです!

 

constとint?

見なかったことにしましょう。おまじないだと思いましょう!!笑

 

  • pinMode(○, INPUT or OUTPUT)

○には、ピンの番号が入ります。

もし○番のピンに合図が来たら、入力(INPUT)するよ!または出力(OUTPUT)するよ!という意味です!

平たく言えば、電気とか信号とか出すわ!入れるわ!みたいなことでしょう!

 

  • digitalWrite(○, HIGH or LOW)

digitalWriteは、指定されたピン(9番ピン)に合図がきたら、HIGH(つまり、光らせる!)か、LOW(消灯!)という動きをします。

 

  • delay(○)

delayは、その前に書かれているプログラムの動作のまま、○秒キープしますという意味です。()の中には数字をいれます。ただ、ミリ秒単位なので、1秒=1000ミリ秒ということを頭に入れながら、好きな秒数を書きましょう!

 

プログラムはこんな感じでした!

LEDを2つ光らせてみた!!

LEDを1つ光らせた時と同じようなつなぎ方で、もう1つLEDを接続してみました!

LEDのカソード側は、デジタルピンの10番とつながっています。

 

f:id:toboli:20170113214112g:plain

 

1つ光らせた時とちょっと違うのは、下の画像の黄色枠。

妙な位置にジャンパーワイヤー(かたいやつ)がささってる!!

 

LED1つだけ光らせた時は大丈夫だったんですが、2つ目になると・・・あれ、GNDはどこにつなげばいいんだ・・・!?ってなりませんか?

 

はい、大丈夫です!!

 

1つ目のLEDのときに、ArduinoのGNDと1つ目のLEDのカソード(または連なった抵抗の一番はし)にさしたジャンパーワイヤーがありました。

それの、カソード側(ブレッドボードにささってる側)を引っこ抜きます。

そして、ブレッドボードの端っこのーのところに、ぶすっとさします(画像で言うと、茶色いジャンパーワイヤーを見てもらうと分かると思います!)。

 

以前のブレッドボードの記事で少し触れましたが、ブレッドボードの端のーや+はまっすぐ(画像の紫のラインすべて)電気が通ってるんです。

なので、紫のラインとLEDたちのカソード(または連なった抵抗の端)をジャンパーワイヤーでつなげば、GNDにつながった状態になります!やった~~!!!

f:id:toboli:20170113213135j:plain

LEDを2つ光らせるプログラム

const int LED1 = 9;
const int LED2 = 10;

void setup() {
// put your setup code here, to run once:
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);

}

void loop(){
digitalWrite(LED1, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
delay(1000);
digitalWrite(LED2, HIGH);
delay(1000);
digitalWrite(LED2, LOW);
delay(1000);
}

 

 プログラムはLED1こ光らせた時と同じかんじ!ただ増やしただけです!

ついにLED3つ光ったよ!!!

f:id:toboli:20170113213325g:plain

2こできれば、3こも4こも変わりません!!

ブレッドボードの幅的に、抵抗をさすスペースがなくなってきて、だいぶアクロバティックなつなぎ方をしていますが・・・ちゃんとブレッドボードの電気の流れ方に沿っていれば、このようにピカピカできることがわかりました~~!!!

 

プログラムも・・・

const int LED1 = 9;
const int LED2 = 10;
const int LED3 = 11;

void setup() {
// put your setup code here, to run once:
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}

void loop(){
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);
}

 いままでとおなじです!!

 

これで、手をかざすとLEDたちが順番に光る」の後半部分はクリアです!

次回はセンサー部分!!!