티스토리 뷰
온/습도센서를 이용해 LCD에 온도와 습도를 출력하는 예제를 해보겠습니다.
<그림 1> 온/습도 LCD 출력 모습
온습도센서
아두이노에서 흔히 사용되는 온/습도 센서는 DHT11과 DHT22가 있습니다. 두 제품 특징이 조금 다르지만 일반적으로 DHT22가 더 성능이 좋은 센서라고 할 수 있습니다. DHT11으로도 일상적인 온도를 측정이 가능하기 때문에 저렴한 DHT11이 더 널리 사용됩니다.
<그림 1> DHT11(Blue) vs DHT22(White)
(source: https://learn.adafruit.com/dht/overview)
<표 1> DHT11 vs DHT22
|
DHT11 |
DHT22 |
Power |
3 to 5V power and I/O |
|
Current |
2.5mA max current use during conversion (while requesting data) |
|
Humidity |
Good for 20-80% with 5% accuracy |
Good for 0-100% with 2-5% accuracy |
Temperature |
Good for 0-50°C ±2°C accuracy |
Good for 0-100% with 2-5% accuracy |
Sampling rate |
Once every 1 seconds |
Once every 2 seconds |
Body size |
15.5mm x 12mm x 5.5mm |
15.1mm x 25mm x 7.7mm |
Cost |
Extra low cost |
Low cost |
비교표를 보면 DHT22 쪽이 측정할 수 있는 온/습도 범위가 넓고 측정 오차도 적은 것을 알 수 있습니다. 가격은 DHT11이 더 저렴합니다. (국내 쇼핑몰에서 습도센서를 검색하면 DHT11은 2천원, DHT22는 5천원 정도에 판매되고 있습니다.) 자세한 내용은 아래 Adafruit 홈페이지를 참고 바랍니다.
https://learn.adafruit.com/dht/overview
이번 예제에서는 DHT22센서를 이용하겠습니다.
LCD Display
이번 예제에서는 LCD1602(I2C 제어)를 사용하겠습니다. 1602란 한 줄에 16문자씩 2줄 표현가능하단 뜻입니다. 그리고 I2C 제어란 LCD를 바로 아두이노에 연결하지 않고 I2C 보드를 통해서 아두이노와 연결한다는 의미입니다. LCD를 아두이노와 바로연결할 경우 연결할 핀이 많고 밝기 조절을 위한 가변저항을 따로 달아야 하는 등 불편한 점이 많습니다. I2C 보드에는 밝기 조절용 가변저항도 붙어있고 아두이노와 연결할 핀도 4개 뿐이라 사용이 간편합니다. 가격차이도 크지 않으므로 특별한 목적이 있는 것이 아니라면 I2C가 있는 LCD를 이용하는 것이 좋습니다. 쇼핑몰에서 LCD I2C로 검색하면 아래와 같이 I2C 보드가 붙은 LCD를 구매할 수 있습니다.
<그림 2> LCD1602 I2C Converter
녹색 LCD 판 위의 검은색 보드가 I2C Converter입니다. Converter에는 밝기를 조절할 수 있는 가변저항이 붙어있습니다. (파란색 육면체)
완성된 회로도
<그림 3> 온/습도 LCD 출력 완성 회로도
DHT22 센서는 핀이 4개가 있는데 그 중 하나는 연결할 필요가 없는 핀 입니다. Vcc 옆에 있는 핀이 Signal이니 이핀을 아두이노의 Digital 2번핀과 연결하면 됩니다. 그리고 센서의 Signal과 Vcc가 저항을 사이에 두고 연결된 것을 볼 수 있습니다. Vcc가 Signal과 연결되면 센서에 문제가 생기거나 동작이 안될것이라 걱정될 수 있지만 그렇지 않습니다. 이렇게 연결해야 센서에 Pull Up 전원이 공급되어 제대로 작동합니다.
<그림 4> Adafruit 튜토리얼 DHT 연결 예시
(Source: https://learn.adafruit.com/dht?view=all)
DHT의 핀은 왼쪽부터 VDD, Data(Signal), Null, GND 순서입니다. 3번째 핀은 NULL로 연결할 필요가 없습니다. 가끔 핀이 3개인 센서도 있는데 그럴 경우 센서에 표시된 순서로 연결하시면 됩니다. (순서가 Data(Signal), VDD(+), GND 순서인 센서도 있고 VDD, Data, GND 순서인 센서도 있습니다.
저희는 DHT센서 Signal과 전원 사이에 10kOhm 저항을 이용하도록 하겠습니다. 10kOhm 저항의 띠색깔은 갈-검-주입니다. 띠색으로 저항 값 읽는 법은 아래 링크를 참고 바랍니다.
https://www.petervis.com/electronics/Standard_Resistor_Values/10K.html
LCD는 I2C 보드의 VCC와 GND를 아두이노와 연결한 다음 SCL핀을 아두이노 Analog Input 중 A5에연결하고 SDA핀을 아두이노 A4에 연결하면 완성입니다.
완성된 코드
아래 코드를 사용하기 위해서는 라이브러리를 추가해줘야 합니다. 라이브러리 추가하기 글을 참고 바랍니다.
#include <DHT.h> #define DHTPIN 2 // 습도센서 Signal 선 연결 #define DHTTYPE DHT22 // 습도센서 종류: DHT22 #include <Wire.h> #include <LiquidCrystal_I2C.h> DHT dht(DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd(0x27,16,2); // LCD주소: 0x27 또는 0x3F float hum; // 습도값 저장 변수 float temp; // 온도값 저장 변수 void setup() { Serial.begin(9600); dht.begin(); delay(2000); lcd.init(); lcd.backlight(); lcd.setCursor(2,0); delay(5000); lcd.clear(); } void loop() { hum = dht.readHumidity();//온도값 읽기 temp= dht.readTemperature();//습도값 읽기 Serial.print("HUMIDITY: "); // "HUMIDITY:" 출력 Serial.print(hum,0);// 습도 값 소수점 이하 자리 없음 Serial.print(" %, TEMPERATURE: "); //"%"(습도단위) "TEMPERATURE:" 출력 Serial.print(temp, 1);//온도값은 소수점 이하 1자리까지 표시 Serial.println(" C"); //"C" 온도 단위 표시 lcd.setCursor(0,0); // LCD Cursor 원점 lcd.print("TEMP:"); // LCD에 "temp" 표시 float t = temp; // 온도값을 t에 할당 lcd.print(t,1); // 온도값 LCD로 출력 lcd.print(" C"); // 온도 단위 표시 lcd.setCursor(0,1); //LCD 커서 줄바꿈 lcd.print("HUMIDITY:"); //LCD 2번째 줄에 "humidity:" 출력 int h = hum; //습도값 h에 할당 lcd.print(h); //습도값 LCD에 출력 lcd.print(" % "); //습도 단위 출력 lcd.println(); delay(2000); // 샘플링 간격 2초 }
'아두이노' 카테고리의 다른 글
[아두이노] 스마트폰과 블루투스로 연결하기 (3) | 2018.12.29 |
---|---|
[아두이노] Fritzing으로 아두이노 회로도 그리기 (1) | 2018.12.26 |
[아두이노] 버튼 스위치와 초음파센서로 동작하는 서보모터 (3) | 2018.12.19 |
[아두이노] 인/아웃핀 (1) | 2018.12.18 |
[아두이노] 아두이노란? (1) | 2018.12.17 |
- Total
- Today
- Yesterday
- 습도
- Fading LED
- Arduino
- LED
- Scrum
- agile
- Step Motor
- 시리얼 모니터
- Stepper Motor
- DHT22
- 릴레이
- Solar Panel
- 초음파센서
- 태양광 공유
- 온도
- Potentiometer
- 태양광
- 스크럼
- relay
- Solar Sharing
- Renewable
- 애자일
- dc 모터
- 아두이노
- DC Motor
- dht
- 서보모터
- 4 원칙
- solar
- 코딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |