Датчик DHT11 является самым дешевым цифровым датчиком, позволяющий измерять температуру и влажность окружающей среды. Датчик стоит порядка 100 рублей и у него есть старший брат под именем DHT-22, но сегодня речь пройдет про DHT-11.
Технические характеристики:
Предел измерения температур: 0-50°С (±2°С)
Предел измерения влажности: 20-80% ( ±5%)
Напряжение питания: 3-5,5V
Энергопотребление:
Измерение: 0,5-2,5мА
Передача данных: 0,2-1мА
Ожидание: 0,1-0,15 мА
Опрос датчика с частотой не чаще 1 раз в секунду
Для связи с контроллером используется однопроводная шина с открытым коллектором, поэтому обязательна подтяжка резистором 5-10кОм к плюсу питания. На всякий случай ниже в архиве прикрепил схему подключения, для тех кто еще слаб в схемотехнике.
Программа для работы с датчиком DHT11 в Bascom-AVR приведена ниже:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 8
$framesize = 16
Config Lcdpin = Pin , Rs = Portc.0 , E = Portb.5 , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.0
Config Lcd = 16 * 4
Config Portb.1 = Output
Portb.1 = 1
Cls
Cursor Off
Declare Sub Get_th(t As Byte , H As Byte)
Config Serialin = Buffered , Size = 128
Config Serialout = Buffered , Size = 128
Dht_put Alias Portd.0
Dht_get Alias Pind.0
Dht_io_set Alias Ddrd.0
Dim T As Byte
Dim H As Byte
Dim Crc As Byte
Dim Mybyte As Byte
Dim Sensor_data As String * 40
Dim Tmp_str8 As String * 8
Dim Count As Byte
Enable Interrupts
Set Dht_io_set
Set Dht_put
Lcd " cxema21.ru"
Lowerline
Lcd " like to post ;)"
Do
Waitms 1500
Call Get_th(t , H)
Cls
Lcd "TMP: " ; T ; "C"
Lowerline
Lcd "PHP: " ; H ; "%"
Loop
Sub Get_th(t As Byte , H As Byte)
Count = 0
Sensor_data = ""
Set Dht_io_set
Reset Dht_put
Waitms 25
Set Dht_put
Waitus 40
Reset Dht_io_set
Waitus 40
If Dht_get = 1 Then
H = 1
Exit Sub
End If
Waitus 80
If Dht_get = 0 Then
H = 2
Exit Sub
End If
While Dht_get = 1 : Wend
Do
While Dht_get = 0 : Wend
Waitus 30
If Dht_get = 1 Then
Sensor_data = Sensor_data + "1"
While Dht_get = 1 : Wend
Else
Sensor_data = Sensor_data + "0"
End If
Incr Count
Loop Until Count = 40
Set Dht_io_set
Set Dht_put
Tmp_str8 = Left(sensor_data , 8)
H = Binval(tmp_str8)
Tmp_str8 = Mid(sensor_data , 17 , 8)
T = Binval(tmp_str8)
Tmp_str8 = Right(sensor_data , 8)
Crc = Binval(tmp_str8)
Mybyte = T + H
If Mybyte <> Crc Then
H = 3
End If
End Sub
Датчик подключен к микроконтроллеру к выводу PortD.0, и выводит на дисплей целые части температуры и влажности. Схему подключения не привожу, так как думаю все ясно из кода выше. Результат:
Датчик цепляется к порту PD0 микроконтроллера, как уже писал не забудьте подтянуть шину данных к плюсу питания резистором. Если есть какие то вопросы или у вас не заработал проект - пишите, постараемся помочь!
Видео работы:
...по материалам сайта avrproject.ru.
Скачать файлы проекта (~150кб.)
|