실습은 개인 학습을 위해 "주) 엘케이 임베디드" 사이트에서 구매한 아두이노 코딩 배우기 고급 키트를 이용한 학습입니다. 동봉된 책을 기반으로 학습하면서 개인적인 궁금증과 추가 필요한 부분을 정리한 블로그임을 미리 알려드립니다.
< 준비물 >
아두이노 우노 : 1개
USB 케이블 : 1개
점퍼 케이블(숫숫) : 3개
브레드 보드 : 1개, 830홀 사용
온습도 센서 모듈 : 1개
이번 실습 연결도 및 회로도입니다. 참조하세요
< 참고 지식 >
⦿ 온습도 센서 모듈 동작원리(DHT-11, DHT-22)
- 동작원리(습도): 비교적 저가인 저항 감지 방식을 이용 주 전극 사이에 공기 중의 수분을 통해 아부 미세하게 전류가 흐르게 되는 원리를.
이용 전기가 많이 흐르면 습도가 높은것이고 작게 흐르면 습도가 낮은 것을 이용 습도를 측정함
- 동작원리(온도): 물질의 저항 값이 온도에 따라 변화되는 성질을 이용한 것
- 아래 특성에서 알수 있지만 DHT-22가 정확도 및 측정 범위 등에서 성능이 유수하고 가격이 고가임
⦿ 온습도 센서 모듈 특성(DHT-11, DHT-22)
- 동작 전압 : 3.3V ~ 5.5V
- 온도 측정 범위 = DHT-11 : 0℃ ~ 50℃ / DHT-22 : -40℃ ~ 80℃
- 온도 측정 분해도 = DHT-11 : 1℃ / DHT-22 : 0.1℃
- 온도 측정 정밀도 = DHT-11 : ± 2℃ / DHT-22 : ± 0.5℃
- 습도 측정 범위 = DHT-11 : 20% ~ 90℃ RH / DHT-22 : 0% ~ 100% RH ✼ RH: 상대 습도
- 습도 측정 분해도 = DHT-11 : 1% RH / DHT-22 : 0.1% RH
- 습도 측정 정밀도 = DHT-11 : ± 2% RH / DHT-22 : ± 0.5% RH
< 실습 코드 >
#include <Wire.h>
char HUMI_Sensor = 3; //A0에 센서연결
byte dht11_dat[5]; //센서변수
byte dht11_in; //센서변수
byte i;
byte read_dht11_dat() //습온센서값 읽어오는 함수
{
byte i = 0; //for문 변수
byte result = 0; //리턴변수
for (i = 0; i < 8; i++) //for문 9번 반복
{
while (!digitalRead(HUMI_Sensor)); //센서값이 1이 될때까지 무한루프
delayMicroseconds(30); //30마이크로세크 대기
if (digitalRead(HUMI_Sensor) != 0 ) //만약 샌서값이 0과 같지 않으면
bitSet(result, 7 - i); //bitSet(n,x) n이라는 변수에 x번째의 비트를 on한다
while (digitalRead(HUMI_Sensor)); //센서값이 0이 될때까지 무한루프
}
return result; //result의 값을 리턴한다.
}
void setup()
{
Serial.begin(9600);
pinMode(HUMI_Sensor, OUTPUT); //센서핀을 출력으로 설정한다.
digitalWrite(HUMI_Sensor, HIGH); //센서에 출력을 넣는다
}
void loop()
{
digitalWrite(HUMI_Sensor, LOW);//센서핀을 off한다
delay(18); //18ms만큼 지연
digitalWrite(HUMI_Sensor, HIGH);//센서핀을 on한다
delayMicroseconds(5); //5us만큼 지연
pinMode(HUMI_Sensor, INPUT); //센서핀을 입력으로 설정한다
delayMicroseconds(200); //200us만큼 지연
for (i = 0; i < 5; i++) {
dht11_dat[i] = read_dht11_dat();
}
//40bit의 데이터를 수신 자세한 사항은 DHT11의 데이터시트를 참고
pinMode(HUMI_Sensor, OUTPUT); //센서핀을 출력으로 설정한다
digitalWrite(HUMI_Sensor, HIGH); //센서에 출력을 넣는다
byte dht11_check_sum = dht11_dat[0] + dht11_dat[2]; // check check_sum
Serial.print(dht11_dat[0], DEC); // LCD에 습도값 출력
Serial.println('%'); // LCD에 % 출력
Serial.print(dht11_dat[2], DEC); // LCD에 온도값 출력
Serial.println('c'); // LCD에 C 출력
delay(2000); //2초간 지연
}
'Arduino > Arduinio기초 실습' 카테고리의 다른 글
15장. RTC 시계 모듈 실습 (0) | 2022.04.11 |
---|---|
13장. 소리 센서 모듈 실습 (0) | 2022.04.11 |
12장. 키 매트릭스, 수동 부저 실습 (0) | 2022.04.11 |
11장. 수위 센서, 3색 LED 모듈 실습 (0) | 2022.04.10 |
10장. 초음파 센서 모듈 실습 (0) | 2022.04.08 |