[아두이노 강좌] 09. 광센서로 조도 측정하기

본 게시글에서는 아날로그 입력을 사용하여 어떻게 광도를 측정하는지 알아보도록 하겠습니다. 이전 강좌 8번에 서 사용된 회로를 응용하겠습니다.

overview.jpg

사진을 보면 포토셀 센서는 브레드보드 맨 하단에 위치하고 있습니다.

브레드보드 레이아웃

본 게시글에서 사용하는 브레드보드 레이아웃은 강좌 8에서 사용하였던 레이아웃과 동일합니다. 다만 포텐셔미터 대신 LDR과 1K오옴 저항이 사용됩니다.

fritzing_with_pot.jpg

포센셔미터를 제거하고 아래와 같이 포토셀과 저항을 셋업하십시오.

fritzing_with_ldr.jpg

포토셀

포토셀은 LDR(Light Dependent Resistor)라고 불리며 그 이름대로 빛의 세기에 따라 저항값이 달라지는 소자입니다. 실험에 사용되는 포토셀은 어둠속에서 50K오옴 밝은 빛에서 500k오옴을 가지는 저항입니다. 계속적으로 변하는 저항을 아두이노의 아날로그 입력에서 측정하려면 전압으로 바꾸어 주어야 합니다. 가장 간단한 방법은 포토셀을 고정된 값을 가진 저항과 결합하는 방법입니다.

LDR_schematic.png

저항과 포토셀을 합쳐 놓으면 일종의 포센셔미터처럼 동작합니다. 빛이 매우 밝으면 고정값 저항에 비했을 때 포토셀의 저항이 매우 낮아 지고, 이는 마치 포텐셔미터를 최대치로 돌렸을 때와 동일한 효과를 냅니다.

포토셀이 어두운 곳에 있을 경우 저항은 고정값 저항보다 커지게 되고 이는 포센셔미터가 그라운드로 향하는 것과 동일한 효과를 내게 됩니다.

아래에 있는 스케치를 아두이노에 업로드하고 포토셀을 어둡게 하거나 밝게 하여 보십시오.

아두이노 코드

밝기에 따라서 8개의 LED를 켜는 코드입니다. 강좌 8에서 사용한 코드도 작동하긴 하지만, 8개의 LED를 모두 켜기 위해서 필요한 밝기의 정도는 아직 모릅니다. 이것은 고정된 저항값때문인데 그래서 포토셀 저항이 얼마나 떨어지는지 상관없이 그것을 오프셋하기 위한 1k오옴의 고정저항이 있다는 사실에 대한 보충작업을 해줄 필요가 있습니다.

아래는 강좌 8에서 사용된 코드를 약간 수정한 버전입니다.

  1. int lightPin = 0;
  2. int latchPin = 5;
  3. int clockPin = 6;
  4. int dataPin = 4;
  5. int leds = 0;
  6. void setup()
  7. {
  8. pinMode(latchPin, OUTPUT);
  9. pinMode(dataPin, OUTPUT);
  10. pinMode(clockPin, OUTPUT);
  11. }
  12. void loop()
  13. {
  14. int reading = analogRead(lightPin);
  15. int numLEDSLit = reading / 57; //1023 / 9 / 2
  16. if (numLEDSLit > 8) numLEDSLit = 8;
  17. leds = 0;
  18. for (int i = 0; i < numLEDSLit; i++)
  19. {
  20. bitSet(leds, i);
  21. }
  22. updateShiftRegister();
  23. }
  24. void updateShiftRegister()
  25. {
  26. digitalWrite(latchPin, LOW);
  27. shiftOut(dataPin, clockPin, LSBFIRST, leds);
  28. digitalWrite(latchPin, HIGH);
  29. }

가장 먼저, 기존의 potPin은 lightPin으로 이름이 바뀌었습니다. 포텐셔미터 대신 포토셀이 사용되니까요.

그 다음으로는 얼마나 많은 LED가 켜지는지를 계산하는 부분이 바뀌었습니다.

  1. int numLEDSLit = reading / 57; // all LEDs lit at 1k

기존에 114로 나누는 부분을 114의 절반인 57로 나누도록 바꾸었습니다. 이것은 1K오옴 저항을 고려하여 이렇게 변경한 것입니다. 만약 포토셀이 고정저항과 같이 1K오옴의 저항을 가진다면 아날로그 입력값은 1023/2 = 511이 될 것이며 57로 나누면 9구간이 떨어지게 됩니다. 이 수식은 모든 LED를 켤수 있게 합니다.

  

Comments