Пятница, 19.04.2024, 16:08 Приветствую Вас Гость

Автозапуск за 1500р. на ЛЮБОЙ сигнализации?! -> at13.ru

Главная | Регистрация | Вход | RSS

Каталог статей


Термометр с датчиком влажности на ATmega8

Датчик 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кб.)

 

Категория: Измерительные устройства | Добавил: Адвансед6476 (16.03.2015)
Просмотров: 4688 | Комментарии: 1 | Рейтинг: 4.0/2
Всего комментариев: 1
1 trenir  
здравсвуйте, у меня температура выводит 0, а влажность 1%
при каком случае выдаются такие значения

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Источники питания и приборы
Охрана и контроль доступа
Измерительные устройства
Часы, таймеры, счетчики
Световые эффекты
Защита и контроль
Для начинающих
Разное
BASCOM AVR
Информация по МК, FAQ
Поиск
Вход на сайт
Наш опрос
При последовательном соединении резисторов их сопротивление
Всего ответов: 142
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Друзья сайта