ホームセンターなどでよく見かける簡単な防犯灯(周囲が明るいときは消灯していて,暗くなると点灯するもの.昼間に太陽電池で発電した電気を蓄電池に溜めておくものが多い)のように動作する回路を,明るさセンサ(CdS)を応用して作ってみましょう.
下の実体配線図のように,CdSの抵抗値(つまり周囲の明るさ)によってArduinoのアナログ入力端子にかかる電圧が変化するようにします. このとき,明るいと電圧が高くなり,暗いと低くなるようにした方が直感的なので,電気の流れ方をCdS→抵抗→GNDとなるようにします. 今回は回路を簡単にするためArduinoの内蔵LEDを利用しましたが,デジタル端子から抵抗とLEDに配線してもよいと思います(その方が色も選べて楽しい).
スケッチは以下のようにとても単純です.
/* Light LED when it's dark */ const int analogInput = 0; void setup() { Serial.begin(9600); pinMode(LED_BUILTIN, OUTPUT); } void loop() { int analogValue; analogValue = analogRead(analogInput); Serial.println(analogValue); if (analogValue < 100) digitalWrite(LED_BUILTIN, HIGH); else digitalWrite(LED_BUILTIN, LOW); delay(1000); }
このスケッチでは loop() の後半で変数 analogValue の値を定数100と比較しています. この100という値は場所などの条件によって変わるので,シリアルモニタの値を眺めながら調整してください.
また,最後の delay(1000) で「1秒おきに周囲の明るさを確認する」ことになっています. この間隔を短くすることでもっと鋭敏に反応するLEDになるし,間隔を長くすればゆったり反応するようになります.