아두이노 강좌

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

by 귀욤둥이 posted Feb 24, 2017
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

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

 

목적


  • 아두이노 UNO에 LCD를 장착할수있게 된다.
  • 아두이노로 LCD의 밝기및 색상을 조절할수 있게 된다
  • 원하는 캐릭터를 LCD에 나타낼수있다.
  • 원하는 글과 원하는 기능을 디스플레이에 나타낼수있게 된다.

준비물


  ArduinoUno_r2_front450px-300x210.jpg Arduino Uno R2

 

   400 빵판.jpg 브레드 보드

 

 가변저항(포텐셔미터).jpg 가변저항

 

 

 

 

 

1602lcd.jpg 1602 LCD 패널

 

2.jpgTMP36 온도센서

 

 

 

Moniter


 

1.jpg

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

 

Fritzing


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

 

3.jpg

 

Code


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

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

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

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

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;
  5.  
  6.  

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);