안녕하세요 땜블리 입니다.
라즈베리파이 피코 베이직 트레이닝 보드를 이용한 DHT11 제어실습을 진행 하겠습니다.
베이직 트레이닝 보드는 아래에서 확인이 가능합니다.
1) DHT11 제어 구동 원리
(1) 동작설명
DHT11 모양 및 구성
DHT11은 4핀으로 되어있으며 사용하는 핀은 3개입니다.
스팩은 3.3V~5.5V까지 사용할 수 있으며 습도 범위는 5~95%RH 온도는 –20~60도 측정됩니다
통신 방식은 1-wired 통신으로 신호핀 하나로 출력과 입력을 모두 사용하는 방식입니다.
MCU에서는 18ms의 Trigger 신호를 Ative Low 로 출력하게 되면 보내주시면 이후부터는 40bit의 데이터가 입력이 됩니다.
입력되는 신호의 0과 1의 구분은 Pulse width로 결정을 합니다. 1개의 구형파 주기에서 high 구간이 26~28 us라면 0으로 인식하고 70us라면 1로 인식합니다.
아래 표는 40bit에 대한 Packet 구조
습도 센싱 원리
습도 감지 구성 요소에는 수분 보유 기판이 사이에 끼인 두 개의 전극이 있습니다.
이온은 수증기가 기판에 흡수됨에 따라 기판에서 방출되며, 이는 다시 전극 사이의 전도도를 증가시킵니다.
두 전극 사이의 저항 변화는 상대 습도에 비례합니다.
상대 습도가 높으면 전극 사이의 저항이 감소하고 상대 습도가 낮으면 전극 사이의 저항이 증가합니다.
온도 측정 원리
DHT11에는 온도를 측정하기 위한 NTC/서미스터도 포함되어 있습니다. 서미스터는 온도에 따라 저항이 크게 변하는 열 저항기입니다. "NTC"라는 용어는 "음의 온도 계수"를 의미하며 온도가 증가함에 따라 저항이 감소한다는 의미입니다.
2) DHT11 센서의 온도/습도 제어
(1) 동작설명
dht 모듈의 함수를 사용하여 온습도 값을 가져와 UART로 출력 합니다.
(2) 코드작성
dht.py
import sys
if sys.platform.startswith("esp"):
from esp import dht_readinto
elif sys.platform == "mimxrt":
from mimxrt import dht_readinto
elif sys.platform == "rp2":
from rp2 import dht_readinto
elif sys.platform == "pyboard":
from pyb import dht_readinto
else:
from machine import dht_readinto
class DHTBase:
def __init__(self, pin):
self.pin = pin
self.buf = bytearray(5)
def measure(self):
buf = self.buf
dht_readinto(self.pin, buf)
if (buf[0] + buf[1] + buf[2] + buf[3]) & 0xFF != buf[4]:
raise Exception("checksum error")
class DHT11(DHTBase):
def humidity(self):
return self.buf[0]
def temperature(self):
return self.buf[2]
class DHT22(DHTBase):
def humidity(self):
return (self.buf[0] << 8 | self.buf[1]) * 0.1
def temperature(self):
t = ((self.buf[2] & 0x7F) << 8 | self.buf[3]) * 0.1
if self.buf[2] & 0x80:
t = -t
return t
main.py
import th
th.py
from machine import UART, Pin
from time import sleep
import dht
led1 = Pin(2,Pin.OUT)
led2 = Pin(3,Pin.OUT)
led1.value(1)
led2.value(1)
dhtIn = Pin(7,Pin.IN) # 온/습도 센서 설정
dhtOut = dht.DHT11(dhtIn)# 온/습도 센서 설정
while True:
led1.value(0)
dhtOut.measure()
temp = dhtOut.temperature()
humi = dhtOut.humidity()
print('Temperature = {}C Humidity = {}%'.format(temp,humi))
led1.value(1)
sleep(1)
(3) 동작결과
3) 설정 온도/습도에 따른 릴레이 제어
(1) 동작설명
온도가 28도가 넘어가면 릴레이가 동작 됩니다.
(2) 코드작성
dht.py
상단 코드 참조
main.py
import th_Relay
th_Relay.py
from machine import UART, Pin
from time import sleep
import dht
led1 = Pin(2,Pin.OUT)
led2 = Pin(3,Pin.OUT)
led1.value(1)
led2.value(1)
relay = Pin(12,Pin.OUT)#릴레이 설정
dhtIn = Pin(7,Pin.IN) # 온/습도 센서 설정
dhtOut = dht.DHT11(dhtIn)# 온/습도 센서 설정
uart0 = UART(0, baudrate=115200, bits=8, parity=None, stop=1, tx=Pin(16), rx=Pin(17))# UART 설정
uart0.write("pico sensorBoard Test\n")
relayState=0
while True:
led1.value(0)
dhtOut.measure()
temp = dhtOut.temperature()
humi = dhtOut.humidity()
print('Temperature = {}C Humidity = {}%'.format(temp,humi))
print('RELAY STATE = {}\n'.format(relayState))
if temp >=28:
relay.off() #relay on
relayState=1
else:
relay.on() #relay off
relayState=0
led1.value(1)
sleep(1)
(3) 동작결과
'라즈베리파이_피코_피코 W > 마이크로파이썬' 카테고리의 다른 글
11. 라즈베리파이 피코 블루투스/SDCARD (2) | 2023.03.05 |
---|---|
10. 라즈베리파이 피코 OLED제어 (2) | 2023.03.04 |
08. 라즈베리파이 피코 릴레이제어 (0) | 2023.03.02 |
07.라즈베리파이 피코 WS2812 (0) | 2023.03.01 |
06. 라즈베리파이 피코 PWM제어 (0) | 2023.02.28 |
댓글