-
온습도 센서( DHT11) 제어하기라즈베리파이 2024. 1. 3. 23:15
이번에 온습도 센서 제어를 위해 사용할 부품은 DHT11이다.
DHT11은 VCC(3.3V), GND, GPIO 핀을 각각 연결해서 일정한 계산을 통해 온습도의 값을 얻을 수 있는 센서이다.
DHT11은 생김새랑 성능은 밑을 참고하자.
DHT11을 사용하기위해 먼저 WiringPi를 포함한 나머지 헤더파일들을 입력해준다.
그리고 data[5]라는 데이터 저장용 변수 배열을 선언해준다.
Uint8_t 의 경우 1byte를 가지며, 255의 숫자를 max값으로 쓰기위해 laststate같은 변수를 선언해준다.
그리고 DHT11에서 오는 신호를 검출 및 데이터 비트를 추출한다.
동작을 구현해보면 화면에 Humidity(습도) Temperature(온도)가 소수점 한자리 까지 2초마다 출력값을 낸다.
그리고 정확하지 않을때는 data not good, skip이라고 뜬다. 아무래도 정확한 부품이 아니다보니 오류도 있고 주변사항에 따라 오류가 자주 뜨게 된다.
근데 해본결과 습도는 너무 오류가 많이 뜨게 되므로 습도는 제외하고 온도로만 실습을 할것이다.
**LED를 이용해서 온도가 25도 이상이면 LED가 켜지고, 25도 미만이면 LED가 꺼지게 진행해 볼거다.위의 코드랑 똑같은데 LED를 사용해야하므로 LED를 사용한 gpio를 추가해야한다.
그리고 여기도 똑같이 위에랑 같은데 LED사용하므로 LED 입력모드를 추가해야한다.
그리고 나머지도 똑같이 이용되지만
이 부분에서 온도가 25이상일 때 LED가 켜저야하므로 if문을 써서 온도값을 설정해야한다. 그리고 25이하일 때는 꺼져야하므로 else를 통해 꺼지게 설정을 하였다.
**LED 2개를 이용해서 25도 미만이면 첫 번째 LED가 켜지고, 25도 이상이면 두번째 LED가 켜지도록 진행해 볼거다.
이번에는 LED를 2개를 이용하니깐 2개를 선언해야한다. 물론 나머지 부분도 같게 하면 된다.
위에 실습가 비슷하게 if 문을 써서 25이상이면 1번 LED가 켜지게 하고 else를 이용해 25도 이상이 아닌 온도들은 2번 LED가 켜지게 설정했다.
**LED 3개를 이용해서 온도가 20도 이하일때 첫 번째 LED가 켜지고, 21도에서 27도 일 때 두 번째 LED가 켜지고 , 28도 이상일 때 세번째 LED가 켜지도록 진행해 볼것이다.
LED가 3개이므로 위랑 똑같이 추가해주면 된다.
이번에는 조건이 3개이므로 if else만 쓰기에는 부족해서 else if를 사용해 조건이 3개를 충족하게 할거다. 물론 다른 방법으로 if를 3번 써도 되는데 가독성이 떨어지므로 else if나 case문을 사용하면 편하게 된다.
여기서 주의해야 할것은 범위 설정도 중요하지만 특정 LED가 켜지는 범위에 다른 LED들은 켜지지 않게 설정하는게 포인트인다. 이런걸 통해서 특정 LED를 동시에 키거나 끄게 할 수 있다.
'라즈베리파이' 카테고리의 다른 글
초음파센서 제어 (0) 2024.01.12 서보모터(Servo motor) 제어 (2) 2024.01.10 7-segment, pwm 제어 (0) 2023.12.20 sw 제어하기 (0) 2023.12.12 LED제어하기 (0) 2023.12.11