Views: 2430 На плате ch-4000 очень легко собрать устройство регулятора температуры и влажности. Датчик DHT11 самый недорогой вариант для создания такого устройства, правда точность его не велика, но для бытовых устройств он даже неплох. Сразу перейдем к схеме регулятора Печатную плату ch-4000 её на сегодня (05/16) еще можно приобрести в Вороне http://voron.ua/catalog/017464 . Никаких особенностей в …
Читать далее ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302
Метка:DHT11
Библиотека для датчика DHT11 — v2.1
Views: 49Библиотека v 2.1 исправлена работа шины при отсутствии датчика, только для датчика DHT11
Библиотека для датчика DHT11
Views: 3722
Библиотека предназначена для микроконтроллеров 8 битной серии (но может с некоторыми изменениями использоваться и на 16 разрядных контроллерах) состоит всего из двух функций.
initDHT11 (); для инициализации таймера 0 микроконтроллера и настройки прерываний.
puscDHT11 (); для запуска процесса чтения данных с датчика.
Особенность библиотеки в том что при чтении данных она не тормозит, работу основного цикла программы, все чтение данных выполняется в процессе прерываний.
Для запуска библиотеки в работу необходимо выполнить следующие действия: Для определения длительности импульса, используется таймер 0 микроконтроллера, для этого в файле HDT11.с в функции initDHT11, надо OPTION_REGbits.PS = 2; подобрать коэффициент предделителя, чтобы на вход поступала тактовая 1Мгц.
Описание по работе и подключению датчика читайте в разделе DHT11 – Датчик влажности и температуры.
Флаг DATAYES устанавливается в 1 когда данные получены. После чтения данных его надо сбросить. Для запуска чтения данных надо вызвать функцию puscDHT11 (); (флаг DATAYES должен быть предварительно сброшен). Данные влажности считываем с переменной bait0, данные температуры с переменно bait2. Флаги ошибок: ERROR_DHT11 – если флаг установлен, нет ответа от датчика (обрыв линии связи, повреждение датчика), ERROR_CS – если флаг установлен, ошибка контрольной суммы, часто связано с длинными линиями связи. Обычно устраняется уменьшением подтягивающего резистора до 1 кОм. Сбрасываються флаги автоматически при вызове функции puscDHT11 ().
Ниже приведена библиотека и пример реализации на микроконтроллере PIC16F1936, датчик подключен к порту RB3. Данные передаются на USART.
Файлы для загрузки
Библиотека и демонстрационный пример работы, MPLAB® X IDE, MPLAB® XC8 Compiler
Библиотека для датчика DHT11 151.08 KB 71 downloads
Библиотека для датчика DHT11. v1.0 ...Библиотека v 2.0 улучшенная обработка, только для датчика DHT11 MPLAB® X IDE, MPLAB® XC8 Compiler
Библиотека для датчика DHT11 - v2.0 3.68 KB 637 downloads
Библиотека для датчика DHT11 - v2.0 ...Библиотека v 2.1 исправлена работа шины при отсутствии датчика, только для датчика DHT11 MPLAB® X IDE, MPLAB® XC8 Compiler
Библиотека для датчика DHT11 — v2.1 3.51 KB 489 downloads
Библиотека v 2.1 исправлена работа шины при отсутствии...Библиотека v 3.0 датчики DHT11/DHT22/AM2302 MPLAB® X IDE, MPLAB® XC8 Compiler
Библиотека - измерение температуры и влажности v 3.0 датчики DHT11/DHT22/AM2302 4.36 KB 732 downloads
Библиотека предназначена для использования...Это может быть интересно
- Moving average – скользящее среднееViews: 2251 Скользящая средняя, скользящее среднее (англ. moving average, MA) — общее название для семейства функций, значения которых в каждой точке определения равны среднему значению исходной функции за предыдущий период. Скользящие средние обычно используются с данными временных рядов для сглаживания …
- Датчик контроля протечки воды ch-c0020Views: 1947 Как здорово летом под теплым дождем с тобою вдвоем оказаться. Как классно по лужам бежать босиком, с тобою играть и смеяться! Но совсем грустно оказаться под таким дождем, который течет с …
- Development Boards PIC18F47Q84Views: 3945 Microchip тішить новими мікроконтролерами. Особливістю цього MCU – це багата інтелектуальна периферія, що дозволяє вирішувати такі завдання на 8 бітних MCU, які неможливо реалізувати на деяких навіть 32 …
- Четырех канальный терморегулятор ch-4000Views: 3176 Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать …
- Проект с использованием MCC часть 13Views: 1071 Так как используя MCC мы можем его использовать со своими библиотеками, поэтому настало время и свое создать. Для начала откроем наш заголовочный файл в нем очень много букв: По …
- Проект с использованием MCC часть 15Views: 1539 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …
- Счетчики посетителейViews: 1258 Вас сосчитали!? или счетчики посетителей. Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …
- LCD драйвер – UC1601sViews: 1591 http://svetomuzyka.narod.ru/project/UC1601s.html Читайте обновление на http://catcatcat.d-lan.dp.ua/?page_id=178 В данный момент можно приобрести в ООО “Гамма” несколько типов индикаторов на драйвере UC1601s. RDX0048-GC, RDX0077-GS, RDX0154-GC и RDX0120-GC выполнены по технологии COG.
- Модуль CAN в микроконтроллерах PIC18Views: 5757 Введение CAN последовательный интерфейс связи, который эффективно поддерживает распределенное управление в реальном масштабе времени с высокой помехозащищенностью. Протокол связи полностью определен Robert Bosch GmbH, в спецификации требований …
- ESP32-первое знакомствоViews: 6582 Музыкальная тема к статье, слушаем: Настало время познакомиться c ESP32 и для меня, для этого я приобрел в ГАММЕ отладочную плату с модулем ESP-WROOM-32 (ESP32-DevKitC). Первая задача, как …
DHT11 – Датчик влажности и температуры
Views: 2052
Измерение температуры и влажности при помощи датчика DHT11.
Статья в PDF [wpdm_file id=220]
DHT11 недорогой цифровой датчик температуры и влажности. Он использует емкостной датчик влажности и терморезистор для измерения температуры окружающего воздуха, данные выдает в цифровой форме по шине типа 1-wire. В использовании он довольно прост, но требует точного определения длительности временных сигналов, чтобы декодировать данные. Единственный недостаток это возможность получения данных не чаще 1 раза в две секунды.
Особенности.
· Температурная компенсация во всем диапазоне работы
· Измерение относительной влажности и температуры
· Калиброванный цифровой сигнал
· Отличная долгосрочная стабильность показаний
· Не требуются дополнительные компоненты
· Возможность передачи данных на большое растояние
· Низкое энергопотребление
· 4-контактный корпус и полностью взаимозаменяемы
Детали.
Для преобразования данных внутри датчика используется 8-битный микроконтроллер, В процессе производства датчики калибруются и калибровочная константа записывается вместе с программой в память микроконтроллера. Однопроводный последовательный интерфейс дает возможность быстрой интеграции в устройство. Его небольшие размеры, низкое энергопотребление и до-20-метром передачи сигнала, что делает его привлекательным выбором для различных приложений.
Диапазон измеряемых параметров.
Обзор:
Параметр | Диапазон измерения | Точность | Разрешение |
Влажность | 20-90% | ±5% | 1 |
Температура | 0-50°С | ±2°С | 1 |
Подробные спецификации:
Параметр | Условия | Минимальное | Типичное | Максимальное |
Влажность | ||||
Разрешение | 1% | 1% | 1% | |
8 бит | ||||
Стабильность | ±1%RH | |||
Точность | 25°С | ±4%RH | ||
0-50°С | ±5%RH | |||
Взаимозаменяемость | полностью взаимозаменяемы | |||
Диапазон измерения |
0°С | 30%RH | 90%RH | |
25°С | 20%RH | 90%RH | ||
50°С | 20%RH | 80%RH | ||
Время отклика (в секундах) |
1/e(63%)25℃, 1m/s Air |
6 | 10 | 15 |
Гистерезис | ±1%RH | |||
Долговременная стабильность |
типичная | ±1%RH/year | ||
Температура | 1°С | 1°С | 1°С | |
Разрешение | 8 бит | 8 бит | 8 бит | |
Стабильность | ±1°С | |||
Точность | ±1°С | ±2°С | ||
Диапазон измерения |
0°С | 50°С | ||
Время отклика (в секундах) |
6 | 30 |
Электрические параметры:
Параметр | Режим | Мин | Типовое | Макс | Ед.изм. |
Напряжение питания | DC | 3 | 5 | 5.5 | V |
Ток потребления | Измерение | 0.5 | 2.5 | mA | |
Ожидание | 100 | 150 | uA | ||
Среднее | 0.2 | 1 | mA |
Габаритные размеры и подключение:
Питание DHT11 составляет 3-5.5V DC. После подачи питания на датчик, необходимо выдержать паузу длительностью не менее 1 секунды перед началом считывания данных. Для фильтрации напряжения питания можно добавить один конденсатор 0,1 мкФ между Vdd и Vss.
Последовательный интерфейс (Single-Wire Двусторонний)
Весь обмен данными выполняется по одной одному проводу (шине). На шине может присутствовать только один датчик. Для получения высокого уровня используется подтягивающий резистор (5-10 кОм), т.е в пассивном состоянии на шине высокий уровень. Формат обмена данными может быть разделен на три этапа:
1) Инициализации.
2) Преамбула.
3) Передача данных.
Инициализация.
Процесс чтения данных начинается с импульса инициализации который формирует микроконтроллер. Он должен установить на шине низкий уровень на время не менее 18 mS, для инициализации DHT-11.
Преамбула.
Микроконтроллер после формирования импульса инициализации должен сразу перевести порт в режим чтения (режим приема данных). Если датчик готов к передачи данных, он ответит сформировав преамбулу. Один период меандра длительностью ~160 us.
Микроконтроллер получив ответ от датчика, может начать чтение данных.
Передача данных.
Данные представляют собой 5 байт данных, которые читаются по битно микроконтроллером, т.е всего 40 бит.
Первые два байта данные влажности (относительная влажность), целая и дробная часть. Третий и четвертый температура (градусы Цельсия), целая и дробная часть и пятый последний байт контрольная сумма, которая равна сумме первых 4 байт. К сожалению хотя и присутствуют байты отвечающие за десятые доли градуса и процента, реально контроллер датчика их не вычисляет (хотя это и понятно при такой точности это бесполезно), поэтому в них всегда присутствуют нули. Если реально считывать эти байты то мы увидим, например:
bait0 = 41 // влажность
bait1 = 0
bait2 = 31 // температура
bait3 = 0
bait4 = 72 // контрольная сумма
Но нет худа без добра, если в этих байтах всегда нули, то можно это значение (аналогично как для контрольной суммы) использовать для достоверности передачи данных.
Данные кодируются длительностью высокого уровня в каждом бите, бит начинается стробом низкого уровня длительностью приблизительно 50-54uS, после строба идет высокий уровень, если длительность высокого уровня в пределах 24 uS, то это передается “0”, если в пределах 70 uS – передается “1”.
Бит ‘0 ‘:
По окончанию передачи данных датчик передает последний строб, устанавливает на шине высокий уровень и переходит в спящий режим.
Логика чтения данных может быть следующая.
Вид передачи полностью:
Датчик подключается ко входу который может формировать прерывания по изменению уровня на входе. Для определения длительности импульса можно использовать таймер микроконтроллера.
Для демо проекта используем плату ILLISSI_B4_primum с установленным микроконтроллером PIC16F1936. Для индикации данные будем выводить, через USB порт на терминал программы AN1310 Microchip.
Вариант построение программа для чтения данных с датчика для компилятора MPLAB® XC8 Compiler v1.20. Для измерение длительности мы применим таймер Timer0. А для контроля моментов изменения сигнала на входах будем использовать возможность микроконтроллера формировать прерывания по изменению состояния на входах. Всё декодирование данных будет выполняться в прерывании (благо там минимум работы), поэтому для основной программы остается только дать “толчек” для выдачи данных и обработать их когда данные будут готовы.
Настройка прерывание для работы с датчиком
IOCBP=0b00000000; // отключить все прерывания и сбросить все флаги IOCBN=0b00000000; IOCBF=0b00000000; INTCON=0b11001000; /* || | +---- сбросить флаг прерывания от изменеию состояния на входе * || +------- разрешить прерывания по изменению состояния на входе * |+---------- разрешить прерывания от переферии * +----------- разрешить глобальные прерывания */ OPTION_REG=0b11000010;// настройка таймера Timer0 /* |+++---- PS<2:0>:010-1 : 8 * +------- PSA:0 = Prescaler is assigned to the Timer0 module */
Функция запуска измерения (её можно в ставить в главный цикл для постоянного получения данных)
if(DHT11==0)// запуск измерения { DHT11=1; // включить цикл измерения TRISB=0; // настроить порт на выход LATB0=0; // установить низкий уровень __delay_ms(18); // задержка в 18 миллисекунд (больше можно :)) IOCBP0=1; // настроить прерывание на входе RB0 на фронт IOCBF0=0; // сбросить флаг прерывания TRISB=1; // настроить порт на вход PREAM=1; // поиск преамбулы }
Вариант обработки прерываний
//=====================================прерывания================================== void interrupt my_isr(void) // { if(IOCIF) { IOCIF=0; //сбросить флаг IOCBF0=0; //сбросить флаг if(DHT11) { if(IOCBP0)// если прерывания по фронту { IOCBP0=0; // отключить прерывание по фронту IOCBN0=1; // включить прерывание по срезу TMR0=0; // сбросить таймер TMR0IF=0; // сбросить флаг переполнения TMR0IE=1; // разрешить прерывания TMR0 } else { dlinimp=TMR0; // сохранить значение таймера в регистр TMR0=0; // сбросить таймер TMR0IF=0; // сбросить флаг переполнения IOCBP0=1; //включить прерывание по фронту IOCBN0=0; //отключить прерывание по срезу LATB1=!LATB1; // переключить светодиод if(!TMR0IF) { if(PREAM)// поиск преамбулы { if(dlinimp>80) { PREAM=0;// преамбула принята countbit=0; } } else { if(countbit<8) { bait0<<=1; if(dlinimp>30) bait0 |= 0b00000001;// определение бита и запись его в байт приема } else if(countbit<16) { bait1<<=1; if(dlinimp>30) bait1 |= 0b00000001;// определение бита и запись его в байт приема } else if(countbit<24) { bait2<<=1; if(dlinimp>30) bait2 |= 0b00000001;// определение бита и запись его в байт приема } else if(countbit<32) { bait3<<=1; if(dlinimp>30) bait3 |= 0b00000001;// определение бита и запись его в байт приема } else if(countbit<40) { bait4<<=1; if(dlinimp>30) bait4 |= 0b00000001;// определение бита и запись его в байт приема } countbit++;// увеличить счетчик бит } } else { ERROR_DHT11=1; // неисправность датчика } } } } if(TMR0IF) { TMR0IF=0; DHT11=0; TMR0IE=0; //запретить прерывания TMR0 } }//===================================end_interrupt=================================
Вывод: простой недорогой датчик влажности и температуры, для проектов бытового назначения.
[box title=”Файлы для загрузки” color=”#521BDE”] Демонстрационный проект, MPLAB® X IDE v1.85, MPLAB® XC8 Compiler v1.20[wpdm_file id=219][/box]
Это может быть интересно
- Acquaintance with audio-bluetooth modules F-6888 (BK3254).Views: 2182 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
- Проект с использованием MCC часть 16Views: 1088 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …
- Сенсорный выключатель светаViews: 12728 Хотя в настоящий момент актуальны системы управления освещением с передачей данных по электросети, но я думаю, что проекты такого рода тоже имеют право на жизнь. Анонс Три вида …
- VU Meter Tower ARTViews: 1607 Стерео индикатор уровня аудио сигнала. Компактность и удобство проектирования устройств на светодиодах WS2812B, а также легкость реализации алгоритма родило идею созданию своей конструкции. В этом проекте я предоставлю …
- BMP280 – температура и атмосферное давление – учебный проектViews: 2049 Учебный проект на PIC32 и светодиодной панели P5 (2121)-168-6432-80 (32*64). Проект позволяет ознакомиться с простой графикой и с чтением давления и температуры с датчика BMP280. Для тестирования необходимо …
- Сумеречное релеViews: 1450 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
- ESP8266 процедура получение данных даты и времени от серверов точного времени.Views: 5907 Эта функция доступна уже в версии 1.6.1. Для многих приложений, необходимо часы реального времени, если в вашем проекте есть модуль WiFI ESP8266, то легко можно сделать следующим образом. …
- LED драйвер TM1639Views: 2187 TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером …
- Проект с использованием MCC часть 05Views: 1952 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
- MCC – K42 – настройка модуля DMAViews: 761 MCC – в версии v.3.95.0 и начиная ядра 4.85.0 конфигуратор предоставляет графический интерфейс для настройки модуля DMA. Для начала: Посмотреть какая версия МСС можно в закладке версии, если …