CdS + Seeeduino + LED で常夜灯をつくる

 子どもが夜中に起きた時に部屋が暗いのが嫌だというので、暗い時だけ LED を点灯させるように CdS セルを使って常夜灯を作ってみました。 CdS セルについては以前 BLE Nano と一緒に使ってみたことがありますが、今回は Seeeduino(Arduino互換機) を使ってみました。

 以前 CdS を使ってみたときの記事はこちらです。

blog.akanumahiroaki.com

回路図

 まずは直接回路を組むのではなく、 Tinkercad でシミュレートしてみます。 Seeeduino は Arduino互換機なので、回路図では Arduino を配置しています。 Tinkercad については以前も下記記事で紹介しました。

blog.akanumahiroaki.com

 LED は一つではさすがに暗いので、とりあえず並べられるだけ並べて12個を並列に配置します。これでどれぐらい明るくなるかはわかりませんがひとまずやってみます。それぞれのアノード側に 4.7Ω の抵抗を配置して、 Seeeduino の13番ピンに接続します。カソード側は GND に接続します。

 CdS の出力はアナログ出力なので、 Seeeduino のアナログ入力で読み取ります。 CdS の一方を GND に接続し、もう一方は 1kΩ の抵抗を挟んで5V出力とアナログ入力の A0 ピンに接続します。

f:id:akanuma-hiroaki:20180420075951p:plain

コーディング

 コードもまずは Tinkercad で実装します。今回はネットワーク接続等は考慮していないのでごくシンプルに、下記のようなコードで実装しました。 analogRead() で13番ピンから CdS の値を読み取り、閾値以上だったら(暗かったら) LED を点灯、閾値未満だったら(明るかったら)消灯しています。

int led_pin = 13;
int lux_pin = 0;
int lux = 0;
int lux_threshold = 900;

void setup()
{
  Serial.begin(9600);
  pinMode(led_pin, OUTPUT);
}

void loop()
{
  lux = analogRead(lux_pin);
  Serial.println(lux);
  if (lux >= lux_threshold) {
    digitalWrite(led_pin, HIGH);
  } else {
    digitalWrite(led_pin, LOW);
  }
  delay(100);
}

シミュレーション実行

 それでは Tinkercad でのシミュレーションを実行してみます。シミュレーションを開始してから CdS を選択するとスライダーが表示され、明るさをコントロールすることができます。今回のコードでは CdS の値をシリアルで出力するようにしているので、Serial Monitor に値が表示されていきます。スライダーで明るさを暗くすると値が大きくなりLEDが点灯し、明るくすると値は小さくなって消灯することが確認できます。

f:id:akanuma-hiroaki:20180420081738p:plain

実物で実行

 では実際の回路を組んで実行してみます。手元にあったもので組んだので、ジャンパーコードの色は回路図とは合ってませんが、回路は同じようにしています。回路を組んだら Tinkercad で書いたコードを Arduino Web Editor にインポートし、 Seeeduino にファームウェアをフラッシュします。するとコードが実行され、以下の動画のように手で CdS を覆って暗くすると LED が点灯します。 Web Editor の Serial Monitor には CdS の値が表示されています。

まとめ

 とりあえず手元にあったもので想定していた動作をさせることはできました。普通の LED では12個並べても明るさは不足してそうですが、暗い部屋での目印暗いニアなりそうです。実際に子ども部屋に置くとなると、電源はAC電源でUSB給電しようと思っているので、コンセントの壁面にコンパクトに設置できるようにする方法を考える必要がありそうです。ケーブルの長さなどもちゃんと調節してスッキリさせたいですね。作ってる過程としては単純にLEDがたくさん点灯するとそれだけで楽しかったりします。それにしても Tinkercad は便利ですね。

 今回は下記の記事を参考にさせていただきました。

deviceplus.jp