1 ソフトウェア インストール編
2 電子パーツ購入編
3 (共通)準備編
4 基本編
5 フルカラーLED編
6 ミニ電光掲示板編(1)
7 ミニ電光掲示板編(2)
基本編です。
外付けLED を光らせたり、光センサーで部屋の明るさを測定してみます。
フルカラーLEDや、ミニ電光掲示板を作りたい方はスキップしても構いませんが、この基本編を行うことで、電子工作に対する理解が深まると思います。
まず、前回の(共通)準備編で、PC と Arduino が USBケーブルで繋がっている場合は、USBケーブルを抜いてください。
以降、ブレッドボードにパーツを抜き差しする時は必ずUSBケーブルを抜いてください。
ケーブルを指したまま(電源が入ったまま)ブレッドボードのパーツを抜き差しすると、電子パーツが破損します。
続いて、下記図を参照して配線してみてください。
D5 : Arduino Nano の D5 ピン
抵抗 : ベージュ色の抵抗(向きは任意)
LED : 長い足を抵抗側、短い足をアース側に
アース : ブレッドボードの「-」
具体例は下記の通りです。
右半分(写真では上半分)に収めてください。左半分(写真では下半分)は次の工程で使用します。
写真例では、Arduino はブレッドボードの 1行目から 15行目に刺さっています。
つまり 15行目までは Arduino が使っているので、抵抗やLEDを刺す場合は 16行目以降を使ってください。
Arduino の D5 (写真では8行目)から紫色のジャンパーケーブルで、19行目に逃がしています。
19行目から 23行目に 100Ω の抵抗を刺しています。抵抗に向きはありません。
23行目から 24行目に LED を刺していますが、LED には向きがあります。足の長い方を抵抗側に刺して下さい。
LED の足の短い方は 黄色のジャンパーケーブルで 一番外側の青いライン(-)に繋がっています。
配線が出来たら、開発環境で以前のプログラムを消して、下記の新しいプログラムをロードしてみてください。
#define LED_PIN 13
#define LED_PIN_ADD 5
void setup () {
pinMode (LED_PIN, OUTPUT); // 13番ピンをデジタル出力に設定
pinMode (LED_PIN_ADD, OUTPUT); // 5番ピンをデジタル出力に設定
}
void loop () {
digitalWrite (LED_PIN, HIGH); // LEDを点灯する
delay (1000); // 1秒待機する(1000ミリ秒)
digitalWrite (LED_PIN, LOW); // LEDを消灯する
delay (1000); // 1秒待機する
digitalWrite (LED_PIN_ADD, HIGH); // LEDを点灯する
delay (1000); // 1秒待機する
digitalWrite (LED_PIN_ADD, LOW); // LEDを消灯する
delay (1000); // 1秒待機する
}
これで、Arduino 本体の LED と、外付けの LED が交互に点滅するはずです。
上手くいかなかったら、配線を確認したり、USBのポートを変えてトライしてみてください。
柔らかいジャンパー線は無理に抜き差しすると、内部で断線することがあるので、ちゃんと動かない場合は、他のジャンパー線に変えてみてください。
ここまでの配線を残したまま、反対側に光センサーを付けてみます。
+5V : ブレッドボードの「+」
CDS : 光センサー
A0 : Arduino Nano の A0 ピン
抵抗 : 水色の抵抗
アース : ブレッドボードの「-」
一番手前の赤いラインから、19行目に繋いでいます。
19行目から 24行目に 10KΩ の抵抗を刺しています。抵抗に向きはありません。
24行目と A0( 4行名)を、緑色のジャンパー線で繋いでいます。
24行目から2 6行目に CDS を刺しています。CDS にも向きはありません。
CDSのもう一方( 26行目)を青いジャンパー線で青いライン(-)に繋いています。
配線が出来たら、開発環境で以前のプログラムを消して、下記の新しいプログラムをロードしてみてください。
int ledPin = 5; // LEDをデジタルピン5に接続
int analogPin = 0;
int val = 0; // 読み取った値を格納する変数
int low_nm = 150; // 低い値
int high_nm = 450; // 高い値
void setup(){
pinMode( ledPin, OUTPUT ); // ピン5を出力に設定
Serial.begin( 9600 ); // シリアル通信の初期化
}
void loop(){
int threshold;
threshold = ( low_nm + high_nm ) / 2; // 閾値をlowとhighの間に設定
val = analogRead( analogPin ); // アナログピンを読み取る
Serial.println( val ); // デバッグ用に送信
if( val >= threshold ){
digitalWrite( ledPin, HIGH ); // LEDをオンに
} else {
digitalWrite( ledPin, LOW ); // LEDをオフに
}
delay ( 1000 ); // 1秒待機する
}
プログラムのロードが終わったら、ツール → シリアルモニタ を選択してください。
なにもしないで CDS に光が当たっている時と、CDS に指を当てて光をさえぎった時で、値が大きく変わると思います。
この値は部屋の明るさによりますので、光を当てた時の値と、光を遮った時の値をメモしてください。
int low_nm = 150; // 低い値
int high_nm = 450; // 高い値
そして、プログラムの 4行目と 5行目の値を、その値で書き換えてください。
書き換えたら、再度プログラムをロードします。
これで、光を当てた時と、遮った時で、LED を付けたり消したりすることができます。
つまり、CDS から入力された情報で、LED に結果を出力しているわけです。
この原理がわかれば、入力側を、スイッチや各種センサーに、出力側をブザーやモーターに変えることで、色々な装置を作ることができます。
光センサーのオマケ。
配線は上記のままで、プログラムを下記のものに差し替えてください。
int ledPin = 5; // LEDをデジタルピン13に接続
int analogPin = 0;
int val = 0; // 読み取った値を格納する変数
int low_nm = 150; // 低い値
int high_nm = 450; // 高い値
void setup( ) {
pinMode( ledPin, OUTPUT ); // ピン13を出力に設定
Serial.begin( 9600 ); // シリアル通信の初期化
}
void loop( ) {
int threshold_1, threshold_2, threshold_3, threshold_4, threshold_5;
int wait;
threshold_1 = low_nm - 10;
threshold_5 = high_nm + 10;
threshold_3 = ( threshold_1 + threshold_5 ) / 2;
threshold_2 = ( threshold_1 + threshold_3 ) / 2;
threshold_4 = ( threshold_3 + threshold_5 ) / 2;
val = analogRead( analogPin ); // アナログピンを読み取る
Serial.println( val ); // デバッグ用に送信
if ( val < threshold_2 ) { // 閾値2以下
wait=1000; // 遅い点滅
}
else if ( val < threshold_3 ) { // 閾値3以下
wait=500; // やや遅い点滅
}
else if ( val < threshold_4 ) { // 閾値4以下
wait=200; // やや早い点滅
}
else { // 4より大きい
wait=100; // 早い点滅
}
digitalWrite( ledPin, HIGH ); // LEDをオンに
delay ( wait );
digitalWrite( ledPin, LOW ); // LEDをオフに
delay ( wait );
}
4~5 行目を書き換えるのを忘れないようにしてください。今回はこの値がとても重要です。
今度は光を当てないと、LED がゆっくり点滅していると思いますが、指で CDS を隠すと、点滅が早くなります。
ゆっくり指を離してみてください。点滅のスピードが 4段階で変わる筈です。
基本編は以上で終了です。