[기초전자실습] 온도(LM35), 온습도(DHT22)센서와 아두이노메가 2560 사용
아두이노를 활용하여 온도, 온도/습도를 측정할 수 있는 방법에 대해서 소개하려고 한다.
1. 아두이노 라이브러리
[첨부(Attachment)]
https://github.com/adafruit/DHT-sensor-library
[DHT11 버전]
[DHT 통합버전(DHT11, DHT22 등)]
2. 하드웨어
번호 |
구분 |
항목명 |
비고 |
1 |
센서(Sensor) |
온도센서 |
|
2 |
센서(Sensor) |
DHT11(습도, 온도 센서) || DHT22 |
|
3 |
보드(Board) |
아두이노 메가 2560 |
|
[DHT-11, DHT-22 특징]
항목명 |
DHT-11 |
DHT-22 |
온도 측정 범위 |
0~50℃ |
-40~80℃ |
온도 측정 오차 |
2℃ |
0.5℃ |
습도 측정 범위 |
20~80% |
0~100% |
습도 측정 오차 |
5% |
2% |
측정 간격 |
1초 |
2초 |
[LM35 특징]
번호 |
구분 |
영어(문장) |
한글 |
1 |
특징(Features) |
Calibrated Directly in Celsius (Centigrade) |
직접 섭씨(중앙)로 보정됨 |
2 |
특징(Features) |
Linear + 10-mV/°C Scale Factor |
선형(리너) + 10mV/°C 스케일 팩터 |
3 |
특징(Features) |
0.5°C Ensured Accuracy (at 25°C) |
0.5°C의 정확성 보장(25°C) |
4 |
특징(Features) |
Rated for Full −55°C to 150°C Range |
전체 -55°C~150°C 범위에 대해 등급 설정 |
5 |
특징(Features) |
Suitable for Remote Applications |
원격 애플리케이션에 적합 |
6 |
특징(Features) |
Low-Cost Due to Wafer-Level Trimming |
웨이퍼 레벨 트리밍으로 인한 저비용 |
7 |
특징(Features) |
Operates From 4 V to 30 V |
4V ~ 30V 작동 |
8 |
특징(Features) |
Less Than 60-μA Current Drain |
60μA 미만의 전류 방전 |
9 |
특징(Features) |
Low Self-Heating, 0.08°C in Still Air |
낮은 자체 가열, 정지 공기 중 0.08°C |
10 |
특징(Features) |
Non-Linearity Only ±¼°C Typical |
비선형성만 ±1⁄4°C 일반 |
11 |
특징(Features) |
Low-Impedance Output, 0.1 Ω for 1-mA Load |
저임피던스 출력, 1mA 로드의 경우 0.1Ω |
12 |
적용(Applications) |
Power Supplies |
전원 공급류 |
13 |
적용(Applications) |
Battery Management |
베터리 관리 |
14 |
적용(Applications) |
HVAC |
|
15 |
적용(Applications) |
Appliance |
가전 |
3. 소스코드
#include <DHT11.h>
const int temperaturePin = 0;
const int DHTPIN = 2;
#define DHTTYPE DHT11
DHT11 dht11(DHTPIN);
float dht_temperature;
float dht_humidity;
void setup() {
Serial.begin(9600); //시리얼 통신속도 설정
}
void loop() {
char type = NULL;
int reading = analogRead(temperaturePin); // LM35 센서값 읽어오기
printTemperatureHumidity();
Serial.print((5.0*reading*100.0)/1024.0); // LM35 센서
Serial.print(",");
Serial.print( dht_temperature );
Serial.print(",");
Serial.print( dht_humidity );
Serial.print("%");
delay(1000); // 측정 간격 설정 (1000 = 1초)
}
void printTemperatureHumidity(){
int err;
if (err = dht11.read(dht_humidity, dht_temperature) == 0 ) {
dht_temperature = dht_temperature + 28; // 보정값
}else{
Serial.println("Failed to read from DHT sensor!");
return;
}
}
소스코드(DHT11)
#define DHTPIN 2 // DHT핀 (DATA핀 - 디지털 포트로 구성)
#define DHTTYPE DHT11 // DHT타입을 DHT11 DHT22,
DHT dht(DHTPIN, DHTTYPE); // DHT설정 - dht (디지털 포트번호, dht11)
void setup() {
Serial.begin(9600); // 9600 속도로 시리얼 통신을 시작한다
}
void loop() {
delay(2000);
int h = dht.readHumidity(); // 변수 h에 습도 값을 저장
int t = dht.readTemperature(); // 변수 t에 온도 값을 저장
Serial.print("Humidity: "); // 문자열 Humidity: 를 출력한다.
Serial.print(h); // 변수 h(습도)를 출력한다.
Serial.print("%\t"); // %를 출력한다
Serial.print("Temperature: "); // 이하생략
Serial.print(t);
Serial.println(" C");
}
소스코드(통합 DHT)
4. 참고자료(Reference)
1. Arduino Playground - DHT11Lib, Last Modified , Accessed by 2018-08-14, http://playground.arduino.cc/main/DHT11Lib
2. adafruit/DHT-sensor-library: Arduino library for DHT11DHT22, etc, Temp & Humidity Sensors, Last Modified , Accessed by 2018-08-14, https://github.com/adafruit/DHT-sensor-library
3. DHT11, DHT22 and AM2302 Sensors - Adafruit, Last Modified , Accessed by 2018-08-14, https://cdn-learn.adafruit.com/downloads/pdf/dht.pdf
4. LM35 Precision Centigrade Temperature Sensors datasheet (Rev. H), Last Modified , Accessed by 2018-08-14, www.ti.com/lit/ds/symlink/lm35.pdf
'마이크로프로세서 > 논리회로 및 전자(인터페이싱)' 카테고리의 다른 글
[전자부품관리] 효율적이고 체계적인 부품 관리 (2) | 2018.08.12 |
---|---|
[기초전자실습] Lub(Lubuntu) 18.04 - 아두이노 센서 구현하기 (2) | 2018.08.12 |
[기초전자실습] 사운드카드를 활용한 오실로스코프 프로브 구현 (2) | 2018.08.11 |
[(기초전자실습)] 멀티미터(아날로그, 디지털)를 활용한 7세그먼트(Anode) LED (1) | 2018.08.11 |
[임베디드(Embedded)] 아두이노 메가 2560, 우노 R3 - LCD 2004A + I2C 동작 (1) | 2018.08.11 |