[아두이노 강좌] 12. LCD에 온도 및 조도 표시하기

본 게시물에서는 강좌 11에서 연결한 LCD를 이용하여 온도와 조도를 LCD에 디스플레이 시켜 보도록 하겠습니다.
overview.jpg

조도는 이전 강좌9에서 사용하였던 포토셀을 이용합니다. 온도를 측정하기 위해서 TMP36 온도 센서를 이용합니다. 이 온도센서는 3개의 리드선을 가지고 있으며 그중 두개는 각각 5V, GND연결에 사용되고 나머지 한개는 온도출력으로 아두이노의 아날로그 입력에 연결되게 됩니다.

<TMP36 온도센서>

브레드보드 레이아웃

이전 강좌 11에서 사용하였던 레이아웃입니다. 아래와 같이 브레드보드를 셋업하세요.

fritzing.jpg

포토셀과 1k오옴 저항, TMP36은 새롭게 브레드보드에 추가되었습니다. TMP36은 평평한 쪽을 아두이노를 바라보게 연결해야 합니다.

아두이노 코드

아래의 스케치 코드를 아두이노에 업로드하고 손가락을 센서에 갖다 대어서 온도를 올려 보십시오. 디스플레이에 온도가 올라가는 것을 확인 할 수 있을 것입니다. 비슷하게 포토셀 앞에서 손을 흔들어 빛을 가리면 조도 역시 변경되는 것을 확인 수 있습니다.

  1. #include <LiquidCrystal.h>
  2. int tempPin = 0;
  3. int lightPin = 1;
  4. // BS E D4 D5 D6 D7
  5. LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
  6. void setup()
  7. {
  8. lcd.begin(16, 2);
  9. }
  10. void loop()
  11. {
  12. // Display Temperature in C
  13. int tempReading = analogRead(tempPin);
  14. float tempVolts = tempReading * 5.0 / 1024.0;
  15. float tempC = (tempVolts - 0.5) * 100.0;
  16. float tempF = tempC * 9.0 / 5.0 + 32.0;
  17. // ----------------
  18. lcd.print("Temp F ");
  19. lcd.setCursor(6, 0);
  20. lcd.print(tempF);
  21. // Display Light on second row
  22. int lightReading = analogRead(lightPin);
  23. lcd.setCursor(0, 1);
  24. // ----------------
  25. lcd.print("Light ");
  26. lcd.setCursor(6, 1);
  27. lcd.print(lightReading);
  28. delay(500);
  29. }

아래와 같이 lcd()함수에 주석을 붙여 알아보기 쉽게 하였습니다.

  1. // BS E D4 D5 D6 D7
  2. LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

loop함수에서는 두개의 흥미있는 부분이 있는데, 첫번째로 온도센서로부터 나오는 아날로그 값을 실제 온도로 변환하여 는 부분이며, 두번째로는 그것을 디스플레이 하는 부분입니다. 먼저 온도를 계산하는 부분을 살펴보도록 하겠습니다.

  1. int tempReading = analogRead(tempPin);
  2. float tempVolts = tempReading * 5.0 / 1024.0;
  3. float tempC = (tempVolts - 0.5) * 100.0;
  4. float tempF = tempC * 9.0 / 5.0 + 32.0;

analogRead()함수에 의해 읽혀진 0~1023의 값(tempPin 아날로그 입력)은 0~5V의 값을 구하기 위해 5를 곱한 후 1024로 나누게 됩니다.

TMP36에서 오는 전압을 온도(C)로 변환하기 위해 0.5V를 측정값에서 뺀뒤 100을 곱합니다. 참고: TMP36의 데이터 쉬트를 보면 25도에서 750mV의 전압출력은 낸다고 적혀 있으며, 전압출력은 온도에 linear( 1도당 10mV)합니다.

Fahrenheit온도로 계산하기 해서는 9/5를 곱한후 32를 더합니다.

계속 변하는 숫자를 LCD에 디스플레이할 때는 이전에 쓰여졌던 숫자가 이후에도 남아있는 것을 방지하기 위해 전체 LCD화면을 다시 써주게 들어야 합니다.

  1. // ----------------
  2. lcd.print("Temp F ");
  3. lcd.setCursor(6, 0);
  4. lcd.print(tempF);

Comments