明るさを検知する

Arduino

 ここでは,CdSによって明るさを検知し,LEDの点灯を制御する方法について述べます。実体配線図を以下に示します。

 左の図が回路図です。

 Arduinoの左側が入力になります。5Vを220Ωの抵抗とCdSの内部抵抗で分圧された電圧がA0端子にアナログ電圧として入力されます。

 ちなみに,CdSは周囲の明るさによって内部抵抗が変わります。周りが暗くなると抵抗値が大きくなります。すると,A0端子に加わる電圧は高くなります(分圧のため)。このときに,3番ピンにつながっている抵抗とLEDに電圧をかけてあげると,暗くなったらLEDが点灯する回路になります。街灯が夕方になると点灯するしくみです!

 では,プログラムを右に示します。まず,1,2行目は変数および定数の初期設定です。valはA0端子から読み取った値(0~1023の1024段階に分けられた電圧)になります。thはしきい値を示します。しきい値については後述します。

 次に,5行目はシリアルモニターにvalの値を表示させるための準備です。

 10行目はA0端子から読み取った値をvalに代入しています。11行目はその値をシリアルモニターに表示しています。

 13行目から20行目までは,valの値がthの値よりも小さいかどうかで動作を分岐しています。先述の通り,valの値は周りが暗くなると大きくなります。したがって,13行目から16行目は周りが明るい状態のときの動作を示しています。17行目から20行目は暗いときですね。シリアルモニターを見てもらうとわかるのですが,valの値はかなり振れ幅があります。そこで,しきい値thを決めて,val < th の場合は明るい状態,そうでなければ暗い状態というように判断しています。

 15行目は3番端子(LEDが接続されている)に0,すなわち電圧を出力しません。したがって,LEDは点灯しません。一方,19行目では3番端子に最大値255(5V)の電圧を出力します。このとき,LEDは点灯します。(digitalWrite(3,HIGH)やdigitalWrite(3,LOW)でもプログラムは動作しそうですね。試してみてください。)

 下の写真は,実際に回路を組んだ様子です。

 下の左の図は入力側(CdSと抵抗),右の図は出力側(LEDと抵抗)の接続の様子を示しています。

 最後に,動作の様子を動画として示します。CdSに手をかざして暗くするとLEDが点灯するのがわかります!

コメント

タイトルとURLをコピーしました