ArduinoでCdSセンサーを扱う

標準

今回は、Arduinoの初心者は初心者らしく、簡単なCdSセンサーの扱いについて学んでいきたいと思います。
CdSセンサーをRaspberry Piで扱った時の記事はこちらの「Raspberry PiでCdSセンサーの値を読み取る」を参照してください。基礎的な事項はこちらと同じです。
ただ、何度も言っている通りArduinoはアナログ値の読み取りが直接可能なので、A/Dコンバーターは不要です。

回路図

まず、Arduinoでの回路を作ります。プルダウン抵抗を忘れないほうが良いです。センサーの値が安定します。
今回は、明るさである閾値を下回ったらLEDが点灯するという単純なものを作ってみます。

CdSセンサー回路図

スケッチ

Arduinoで動作するプログラミング言語をスケッチ(Sketch)といいます。見た感じJavaで動作するらしく、文法もJavaライクな点が多いように感じます。(当ブログでは、SketchのハイライトはJavaで設定しています。)
では、今回のCdSセンサーの値を読み取るスケッチを見てみます。

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}
void loop() {
  int value = analogRead(0);
  Serial.println(value);
  if(value>=40) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }
  delay(100);
}

13番ピンを出力、A0番ピンを入力に設定しています。
もし、A0番ピンから入力された明るさの値が40を下回った時、LEDが消灯し、40以上になった時、LEDが点灯するようになっています。
もし、変化がないという場合はシリアルモニタやシリアルプロッタなどを活用し、適切な閾値に設定し直してください。

考察

プルダウン抵抗である程度値が安定しているといえども、コンデンサーが必要なのか、明るさが同じでも一定の振れ幅を持っているようです。以下のシリアルプロッタの図を御覧ください。

シリアルプロッタの様子

振幅約10で延々と数値が振れています。
指などでCdSセンサー部分を隠すと確実に読みっていることが分かります。LEDの状態が変化することも確認してください。

指で隠してみる

実用的に使うには、もうちょっと誤差的な振れ幅を無くしたいところですね。やはりコンデンサーが必要なのでしょうか。これを使えば、必要な時間に照明をつける装置などを作れたり、色々なものに応用できそうですね。回路も簡単ですし、是非この機会に。

投稿者プロフィール

yoshipc
コンピューター関連を得意としています。PHPが専門です(尚、技量はお察し)。このブログとMastodonのインスタンスを運営・管理しています。よろしくお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です