こんにちは、のすけです。
中華で始める Arduino入門日記の12回目になります。
この連載は、爆安の中華製のArduino互換機を入手し、色々と苦しみながらも安い互換機でArduinoを学習してしまおうというものです。 入手の話はこちらから。
今回のお題
前回はポテンションメーターという可変抵抗器でグリグリしました。
今回は、Photoresistor(明るさセンサー)を利用して傾きを検出してみたいと思います。
チュートリアルのchapter10に対応しています。
早速始めましょう。
Photoresistor(明るさセンサー)を知る
こいつです。中華キットに抜かりなく入っていました。
ちょっとここでWikipedia先生の引用を紹介
フォトレジスタ (photoresistor) とは、入射する光の強度が増加すると電気抵抗が低下する電子部品である。 光依存性抵抗 (light-dependent resistor, LDR) や 光導電体 (photoconductor) 、フォトセル(photocell)とも呼ばれる。
フォトレジスタは、高抵抗の半導体でできている。 充分に周波数の高い光が素子に入ると、半導体に吸収された光子のエネルギーにより束縛電子が伝導帯に飛び込む。 結果として生じる自由電子(と対になるホール)によって電流が流れ、電気抵抗が低くなる。
by Wikipedia
光の強さによって、抵抗が低くなるようです。
また、キットに入っているのは硫化カドミウム (CdS) セルというものらしく、セルに光が当たると抵抗値が低くなります。
なお、明るい時は約600Ω、暗い時に1~2MΩになる模様。
回路を作成
利用する部品はこちら
-
Photoresistor : 1
-
LED : 1
-
1kΩ 抵抗 : 1
-
220Ω 抵抗 : 1
-
ブレッドボード: 1
-
ジャンパーワイヤ: 5
1k抵抗は光センサー側につけます。
こんな感じ。
写真はA2ピンと1kΩ抵抗にジャンパーワイヤーが刺さっていませんね。刺しましょう。
プログラム
サンプルプログラムを使うより、前回のポテンションメーター用の改造プログラムが思いのほか良さげなので、それをちょっと修正しています。
シリアル出力もされててデバッグしやすくいい感じです。
(もう全部これでいいんじゃないか…)
int apin = 2; //アナログpin2を利用 int ledpin = 12; //LED pin int threshold = 512; //閾値 void setup() { pinMode(ledpin,OUTPUT); //デジタル pinを出力設定 Serial.begin(9600); // シリアル通信設定 } void loop() { int photocell_read; //変数photocell_readを定義 while(1) { photocell_read = analogRead(apin); //アナログpin0から電圧を読み取って変数に格納 Serial.println(photocell_read); if(photocell_read <= threshold) { // 閾値以下ならLED点灯 digitalWrite(ledpin,HIGH);//led点灯 } else //それ以外の場合 { digitalWrite(ledpin,LOW);//led消灯 } } }
やってみる
はい、やってみた結果LEDは変わりませんでした。
例によって、チューニングです。
このプログラムではシリアル出力してますから、値を確認してみましょう。
-
通常時で450前後
-
隠した時に100前後
になっていることがわかりました。
なので、thresholdを256くらいにして、再度挑戦です。
そして、できた結果がこちら。
いい感じですね。
次回は温度計を使ってみます。