온습도 센서 이용한 온습도 측정 > IoT 사물인터넷 유무선제어

본문 바로가기

[실습] 온습도 센서 이용한 온습도 측정

필기자
2024-05-20 14:56 654 0

본문

 
ASAIR-DHT22 온습도 센서를 이용한 온습도 측정

목 적
  • 라즈베리파이에 온습도 센서 사용법을 이해한다.
목 차
1. ASAIR-DHT22 온습도 센서 모듈 설치
2. ASAIR-DHT22 온습도 센서 모듈 구동


1. ASAIR-DHT22 온습도 센서 모듈 설치
  • ASAIR-DHT22 온습도 센서
    • ASAIR-DHT22 센서는 온도와 습도를 측정할 수 있는 디지털 센서
    • 높은 정밀도와 안정성을 제공하며, 라즈베리파이와 같은 마이크로컨트롤러와 쉽게 통합할 수 있음.
    • 내장된 디지털 신호 처리 기능으로 온도와 습도 데이터를 정확하게 제공함.
    • 홈 자동화, 날씨 스테이션, 스마트 농업 등 다양한 응용 분야에 사용됨.
    • 기본 사양
      • 전원 공급: 3.3V ~ 5.5V DC
      • 소비 전류: 최대 1.5mA
      • 온도 측정 범위: -40°C ~ 80°C
      • 온도 정확도: ±0.5°C
      • 습도 측정 범위: 0-100% RH
      • 습도 정확도: ±2%
      • 응답 시간:
        • 습도: 5-30초 (63% 응답 기준)
        • 온도: 약 2초
    • GPIO 연결
      • GND  : Ground 접지(핀 14)
      • VCC : 5V Power(핀 2)
      • DATA : GPIO 18(핀 12)
      • NC : 사용하지 않음
    • ASAIR-DHT22 센서와 같은 온습도 센서를 연결할 때 GPIO 18(PCM_CLK)와 GPIO 4(GPCLK0)를 사용하는 이유
      • 두 핀 모두 기본적으로 특정 기능(PCM 클럭 또는 일반 목적 클럭)을 가지고 있지만 기능이 필요하지 않은 경우 일반 GPIO 핀으로 많이 사용됨.
      • 다른 GPIO 핀들의 I2C, SPI, UART 등과 같은 통신 기능을 가지고 있지 않아, 이런 특정 통신 기능과 충돌하지 않음.
    • NC 핀이란
      • NC (Not Connected) 핀은 전자 부품이나 회로에서 사용되지 않는 핀을 의미
    • NC 핀의 목적 및 역할
      • 회로 설계 시 표준화된 핀 배열을 유지하면서 특정 핀을 사용하지 않도록 할 수 있음.
      • 미래의 업그레이드나 다른 버전에서 추가 기능을 위해 남겨둔 핀일 수 있음.
      • 일부 회로에서는 특정 핀이 사용되지 않음으로써 다른 회로에 간섭을 줄일 수 있음.
    • NC 핀을 사용하지 않는 이유
      • NC 핀은 물리적으로 존재하지만, 내부적으로 회로에 연결되지 않았기 때문에 어떤 기능도 수행하지 않음.
      • 회로를 단순하게 유지하기 위해 사용하지 않는 핀은 무시하는 것이 일반적임.
      • NC 핀을 명확하게 구분해두면 다른 핀과 혼동을 피할 수 있음.
20240520142834_08c842066239db41bc29d07f0cc3bf23_4z52.png
20240520142917_08c842066239db41bc29d07f0cc3bf23_fo7b.png


2. ASAIR-DHT22 온습도 센서 모듈 구동
  • 라즈베리파이 가상환경에서 파이썬 코딩
    • VSCode에서 dht22_sensor.py 파일 생성
    • DHT22 센서에서 온도와 습도 데이터를 읽어 주기적으로 출력하는 코드 실습


#adafruit-circuitpython-dht 라이브러리 설치
pip install adafruit-circuitpython-dht



import time
import board
import adafruit_dht
# DHT22 센서 설정 (GPIO 18)
dht_device = adafruit_dht.DHT22(board.D18)
while True:
    try:
        # 센서에서 온도와 습도 읽기
        temperature = dht_device.temperature
        humidity = dht_device.humidity
        # 데이터 출력
        if humidity is not None and temperature is not None:
            print(f'온도: {temperature:.1f}°C')
            print(f'습도: {humidity:.1f}%')
        else:
            print('읽기 실패. 데이터가 없습니다.')
    except RuntimeError as error:
        # 센서에서 데이터를 읽는 중 오류 발생 처리
        print(error.args[0])
   
    except Exception as error:
        dht_device.exit()
        raise error
    # 10초 동안 대기
    time.sleep(10)
  • 10초 대기 시간을 갖는 이유
    • DHT22 센서의 제한 사항으로 인해 최소 2초의 간격을 두고 데이터를 요청해야 하며, 너무 자주 데이터를 요청하면 센서가 정확한 값을 제공하지 못함.
    • 자주 데이터를 요청하면 전력 소비가 증가함으로, 10초 간격으로 데이터를 요청함으로써 전력 소비를 줄일 수 있음.
    • 온도와 습도는 일반적으로 빠르게 변하지 않으므로, 10초 간격으로 데이터를 요청하면 실시간 모니터링에 충분히 적절한 데이터를 얻을 수 있음.
 


 

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색