PR

Arduino学習⑯ Lesson18 光センサー
Arduinoの勉強会。光センサーを使ってみた。

Arduino学習

このレッスンでは、アナログ入力を使用して光強度を測定する方法を学習します。

光センサー(Photocell,Photoresistor)

使用される光センサーは、光依存性抵抗器と呼ばれるタイプのもので、LDR と呼ばれることもあります。 名前が示すように、これらのコンポーネントは抵抗器のように機能しますが、どれだけの光が当たっているかに応じて抵抗値が変化します。

暗闇では約 50kΩ、明るい光では 500Ωの抵抗を持っています。 この抵抗値の変化を UNO R3 ボードのアナログ入力で測定できるものに変換するには、電圧に変換する必要があります。
これを行う最も簡単な方法は、固定抵抗と組み合わせることです。

使用部品

Lesson16の以下の部品は、そのまま使います。

  • Elegoo UNO R3 x 1
  • 830 tie-points Breadboard x 1
  • LED x 8
  • 220Ω 抵抗器 x 8
  • 74HC595 IC
  • M-M Jumper wires x 14

以下の部品を追加で使用します。

  • 1KΩ 抵抗器 x 1
  • Photoresistor(Photocell) x 1
  • M-M Jumper wires x 2

以下のスターターキットに使用部品はすべて同梱されています。

回路をつくってみる

チュートリアル付属の回路図
チュートリアル付属の配線図

プログラムを動かしてみる

チュートリアル付属のコードを動かしてみます。

//www.elegoo.com
//2016.12.9

int lightPin = 0;
int latchPin = 11;
int clockPin = 9;
int dataPin = 12;

int leds = 0;

void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}
void loop() 
{
  int reading  = analogRead(lightPin);
  int numLEDSLit = reading / 57;  //1023 / 9 / 2
  if (numLEDSLit > 8) numLEDSLit = 8;
  leds = 0;   // no LEDs lit to start
  for (int i = 0; i < numLEDSLit; i++)
  {
    leds = leds + (1 << i);  // sets the i'th bit
  }
  updateShiftRegister();
}
C++

25行目の「int reading = analogRead(lightPin);」によって光センサーの電圧値を取得しています。
この値を57で割って、1~8の値に変換しLEDを点灯させています。

以上

コメント

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