Подключение датчиков температуры
Подключение и распиновка термодатчика ds18b20
Цифровой датчик DS18B20 отправляет данные по Wire шине и может работать на одной линии с множеством других устройств. Каждый датчик имеет свой персональный 64-битный код, позволяющий микроконтроллеру Arduino общаться на одной шине сразу с несколькими сенсорами. Датчик преобразует температуру окружающей среды в цифровой код, т.е. для подключения не требуется дополнительного АЦП.
Датчик может быть выполнен в нескольких вариантах (смотри фото выше), от этого будет зависеть только схема подключения термодатчика к Arduino NANO или UNO. В первом случае необходимо использовать подтягивающий резистор на 4.7 кОм. Датчик, в виде готового модуля уже имеет резистор. Третий вариант — это датчик в герметичном корпусе, который можно смело использовать в горячей воде.
Проверка датчиков температуры
Схема подключения модуля температурного контроля.
После того как подключается такой прибор, надо проверить, как он работает. Для этого потребуется обычный тестер для измерения, а для датчиков с сопротивлением 0 градусов до 100 Ом оптимальный диапазон измерения тестера до 200 Ом.
Проверка осуществляется при комнатной температуре, при этом можно определить, какие провода между собой соединены накоротко возле прибора, в большинстве случаев сопротивление между проводами намного меньше, чем датчика. Потом нужно проверить, что прибор рабочий, то есть выдает ли он то сопротивление, которое он должен выдавать при определенной температуре.
В конце необходимо убедиться в том, что прибор не замыкает на корпусе термопреобразователя, проверить это можно на мегаомном диапазоне сопротивления между корпусом датчика и проводами
Очень важно соблюдать технику безопасности, то есть контактов корпуса касаться нельзя, проводов тоже касаться не следует
Если тестер указывает на бесконечное сопротивление, значит, в корпус датчика попала вода или жир, функционировать такое устройство некоторое время может, но точность показаний будет постоянно снижаться, его показания будут плавать.
Характеристики датчика lm35, описание
— питание: 2,7-5,5 Вольт;
— потребляемый ток: 50 mkА;
— диапазон температур: 10°C — 125°C
— погрешность: 2 градуса.
Вместо lm35 можно использовать любой другой датчик температуры, например, TMP35, LM35, TMP37, LM335. Выглядит датчик как транзистор и поэтому его легко спутать, поэтому всегда внимательно читайте маркировку на радиоэлементах. Часто на основе данного датчика производители делают модули температуры для Ардуино (смотри фото выше). Если у вас только сам датчик lm35, то он имеет три вывода.
LM35 схема включения, как работает (datasheet)
Если посмотреть на температурный сенсор lm35 со стороны контактов и срезом вверх (как на рисунке), то слева будет положительный контакт для питания 2,7-5,5 Вольт, контакт по центру — это выход, а справа — отрицательный контакт питания (GND).
Классификация видов термодатчиков
Выбор датчика зависит от того, в какой среде необходимо контролировать температуру: внутри котла, в помещении или в системе отопления. От правильности их выбора зависит эффективность и безопасность работы отопительного оборудования.
Датчик температуры для котла отопления классифицируется по следующим критериям:
- по способу определения температуры;
- по типу взаимодействия с термостатом.
Виды датчиков по способу определения температуры
По способу определения температуры датчики бывают:
- Дилатометрические, представляющие собой биметаллические пластины или спирали, принцип работы которых основан на тепловом расширении металлов или других типов твёрдых тел.
- Резистивные, имеющие сильную зависимость от температуры в определённом измеряемом диапазоне, которая проявляется в виде резких изменений электросопротивления.
- Термоэлектрические, представляющие собой термопары (сплавы двух разнородных проводников, например, хромель-алюмель), в которых при определённых температурных интервалах начинает индуцировать термо-ЭДС.
- Манометрические, принцип действия которых основан на изменении давления газа или жидкости в замкнутом объёме.
Дилатометрические датчики изготавливаются из материалов с высоким коэффициентом теплового расширения, которые реагируют на минимальные температурные колебания. Принцип их работы основан на замыкании либо размыкании электрических контактов. Для повышения их чувствительности и качества контакта в конструкциях используют магниты.
Резистивные термодатчики изготавливаются из специальных сплавов проводников или полупроводников. Конструктивно состоят из катушки с намотанным тонким медным, платиновым или никелевым проводом и керамического корпуса или полупроводниковых пластин, помещённых в пластиковый или стеклянный корпус.
Полупроводниковые резисторы бывают двух видов:
- термисторы, имеющие нелинейную температурную зависимость, характеризующуюся снижением сопротивления при нагреве;
- позисторы, также имеющие нелинейную зависимость от температуры, но отличающиеся от термисторов повышением сопротивления при нагреве.
Термоэлектрические датчики изготавливаются из двух специально подобранных разнородных металлов или сплавов, в точке контакта которых при нагреве индуцируется термо-ЭДС, величина которой пропорциональна разности температур двух спаев. При этом измеряемая величина не зависит от температуры, длины и сечения проводов.
Манометрические датчики позволяют определять температуру немагнитным способом без применения источников энергии, что позволяет их применять для дистанционных измерений. Однако их чувствительность на порядок хуже, чем у других термодатчиков, а также присутствует эффект инерционности.
Виды датчиков по способу взаимодействия с термостатом
Измерители температуры по типу взаимодействия с термостатом подразделяются на следующие виды:
- проводные, передающие данные на контроллер по проводам;
- беспроводные – высокотехнологичные современные устройства, передающие данные на определённой радиочастоте.
Проводной датчик температуры для котла
Особенности работы с датчиком:
Как и у похожего аналогового датчика LM35, на выходе формируется напряжение пропорционально температуре по шкале Цельсия, величина напряжения также 10.0 mV на 1°C, но в отличии от LM35, где отсчет начинается от 0°C и при 25°C датчик формирует напряжение 250mV, TMP36 ведет отсчет от -50°C, а при 25°C на выходе датчика будет 750mV.
TMP36 лишен основного недостатка LM35 при совместном использовании с Arduino, невозможность измерения отрицательных температур, но недостатки все таки пристукивают. При использовании встроенного в микроконтроллер источника опорного напряжения 1,1 вольт, максимальная температура датчика ограниченна 60°C но это всё еще пригодно для домашних или уличных термометров.
Крайне не рекомендуется использовать в качестве опорного напряжения для АЦП, напряжение питания или напряжение от встроенного стабилизатора на 3,3 вольта, подключенное на вход AREF, стабильность тех напряжений крайне низкая, что будет негативно сказываться на точности показаний датчика. Правильным решением будет использование встроенного источника опорного, а если верхняя граница в 60°C не достаточна, либо внешний источник опорного, например MAX6125, либо использовать другой, более подходящий, датчик температуры.
Подключение датчика движения
Без данного датчика не обходится ни одна серьёзная охранная система. Инфракрасный датчик — базовый элемент обнаружения присутствия теплокровных.
Также при помощи PIR-датчиков чрезвычайно удобно управлять освещением в зависимости от нахождения рядом человека. Инфракрасные или пироэлектрические датчики просты по внутреннему устройству и недороги. Они крайне надёжны и редко выходят из строя.
Основа датчика — пироэлектрик или диэлектрик, способный создавать поле при изменении температуры. Они устанавливаются попарно, а сверху закрываются куполом с сегментами в виде обычных линз или линзой Френеля. Это позволяет сфокусировать лучи от разных точек проникновения.
При отсутствии излучающих тепло тел в помещении у каждого элемента одинаковая попадающая доза излучения, соответственно, одинаковое напряжение на выходах. При попадании в зону «обзора» датчиков живого теплокровного нарушается равновесие и появляются импульсы, которые и регистрируются.
HC-SR501 — наиболее распространённый и популярный датчик. Он имеет два подстроечных переменных резистора:
- один — для регулировки чувствительности и размера обнаруживаемого объекта,
- второй — для регулировки времени срабатывания (времени генерации импульса после обнаружения).
Схема подключения стандартна и не вызовет затруднений.
Устройство и принцип работы
Принцип работы термодатчиков основан на измерении сопротивления, давления, физических размеров (тепловое расширение), термо-ЭДС, которые имеют сильную зависимость от температуры в конкретном диапазоне. Данные о величине нагрева могут быть получены на основе проведённых калибровок датчиков при выполнении пересчёта по соответствующим формулам.
В автоматических термостатах эти формулы заложены в управляющую программу, а в механических – установлены специальные устройства, которые каким-либо простым способом регулируют режимы работы, например, механические или электрические реле, которые замыкают или размыкают нужные контакты.
Термодатчики имеют относительно простую конструкцию – небольшой корпус с креплениями, внутри которого находится сам датчик. Они могут быть герметичными или открытыми, в зависимости от способа детектирования. Для передачи измеренных данных они могут оснащаться беспроводными датчиками или подключаться по проводному соединению.
Библиотека OneWire для работы с DS18B20
DS18B20 использует для обмена информацией с ардуино протокол 1-Wire, для которого уже написана отличная библиотека. Можно и нужно использовать ее, чтобы не реализовывать все функции вручную. Скачать OneWire можно здесь. Для установки библиотеки скачайте архив, распакуйте в папку library вашего каталога Arduino. Подключается библиотека с помощью команды #include
Основные команды библиотеки OneWire:
- search(addressArray) – ищет температурный датчик, при нахождении в массив addressArray записывается его код, в ином случае – false.
- reset_search() – производится поиск на первом приборе.
- reset() – выполнение сброса шины перед тем, как связаться с устройством.
- select(addressArray) – выбирается устройство после операции сброса, записывается его ROM код.
- write(byte) – производится запись байта информации на устройство.
- write(byte, 1) – аналогично write(byte), но в режиме паразитного питания.
- read() – чтение байта информации с устройства.
- crc8(dataArray, length) – вычисление CRC кода. dataArray – выбранный массив, length – длина кода.
Важно правильно настроить режим питания в скетче. Для паразитного питания в строке 65 нужно записать ds.write(0x44, 1);
Для внешнего питания в строке 65 должно быть записано ds.write(0x44).
Write позволяет передать команду на термодатчик. Основные команды, подаваемые в виде битов:
- 0x44 – измерить температуру, записать полученное значение в SRAM.
- 0x4E – запись 3 байта в третий, четвертый и пятый байты SRAM.
- 0xBE – последовательное считывание 9 байт SRAM.
- 0х48 – копирование третьего и четвертого байтов SRAM в EEPROM.
- 0xB8 – копирование информации из EEPROM в третий и четвертый байты SRAM.
- 0xB4 – возвращает тип питания (0 – паразитное, 1 – внешнее).
Подключение и настройка датчика уличной температуры
Подключение температурного датчика производят только к отключенному от электроснабжения газовому котлу. Для осуществления данного процесса используют кабель 2*0,5 мм длиной менее 30 м. Его протягивают через отверстие в стене и подключают к к клеммной колодке прибора без соблюдения полярности. Провод изолируют при помощи специальной муфты.
Датчик уличной температуры подключают к электронной плате газового котла. У каждой модели место подключения может отличаться, его определяют по схеме платы управления, которая имеется в инструкции к агрегату.
Температуру в комнате можно регулировать в диапазоне 9-30ºС.
Уличный датчик регулирует температуру теплоносителя по методике, где фигурируют такие данные:
- Ti – температура воды на выходе из котла;
- Tкомн– заданное значение комнатной температуры;
- Te– показания датчика уличной температуры;
- K– коэффициент изоляции, настроенный параметром P6.
Температура теплоносителя рассчитывается по следующей формуле:
Например, для поддержания температуры в помещении на уровне 23°C при коэффициенте изоляции 10 и температуре на улице -10°C, теплоноситель должен быть нагрет до 56°C.
Самым сложным в этом расчете является подбор коэффициента изоляции, который определяется опытным путем. Его настройка выполняется так:
- на газовом котле переводят регулятор температуры ГВС на максимум, а отопление – на минимум;
- рукоятку температурного контура переводят в течение 3 секунд 3 раза в сторону увеличения;
- на ЖК-дисплее начинает мигать код параметра настройки Р6;
- значение коэффициента выбирают, поворачивая регулятор контура отопления;
- чтобы увидеть значение выбранного параметра нажимают кнопку reset;
- чтобы изменить показатель, следует зажать reset на 2 сек.;
- на экране появится заводское значение 20; можно выбрать параметр в диапазоне от 5 до 35;
- фиксируют выбранное значение нажатием reset в течение 2 секунд;
- чтобы выйти из режима настройки, регулятор отопления 3 раза поворачивают в течение 3 мин.
При выборе коэффициента теплоизоляции следует учитывать, что, чем значение выше, тем хуже утеплено здание.
Чтобы датчики наружной температуры для газовых котлов работали четко и эффективно, важно найти подходящее место для его монтажа и правильно выполнить настройки. Ошибки приведут к тому, что агрегат будет расходовать топливо не экономно или температура в доме не будет поддерживаться на должном уровне
Вводная информация
Если раньше существовали специализированные конструкторы с ограниченными наборами функций и жёстко заданными параметрами, то сегодняшнее разнообразие конструкторов просто поражает: настоящие микропроцессорные системы, собираемые на коленке, имеют практически неограниченный функционал. Богатая фантазия, широкая элементная база, большие комьюнити фанатов и инженеров и поддержка производителем — основные отличительные особенности таких востребованных рынком наборов для робототехники.
Один из них и наиболее популярный, что естественно, — Ардуино. Конструктор моментальной сборки электронных автоматических устройств любой степени сложности: высокой, средней и низкой. Эту платформу называют иначе «physical computing» за плотное взаимодействие с окружающей средой. Печатная плата с микропроцессором, открытый программный код, стандартные интерфейсы и подключение датчиков к Ардуино — слагаемые его популярности.
Система Ардуино — плата, которая объединяет все нужные компоненты, обеспечивающие полный цикл разработки. Сердце этой платы — микроконтроллер. Он обеспечивает управление всей периферией. Датчики, подключаемые к системе, позволяют системе «общаться» и взаимодействовать с окружением: анализировать, отмечать изменять.
Примеры работы для Arduino
Один датчик
Рассмотрим простой пример — подключения одного датчика.
Сенсор подключается к управляющей плате через один сигнальный пин.
При подключении к Arduino в компактном формфакторе, например Arduino Micro или Iskra Nano Pro, воспользуйтесь макетной платой и парочкой нажимных клеммников.
Между сигнальным проводом и питанием установите сопротивление 4,7 кОм.
При коммуникации сенсора со стандартными платами Arduino формата Rev3, Arduino Uno или Iskra Neo, используйте Troyka Slot Shield совместно с модулем подтяжки.
Код программы
Выведем температуру сенсора в Serial-порт.
Серия датчиков
Каждый сенсор DS18B20 хранит в своей памяти уникальный номер, такое решение позволяет подключить несколько датчиков к одному пину.
Добавим к предыдущем схемам подключения ещё по паре датчиков в параллель.
Код программы
Просканируем все устройства на шине и выведем температуру каждого сенсора отдельно в Serial-порт.
Подключение температурного датчика для котла
Все датчики температуры должны подключаться к термостату или специальному управляющему контроллеру, отвечающего за рабочие режимы котла. При этом необходимо тщательно изучить инструкцию по подключению, чтобы совпали требования к подсоединению с техническими характеристиками датчиков.
Обычно рекомендуется приобретать датчики, которые рекомендует производитель котла. Связано это с их высокой совместимостью и гарантией правильной работы
Если в продаже таковые отсутствуют, то нужно обращать внимание на сертифицированные аналоги
Подключение наружного датчика
Датчик наружной температуры для котла монтируется на внешней стороне стены дома с обязательным выполнением следующих требований:
- необходимо исключить попадание прямых солнечных лучей на его поверхность;
- поверхность контакта стены должна быть неметаллической;
- прокладка кабеля в местах с повышенной влажностью, при наличии химических или биологических факторов, которые могут повредить изоляцию, запрещена;
- высота расположения датчика на стене должна быть на уровне 2/3 высоты дома, если количество этажей до трёх, либо между вторым и третьим этажом, если здание многоэтажное;
- необходимо исключить негативные факторы, снижающие чувствительность или точность измерения датчика.
Наружные датчик температуры для котла
Подключение термодатчика осуществляется при выключенном электропитании котла. Для соединения применяется цельный кабель с сечением жил 0,5 мм2 и длиной до 30 м. Места подключения проводов к котлу и датчику должны быть загерметизированы и изолированы.
При подсоединении важно соблюдать полярность, в зависимости от типа термодатчика. Если участок кабеля проходит по улице, то его следует защитить специальной гофрированной трубкой
После выполнения всех монтажных работ, необходимо проверить их качество, а затем настроить термостат. Если были допущены ошибки, то их следует исправить, иначе велика вероятность поломок котла или недостаточного обогрева помещений.
Подключение комнатного датчика
Датчик комнатной температуры для котла монтируется на внешней стене здания с внутренней стороны помещения. Требования по выбору места следующие:
отсутствие поблизости источников тепла или холода;
постоянный доступ к пространству помещения (отсутствие предметов декора, интерьера, которые могут заслонять датчик и влиять на достоверность измерений);
высота от пола должна составлять 1,2-1,5 м;
при монтаже электрических датчиков важно, чтобы поблизости не было источников электромагнитного излучения: проложенной электропроводки, установленных мощных электроприборов и т. п.. Комнатный датчик температуры для котла
Комнатный датчик температуры для котла
Способ подключения аналогичный методу для внешнего термодатчика, выполняется в соответствии с требованиями производителя котла. Может монтироваться в специально подготовленное углубление в стене или на поверхность, главное, чтобы чувствительный элемент не был закрыт снаружи.
Подключение датчика для газового котла
Беспроводной датчик температуры для газового котла монтируется непосредственно на контроллер или на газовый клапан. Проводные термодатчики присоединяются способом, который предусмотрен производителем и описан в инструкции.
Подключение водяного термодатчика
Датчик температуры воды для котла в многоконтурной системе устанавливается на поверхность возвратной трубы отопления либо внутрь неё, а также допустима установка на циркуляционный насос. Такое положение обусловлено необходимостью исключения попадания обратно в котёл теплоносителя с высокой температурой.
В одноконтурной или однотрубной системе вариант установки датчика на возвратную трубу с теплоносителем запрещён. В случае повышения нагрева циркуляция перекроется и возникнет значительный градиент температур между дальними и ближними комнатами.
Как правильно установить датчик наружной температуры?
Термодатчики устанавливают на наружной стене дома
При размещении важно выполнять определенные требования:. …
- Желательно устанавливать датчик на стене, которая обращена в сторону севера или северо-востока.
- На сенсор не должны падать солнечные лучи.
- Нельзя прикреплять устройство к поверхности из металла.
- Датчик не должен контактировать с источниками тепловой энергии, ветра или холода.
- Сенсор должен монтироваться к ровной поверхности с помощью анкерных болтов.
Также существуют правила размещения в зависимости от количества этажей в доме:
- Если здание имеет до 3-ех этажей, датчик устанавливают на уровне 2/3 от его высоты.
- Если в доме более 3 этажей, рекомендуется размещать устройство между 2-ым и 3-им этажами.
После того как место выбрано, переходят к монтажу уличного датчика. Чтобы получить доступ к крепежным отверстиям, откручивают защитную пластиковую крышку прибора. Затем к датчику подключают два провода. Пробивают перфоратором в стене отверстие под крепеж, затем вкручивают туда дюбель для крепления.
Протокол датчика DHT
Выходом датчика является цифровой сигнал. Температура и влажность передаются по одному сигнальному проводу (). DHT11 общается с принимающей стороной, такой как Arduino по собственному протоколу. Коммуникация двунаправлена и в общих чертах выглядит так:
- Микроконтроллер говорит о том, что хочет считать показания. Для этого он устанавливает сигнальную линию в 0 на некоторое время, а затем устанавливает её в 1
- Сенсор подтверждает готовность отдать данные. Для этого он аналогично сначала устанавливает сигнальную линию в 0, затем в 1
- После этого сенсор передаёт последовательность 0 и 1, последовательно формирующих 5 байт (40 бит). В первых двух байтах передаётся температура, в третьем-четвёртом — влажность, в пятом — контрольная сумма, чтобы микроконтроллер смог убедиться в отсутствии ошибок считывания
Благодаря тому, что сенсор делает измерения только по запросу, достигается энергоэффективность: пока общения нет, датчик потребляет ток 100 мкА.
Подключение цифрового датчика влажности, температуры
Два популярных датчика — DHT11, DHT22 — предназначены для замера влажности и температуры (про подключение датчика температуру мы еще поговорим ниже отдельно); недорогое решение, отлично подходят для простых схем и обучения. Термистор, ёмкостной датчик — основа DHT11 и DHT22. Внутренний чип выполняет АЦП, давая на выходе «цифру», которую поймёт любой микроконтроллер.
DHT11 отличается от DHT22 диапазоном измерения и частотностью опроса:
- влажность — 20-80% для DHT11 и 0-100% для DHT22;
- температура — 0°C до +50°C для DHT11 и -40°C до +125°C для DHT22;
- опрос — ежесекундный для DHT11 и раз в две секунды для DHT22.
Оба датчика DHT имеют стандартных 4 вывода:
- Питание датчиков.
- Шина данных.
- Не задействован.
- Земля.
Вывод данных и питания требует подключения между ними резистора 10 кОм.
Для DHT-датчиков разработана библиотека DHT.h. При загрузке скетча в контроллер монитор порта должен отобразить текущие значения влажности, температуры. Проверить работоспособность просто — достаточно подышать на датчик и взять его в руки: температура и влажность должны поменяться.
Возможен вывод значений на экран LCD 1602 I2C, если включить его в систему.
При помощи этих датчиков можно соорудить автоматизированную систему полива почвы на открытом воздухе, в теплице и даже на подоконнике. Или организовать систему сушки ягод — последние обдуваются или нагреваются в зависимости от влажности ягод.
Также некоторые акватеррариумы требуют особых условий влажности, которые легко контролировать при помощи DHT1 и DHT22.
Подключение датчика давления
Часто в деле предсказания погоды или определения высоты подъёма над уровнем моря требуется решить задачу измерения давления. Здесь на помощь приходят электронные барометры на технологии МЭМС: тензорометрический или пьезорезизстивный метод, связанный с переменностью сопротивления прибора при приложении деформирующих материал сил.
Наиболее популярен датчик BMP085; помимо барометрического давления он регистрирует и температуру. Ему на смену выпустили BMP180, он обладает теми же характеристиками:
- Чувствительность в диапазоне: 300-1100 гПа (если в метрах — 9000 — 500 м над уровнем моря );
- Разрешение : 0,03 гПа или 0,25 м;
- Рабочая температура датчика -40 +85°C, точность измерения в указанном диапазоне — ±2°C;
- Подключение по стандарту i2c;
- V1 использует 3.3 В для питания и логики;
- V2 использует 3.3-5 В для питания и логики.
Подключение датчиков к Ардуино в этом случае стандартно. Понадобится Unified Sensor Driver — его обновлённая версия обеспечивает более высокую точность показаний; кроме того, позволяет работать с несколькими разными подключёнными датчиками давления одновременно. Необходимо также установить Adafrut_Sensor library.
Выводы
Подключение датчиков к Ардуино — это превращение алгоритмизированного робота, управляемого автоматически или в ручном режиме, в полноценную среду взаимодействия устройств и схем с окружающей средой. Не стоит забывать — это не панацея от всех бед. И не конечный высокотехнологичный продукт или конечная область применения. Ардуино — это комплекс аппаратных и программных решений, который поможет:
- освоить системы алгоритмизации начинающим инженерам;
- освоить базовые навыки конструирования;
- научиться программировать.
Вне зависимости от вашего уровня подготовки, ваших знаний, всегда можно подобрать для себя задачи по силам. Можно собрать простенькое решение автоматизации какой-либо несложной задачи без пайки вместе со школьником; а можно поставить глобальную задачу, где требуются помимо знаний и логики ещё и умение качественно паять и верно чертить и читать чертежи. А активные сообщества, форумы и базы знаний по системе Ардуино помогут решить практически любой вопрос.
Датчики DHT11 / DHT22 подключение к Ардуино
Расскажем, как подключить датчик температуры и влажности к Ардуино, как получить данные с датчика на мониторе порта. На этом занятии мы познакомимся с цифровым датчиком температуры и влажности DTH11 с трех пиновым разъемом стандарта 2.54 мм. Рассмотрим устройство и назначение датчиков влажности и температуры. Научимся добавлять библиотеки для датчиков и плат расширений Arduino Nano.
Устройство DTH11 Ардуино: распиновка, datasheet
На занятии мы будем использовать датчик DHT11 или DHT22, смонтированный на плате. DHT11 — это цифровой датчик, состоящий из термистора и емкостного датчика влажности. Наряду с невысокой стоимостью DHT11 имеет следующие характеристики: питание осуществляется от 3,5-5V, определение температуры от 0 до 50 градусов с точностью 2 град, определение влажности от 20% до 95% с 5% точностью.
Arduino dht11 распиновка (datasheet на русском)
Модуль DHT11 оборудован трех пиновым разъемом и подключается по схеме:
G — Подключается к выводу GND
V — Подключается к выводу +5V
S — Подключается к цифровому выводу ( Pin2 )
Термистор — это термический резистор, сопротивление которого изменяется с температурой, т.е. увеличение температуры приводит к падению его сопротивления. По сути термистор — это термометр сопротивления, изготовленный на основе смешанных оксидов переходных металлов. Относится к измерительной технике и может быть использован для автоматического измерения температуры в различных средах.
Емкостной датчик влажности — это конденсатор с переменной емкостью, который содержит токопроводящие обкладки из медной фольги на текстолите. Этот конденсатор заключен в герметичный чехол, поверх которого расположен влагопоглощающий слой. При попадании частиц воды на этот слой, меняется его диэлектрическая проницаемость, что приводит к изменению емкости конденсатора.
Как подключить DHT11 к Ардуино Уно
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega
- модуль DHT11 / DHT22 Ардуино
- макетная плата
- 2 светодиода и 2 резистора на 220 Ом
- провода «папа-папа» и «папа-мама»
- библиотека DHT.h
На этом занятии мы приведем для примера два скетча. Первый скетч будет отсылать данные с модуля DHT11 на последовательный монитор порта компьютера. Во втором скетче мы будем использовать вывод данных на жк дисплей — LCD 1602 модуль. LCD модуль можно будет использовать в дальнейшем в любом автономном устройстве, например, при конструировании «Домашней метеостанции» или «Умной теплицы».
Схема подключения модуля DHT11 к плате Ардуино Уно
Необходимо установить библиотеку для работы с датчиком DHT11. Для этого необходимо скачать архив по ссылке, извлечь папку «DHT11» и переместить ее в раздел «C:\Program Files\Arduino\libraries» на своем компьютере. При использовании датчика DHT11, необходимо подключать библиотеку в скетче. Загрузите следующую программу после подключения датчика температуры воздуха DHT11 к Ардуино.
Скетч. Ардуино DHT11 датчик температуры и влажности
Программа для датчика температуры DHT11 Arduino:
- переменные «h» и «t» являются типом данных float, которая служит для хранения чисел с десятичным разделителем (вре11 подключение к ардуино);
- команда Serial.print() выводит информацию на порт без переноса строки, команда Serial.println() выводит информацию на порт с переносом строки.
Схема подключения DHT11 и LCD 1602 к Ардуино
Скетч. Подключение к Ардуино DHT11 и вывод на LCD 1602
Программа для датчика владности DHT11 Arduino:
- для подключения датчика к микроконтроллеру можно использовать любой пин общего назначения, указав его в скетче;
- команда LCD.clear() в программе очищает экран дисплея от надписей для вывода новых значений с сенсора температуры DHT11 Arduino.
Как подключить DHT22 к Ардуино Уно
Обратите внимание, что распиновка модулей у разных производителей может отличаться. При неправильном подключении питания, сенсор может выйти из строя. Дисплей подключается к шине i2c, расположенной на пинах SDA (A4) и SCL (A5) платы Ардуино Уно и Нано. При работе с платой Ардуино Мега подключение дисплея производится к интерфейсу i2c на пинах SDA (20) и SCL (21).
Схема подключения DHT22 и LCD 1602 к Ардуино
Схема подключения DHT22 к плате ничем не отличается от предыдущего примера, а сама программа отличается только одной строчкой, где мы указываем тип датчика — DHT22, вместо DHT11. После того, как вы собрали схему с дисплеем и DHT22, как показано на картинке выше, — загрузите следующий пример простой программы с универсальной библиотекой DHT.h, которая подходит для этих двух модулей.
Скетч. Подключение к Ардуино DHT22 и вывод на LCD 1602
Программа для датчика температуры DHT22 Arduino:
- при необходимости получать значения температуры и влажности без знаков после запятой — используйте тип данных int, вместо float.
Заключение. Мы рассмотрели в этом обзоре, как подключить DHT11 и DHT22 к Arduino. Представили несколько примеров программ для вывода информации с цифрового датчика на аппаратный монитор порта Arduino IDE и дисплей 1602. С датчиком DHT11 существует множество проектов метеостанций на Ардуино, которые вы сможете сделать самостоятельно, внимательно изучив информацию на этой странице.
Датчики и микроконтроллеры. Часть 2. Климат-контроль
Продолжим рассказ о датчиках и в этой части рассмотрим разнообразные датчики самых востребованных DIY-сообществом типов — это многочисленные датчики температуры и датчики влажности. Кроме того, затронем датчики давления воздуха и присутствия газов. Приведем описание номенклатуры датчиков и сошлемся на полезную литературу.
Содержание
5. датчики температуры
Ни один проект по автоматике системы климат-контроля не обходится без датчика температуры, главная задача которого — с необходимой точностью выдавать температуру требуемого объекта, будь то воздух в помещении, охлаждающая жидкость, прожаренный стейк или расплавленный металл(В климат-контроле, ага).
5.1 Термопары
Генераторные датчики температуры, представляющие собой два проводника различных материалов, спаянные с одного конца друг с другом.
Главное преимущество термопар — их широкий диапазон температур. Ограниченный, по сути, абсолютным нулем и температурой плавления металлов — т. е. способен измерять там. Где другие датчики просто бессильны — от -270 до +1800 градусов цельсия и выше.
Термопары бывают разные и в зависимости от типа используемых материалов имеют различный диапазон рабочих температур.
Их конструкция также зависит от применения. Например, в одной из лабораторий моей родной кафедры валялись вот такие 200-300мм дрыны:
Рисунок 1 Термопара типа К для печей сопротивления
А вот так выглядят всеми известные термопары типа К, которые идут в комплекте с мультиметрами(фото из моей коллекции):
Рисунок 2: Термопары типа К для мультиметров.
- платинородий-платиновые — ТПП13 — Тип R, диапазон -50 +1600 С (9мкВ/С).
- платинородий-платиновые — ТПП10 — Тип S, диапазон -50 +1600 С(6мкВ/С).
- платинородий-платинородиевые — ТПР — Тип B, диапазон 0 +1800 С
- железо-константановые (железо-медьникелевые) ТЖК — Тип J, диапазон -210 +1200 С(52мкВ/С)
- медь-константановые (медь-медьникелевые) ТМКн — Тип Т, диапазон -270 +400 С(41мкВ/С)
- нихросил-нисиловые (никельхромникель-никелькремниевые) ТНН — Тип N, диапазон +270 +1300 С(27мкВ/С)
- хромель-алюмелевые — ТХА — Тип K, диапазон -270 +1372 С(41мкВ/С).
- хромель-константановые ТХКн — Тип E, диапазон -270 +1000 С(61мкВ/С).
- хромель-копелевые — ТХК — Тип L, диапазон -200 +800 С
- медь-копелевые — ТМК — Тип М, диапазон -200 +100 С
- сильх-силиновые — ТСС — Тип I (не представлена в ГОСТ, есть в википедии)
- вольфрам и рений — вольфрамрениевые — ТВР — Тип А-1, А-2, А-3, диапазон 0 +1800, (+2500 для А-1) С.
Рисунок 3: Термопара.
Но здесь появляется первая проблема — ЭДС зависит от разности температур между горячим и холодным спаями, поэтому температуру холодного спая следует знать с необходимой точностью, чтобы определить температуру горячего конца.
Проблему добавляет и то, что фактически, точки подключения термопары к измерительной системе также являются точками спая двух разных металлов, что вносит свою погрешность. Поэтому поместим оба холодных конца рядом, дабы выровнять их температуру и будем контролировать ее еще одним датчиком:
Рисунок 4: Программная компенсация холодного спая
В этом случае, измерив с конечной точностью абсолютным датчиком температуры температуру холодного спая мы программно сможем ее скомпенсировать. Почему нельзя сразу воспользоваться одним абсолютным датчиком? Покажите мне еще один датчик, способный измерить температуру расплавленного металла.
Если абсолютного датчика под рукой нет, а измерять надо, возьмем еще одну термопару, подключим ее последовательно в противофазе и поместим в среду, температура которой нам известна — например вода со льдом:
Рисунок 5: Аппаратная компенсация холодного спая
Но на мой взгляд при наличии широкодоступных точных датчиков температуры использовать бачок с тающей водой, требующей постоянного контроля, немного не технологично. Поэтому в документации встречаются варианты термостатированных холодных спаев, в которых с помощью точного термостата поддерживается заданная температура.
Например, генераторы опорного сигнала «гиацинт», стоящие в советской измерительной аппаратуре представляют собой кварцевый резонатор, обмотанный проволокой высокого сопротивления и помещенный в маленький сосуд Дюарда, в котором поддерживается определенная температура. В результате достигается стабильность частоты до 7-8 знака после запятой.
С проблемой относительности разобрались, теперь попробуем снять показания с термопары. И тут нас поджидают еще две проблемы:
Проблема номер раз — термоЭДС измеряется в микровольтах. Например, для термопары типа K температурный коэффициент составляет 41мкВ/градус. Это означает, что милливольтами запахнет только градусов через 25 разницы температур.
Напомню из прошлой части, что 12-разрядный АЦП при опорном напряжении 3,3В имеет чувствительность 800мкВ. т. е. В нашем случае 20 градусов/деление. Неплохая однако погрешность. Конечно нужно учитывать малый рабочий диапазон выходного напряжения термопары и ставить усилители на базе ОУ, или включать усиление в самом АЦП.
Там возникнут другие сложности вроде точности оцифровки АЦП, собственных шумов аналоговых трактов ОУ и АЦП и т. п. В последующих главах мы подробно рассмотрим вопрос отношения сигнал/шум, а пока можете почитать книгу Data Conversation Handbook, глава 2
Будем следовать одной истине — использовать прецизионные и малошумящие ОУ и АЦП. В списке дополнительной литературы есть множество различных вариантов схем подключения. Однако одна из наиболее распространенных схем в большинстве массовых измерительных приборов — с использованием терморезистора:
Рисунок 6: Использование терморезистора для компенсации температуры холодного спая
Проблема номер два — термопара нелинейна. Нелинейность выглядит следующим образом:
Рисунок 7: Нелинейность термопары
Но благо все в курсе этой нелинейности, каждые поверенные измерения аккуратно занесли в табличку и высчитали точные коэффициенты полиномов вида:
(1)
Для расчета температуры исходя из значения ЭДС и наоборот:
(2)
Для каждого типа термопары в ГОСТ 8.585-2001 заботливо приведены все необходимые коэффициенты аппроксимирующих полиномов для температур относительно 0 градусов цельсия. Вот список коэффициентов полинома для распространенной термопары типа К:
Рисунок 8: Список полиномов для термопары типа К в диапазоне температур от 0 до 500 градусов цельсия
В принципе, особой проблемы посчитать итоговое значение труда не составит, однако если ваш холодный спай болтается в воздухе при неизвестной температуре — кому это надо?
Как итог — термопара — один из лучших датчиков для точного измерения очень горячих, либо очень холодных вещей.
А в моей любимой книге детства — «Радиоэлектронные игрушки» Войцеховского, можно найти описание конструкции термогенератора, от которого предлагается запитать, например, транзисторный радиоприемник. А на марсе от термогенератора аналогичной конструкции, только самую малость потехнологичнее, питается марсоход Curiosity – На Geektimes есть обзорный пост про РИТЭГи.
Рисунок 9: Темроэлектрическая батарея 0,6В 8мА
Минутка бессмысленной и беспощадной практики.
У нас есть отладочная плата на микроконтроллере ATmega1280, пара термопар и желание измерить температуру с хорошей точностью. И у нас это не получится.
АЦП контроллера — 10-разрядный, минимальное опорное напряжение может быть выставлено в 1,1В.
Тогда чувствительностью АЦП составит:
(3)
Аналоговые входы АЦП позволяют работать в дифференциальном режиме с максимальным усилением в 200 раз. Правда с таким усилением опорное напряжение может быть только 2,56В, да и эффективных остается лишь 7 разрядов. Тогда чувствительность АЦП составит:
(4)
Что примерно в 2,5 раза меньше чем чувствительность термопары типа К(41мкВ). т. е. Теоретически, точность измерительного тракта составит не лучше ± 2,5 градусов. Практически, нам помешают шумы. А их согласно таблице 31-8 датащита целых +-10 знаков — т. е. итоговая точность составит не лучше +-25 градусов. Хе-хе. Это мы еще не учли два полуметровых провода до термопар, отсутствие должной фильтрации аналогового питания и питание всей системы от неплохо шумящего USB. Дай скотче хотя бы в ± 50 градусов уложиться.
Напишем программу, которая будет работать на прерываниях (я набросал ее для одного из комментариев). Средой Arduino воспользуемся как загрузчиком:
Рисунок 10: Натурный эксперимент с двумя термопарами, стаканами и скрепками
Для кипятка вокруг одной термопары и стакана с тающим льдом вокруг другой на выходе сплошная каша со средним значением первых двух строк 124 градуса, что очень даже хороший результат — будем считать что в точность +-25 градусов мы уложились.
Рисунок 11: Сырой вывод данных
Разумеется, практической значимости данная халтурка не представляет и для измерения температуры с помощью термопары нужно использовать более точные АЦП. Хорошим встроенным АЦП обладает к примеру микроконтроллер ADuCM360, причем он рассчитан именно на столь малые входные сигналы. Существуют специализированные внешние АЦП для термопар — например компания Maxim Integrated выпускает несколько микросхем для термопар — MAX31850, MAX31851, MAX31855, MAX31856. Есть драйверы и у компании Analog Devices Бюджетным будет вариант использования предварительных усилителей на малошумящих ОУ для нашего АЦП. У меня хорошие результаты показывал LMP2011.
5.2 Термометры сопротивления и терморезисторы
Как известно, сопротивление металла изменяется от температуры окружающей среды. Этот эффект используется для проведения высокоточных (до тысячных долей градуса) измерений температуры с помощью термометров сопротивления. Будучи сделанным не из металла, а из полупроводника, мы получим терморезистор.
Рисунок 12: Платиновые RTD от Honeywell
- Базовое сопротивление при определенной температуре. Рекомендуемое — 10, 50, 100, 500, 1000 Ом…
- Температурный коэффициент сопротивления в тысячных в пропромилле на градус кельвина (ppm/K).
(5)
Таким образом, зная текущее сопротивление терморезистора и зная его ТКС и номинальную температуру, можно вычислить текущую температуру: (6)
На термометры сопротивления имеется ГОСТ Р 8.625-2006, в котором нормируются термометры из платины (ТКС = 0,00385 и 0,00391), а также из меди(ТКС 0,00428) и никеля (ТКС 0,00617). Номинальным сопротивлением для термометров является сопротивление при температуре 0 градусов. Также как и термопары термометры сопротивления имеют некоторую нелинейность, но в ГОСте заботливо приведены коэффициенты полинома. К слову — гораздо более простые, чем для термопар.
Например, для платинового термометра с ТКС = 0,00385 и диапазона измерений от -200 до 0 градусов будет уравнение вида:
(7)
А для диапазона 0-850 градусов вида:
(8)
Со следующими значениями коэффициентов:
(9)
Одни из популярных — эталонные платиновые термометры серии 700 от Honeywell. Хотя по стоимости платиновые термометры не из дешевых — от 5$ и выше в зависимости от диапазона температур и точности прибора.
Измерить сопротивление можно различными методами. Наиболее простой и рекомендуемый ГОСТ-ом — измерительный мост с источником напряжения. С другой стороны, подключение к источнику тока и использование дифференциального входа АЦП даст линейность измерений.
Рисунок 13: Различные способы подключениях двухпроводных RTD
Процитирую тов Stross из комментариев к предыдущей части:
С другой стороны Ваш АЦП в режимах усиления входного сигнала не должен шуметь как одинокий ручей текущий с горы фудзи трактор
В приложении к разделу есть множество полезных ссылок по подключению RTD и способам повышения точности.
Одна из проблем металлических термометров сопротивления — низкий ТКС, за счет чего необходим измерительный тракт с высокой чувствительностью. Но это лишь конструктивная проблема — измерить сопротивление с высокой точностью в отличие от очень малых токов и напряжений не представляет особого труда.
Если нам не нужна высокая точность и достаточно ±1-2 градусов, то можно воспользоваться полупроводниковыми терморезисторами, имеющими на порядки более высокий ТКС. Например терморезисторы серии KTY84 от NXP имеют ТКС=0,61. С другой стороны термисторы имеют меньший диапазон рабочей температуры порядка -40=300 градусов.
А еще терморезисторы гораздо более нелинейны. Но в датащитах опять таки заботливо приводятся значения ТКС и номинального сопротивления для различных значений температуры:
Рисунок 14: Таблица соответствия ТКС, номинального сопротивления и температуры
По этой таблице не составит особого труда построить кусочно-линейную функцию и использовать ее для определения сопротивления.
5.3 Линейные аналоговые преобразователи
Рисунок 15: линейный аналоговый датчик LM35DZ
Перейдем к более интегрированным решениям. Рассмотрим микросхему аналогового линейного датчика температуры. Эта микросхема подключается к источнику напряжения и дает на выходе аналоговый сигнал, линейно зависящий от температуры с наклоном 10-20мВ/К. Диапазон измеряемых температур намного уже чем у ранее представленных датчиков и составляет в среднем -40+125 градусов. Так как наш простенький 10-разрядный АЦП имеет чувствительность 1мВ, его с лихвой хватит, чтобы считать показания с данного датчика.
Еще одно полезное свойство данных датчиков — их выходное напряжение не зависит от питающего напряжения, которые может изменяться в широких пределах — например, для датчика LM35 от National Semi диапазон питающих напряжений — 4-30В. Точность датчиков — 1-2 градуса. Так выглядит график точности датчика в зависимости от температуры:
Рисунок 16: Точность датчика в зависимости от температуры
Больше про этот датчик особо сказать нечего, так что расходимся.
5.4 Цифровые датчики температуры
Цифровые датчики температуры за своим огромным ассортиментом скрывают удобные интегрированные решения, предоставляющие возможность получать показания температуры в готовом виде посредством цифровых интерфейсов.
Как правило, цифровые датчики температуры подключаются по интерфейсам SPI и I2C. Что касается меня — датчики температуры — это низкоскоростные устройства и тратить на них SPI расточительство.
В качестве примера рассмотрим комбинированный датчик температуры и влажности SHT10:
Рисунок 17: Датчик SHT10 общий вид
Рисунок 18: Погрешность датчика
Но и этот датчик не без косяка — его интерфейс «оптимизирован». Типа для того, чтобы его было удобнее считать. А еще к нему нельзя адресоваться как к I2C устройству.
Благо датчик позволяет подключать себя совместно с другими устройствами и нужно лишь программное переключение протокола общения. На нем остановимся чуть подробнее:
Для старта передачи команды необходимо передать стартовую последовательность:
Рисунок 19: Стартовая последовательность
После стартовой последовательности передается байт команды, состоящий из 0 бит адреса (поддерживается только адрес 000) и 5 бит команды.
Рисунок 20: Список команд
После отправки команды на измерение температуры или влажности, в зависимости от разрядности измерений 8, 12 или 14 бит, процедура измерения займет 20, 80 или 320мс. По завершению процесса измерений датчик притянет линию DATA в ноль и уйдет спать. Как только контроллер получает данный сигнал, путем тактирования линии SCK можно получить два байта данных и байт контрольной суммы(если она активирована), причем по окончанию приема каждого байта необходимо контроллером притягивать землю в ноль. Дапнные передаются с правым вырваниванием, т. е. Для 14-разрядного значения старший бит данных появится только на 5 тик линии SCK. За подробностями отправляю к датащиту.
Датчик температуры имеет линейную характеристику и полученное значение датчика пересчитывается с учетом напряжения питания и наклона характеристики:
Рисунок 21: Расчет температуры
Разумеется, есть датчики температуры с нормальным I2C интерфейсом. Например, LM75A от NXP.
Его диаграмма считывания данных подчиняется базовым принципам I2C:
Рисунок 22: Считывание данных температуры с датчика LM75
Это 11-разрядный датчик, с разрешением 0,125 градуса цельсия, выходные данные хранятся в двух регистрах данных, имеющих определенный адрес. С помощью команд прогтокола I2C для нашего устройства, имеющего адрес 1001XXX (три младших бита выставляются пользователем и позволяют подключать к одной шине до 8 таких датчиков) выставляем указатель адреса регистра с которого начнем производить считывание и с помощью команды чтения считываем два регистра. Полученное знаковое значение умножаем на 0,125 и получаем итоговое значение температуры в градусах цельсия. Удобно.
5.5 DS18B20
Рисунок 23: Цифровой датчик DS18B20
Данному датчику стоит уделить особое внимание. Это 12-разрядный датчик температуры с рабочим диапазоном -55 + 125 градусов цельсия, подключаемый по протоколу 1-wire. Его главное преимущество — этих датчиков можно на одну линию навешать многие десятки штук и все они будут работать. Датчик весьма точный ± 0,5 градуса, однако медлительный — время измерения составляет 750мс.
Внутри датчика 9 регистров, в регистрах 0 и 1 хранится значение измеренной температуры, в регистрах 2 и 3 могут быть использованы как память общего назначения, 4 регистр хранит конфигурацию согласно следующей таблице:
Рисунок 24: Назначение бит конфигурационного регистра
Девятым байтом регистровой памяти идет CRC. Рассчитываемый по следующей формуле на основании первых 8 регистров:
(10)
Для того, чтобы запустить команду вычисления температуры необходимо отправить команду 0x44. По завершению процесса измерения данные будут лежать в первых двух байтах регистровой памяти вплоть до следующего измерения. Считывание 9 байт данных регистровой памяти осуществляется путем подачи команды 0xBE
В целом данный датчик, имея весьма демократичную цену, позволяет, используя длинные линии связи, организовать сеть датчиков, покрывающую ту или иную площадь. Например, можно сеткой разместить датчики в теплице и контролировать температурный градиент внутри нее.
5.6 ИК-датчик температуры
Данный обзор был бы неполным без бесконтактных ИК датчиков температуры. Я вскользь упомянул о нем когда рассказывал о плате CC3200-launchxl — там установлен именно такой датчик.
Рисунок 25: ИК-термодатчик
Эти датчики состоят из тонкой пластинки. Поглощающей ИК излучение, вследствие чего происходит ее нагрев, который детектируется описанными выше термодатчиками. Например в датчике TMP006 от Texas Instruments судя по изображению внутри набор последовательно-включенных термопар, сигнал с которых снимается и преобразуется в цифровой с доступом по I2C. Хозяйке на заметку — этот датчик измеряет температуру от -40 до +125 градусов с точностью ± 1,5 градуса. Я, как обладатель этого датчика на отладочной плате, понемногу с ним играюсь.
Есть и аналоговые решения. Например датчики TPS333 от Excelitas имеют внутри себя встроенный термистор.
Рисунок 26: датчики TPS333 от Excelitas
Наиболее интересны конечно же бесконтактные ИК матрицы, на основе которых делаются тепловизоры. Например датчик D6T-44L-06 от Omron за 35 долларов представляет собой матрицу 4х4 бит, с помощью которой можно измерить температуру от 5 до 50 градусов на расстоянии до 3метров.
Рисунок 27: Область детектирования
Вот тут есть классная видеопрезентация от производителя:
Разрешение датчика конечно так себе, да и диапазон температур не шибко большой, но свою нишу такая матрица имеет, да и цена лично меня порадовала. Можно взять на заметку.
5.7 Дополнительная литература
6 Датчики влажности
Ни одна система климат-контроля не будет полноценной без измерения относительной влажности воздуха, так как от нее зависит комфорт человека, находящегося в контролируемом помещении. Думаю многим знаком график зоны комфорта:
Рисунок 28: Зона комфорта в помещении
В России допустимые значения температуры и влажности в жилых помещениях регламентируются СанПиН 2.1.2.2645-10 «Санитарно-эпидемиологические требования к условиям проживания в жилых зданиях и помещениях»(Приложение 2).
Задача датчиков влажности — определить относительную влажность воздуха. Относительная влажность воздуха — это отношение парциального давления водяного пара в воздухе к равновесному давлению насыщенных паров при данной температуры:
(11)
Где — парциальное давление паров воды в воздухе,
— равновесное давление насыщенного пара.
Есть несколько способов измерить влажность воздуха.
Конечно же стоит упомянуть классические психрометры — сборка сухого и влажного термометра, по разности показаний которых довольно точно определяется текущая влажность воздуха. Никто не запрещает взять два датчика температуры, один из них снабдить сырой ваткой и на основе их показания вычислять влажность.
Рисунок 29: Психрометр
Далее следуют механические гигрометры, где в качестве чувствительного элементы выступает обезжиренный волос либо полимерная пленка, изменяющие свою длину в зависимости от влажности.
Но нам больше интересны решения с электрическим сигналом на выходе.
Такие сенсоры реагируют на влажность изменением емкости или сопротивления гигроскопичного материала, насыщаемого влагой в количестве, пропорциональном парциальному давлению пара измеряемого воздуха. Широкое распространение получили именно емкостные датчики. Поэтому только их мы и рассмотрим.
Рисунок 30: Структура датчика влажности.
6.1 Датчики влажности с емкостным выходом
Самый простой по своей сути датчик. Представляет собой конденсатор с изменяемой емкостью. Емкость такого конденсатора в первую очередь зависит от влажности. Но не последним показателем является температура воздуха. Например, для датчика серии HCH-1000 от Honeywell чувствительность датчика составляет в среднем 0,6 пФ/%RH. При этом температурный коэффициент составляет 0,16пФ/градус. Наглядно, график изменения емкости выглядит следующим образом:
Рисунок 31: Изменение емкости датчика HCH-1000
В отличие от сопротивления. Емкость измерить гораздо сложнее. Точные профессиональные приборы — измерители иммитанса (RLC-метры) — не самое дешевое оборудование.
Простой способ измерения емкости — определение скорости заряда и разряда RC цепочки. Определяя с необходимой точностью постоянную времени заряда и зная точное сопротивление резистора, мы можем определить емкость конденсатора.
Рисунок 32: заряд конденсатора
Так как наша емкость изменяется в пределах 300-360пФ, для получения постоянной времени в 1-2мс (что будет легко поймать большинством таймеров и АЦП) потребуется сопротивление . При таком методе измерений нам требуется с необходимой точностью измерять текущий уровень заряда конденсатора, а также отмечать время, за которое конденсатор достигнет значения 63,2%. Процедуру для надежности можно повторить несколько раз.
Есть еще один способ, правда менее стабильный: раз мы измеряем период, то пусть у нас будет импульсный сигнал. Пусть емкостной датчик отвечает за частоту генерации сигнала. Изменяется влажность — изменяется выходная частота. На выходе буферного элемента D1.3 будет сигнал, частота которого зависит от емкости нашего датчика. Единственный вопрос к точности пороговых напряжений логических элементов. К слову, точность самого датчика HCH-1000 ±2%.
Рисунок 32: Простой генератор на логике
Не забудем, что для повышения точности показаний необходимо учитывать текущие показатели температуры.
6.2 Датчики влажности с выходом по напряжению
Электронная промышленность уже поработала за нас и создала приборы, выдающие готовый аналоговый сигнал. Примером таких датчиков являются датчики HIH-4010 от Honeywell, с точностью ± 8%.
Рисунок 33: Датчики влажности с выходом по напряжению. Общий вид
Для таких датчиков в датащите указываются графики зависимости выходного напряжения от влажности:
Рисунок 34: Зависимость выходного напряжения датчика от влажности
С подобными датчиками часто поставляется уникальный для каждого экземпляра калибровочный паспорт, в котором указаны значения выходного напряжения для двух различных значений влажности при определенной температуре. Достаточность указать эти данные в программе и мы получаем готовые калиброванные значения датчика.
6.3 Датчики влажности с цифровым выходом
Последним нашим датчиком в этой категории будет цифровой датчик влажности.
Один из них мы уже рассмотрели в секции датчиков температуры — это SHT1x. Однако, существует множество комбинированных датчиков влажности и температуры и честно говоря мне не попадались цифровые чисто датчики влажности, что впрочем неудивительно — одно без другого никуда.
Продолжим наш дискус касаемо расчета влажности с датчика SHT1x. Получаемые с этого датчика необходимо преобразовать. В датащите указаны необходимые формулы:
(12)
И коэффициенты полинома:
Рисунок 35: Коэффициенты полинома для версии V4
Следует отметить, что относительная влажность зависит от температуры и требует корректировки по следующей формуле:
Рисунок 36: Корректировка относительной влажности в зависимости от температуры
7 Датчики давления
Датчик давления — это датчик, регистрирующий давление измеряемой среды, которой может быть воздух, газ или жидкость.
В зависимости от задачи, может потребоваться измерять как абсолютное давление, давление относительно атмосферного давления, и дифференциальное давление — т. е. разницу давлений между двумя точками измерения.
Рисунок 37: Давление.
- миллиметры ртутного столба — mm Hg;
- Паскаль — Па, Pa;
- Фунт-сила на кв. дюйм — Psi
- Бар — bar
- Физическая атмосфера — атм
Датчик давления представляет собой чувствительный элемент, помещенный между двумя камерами — в одной присутствует измеряемое давление, в другой — опорное. В абсолютных датчиках воздействие на кристалл идет только с одной стороны. Рассмотрим схему датчика MPX2100 от Freescale в разрезе:
Рисунок 38: Конструкция относительного и абсолютного датчика давления
На рисунке показан чувствительный элемент, который под разницей давлений изменяет свои свойства. Есть несколько видов чувствительных элементов. Один из самых распространенных — тензорезистивный — изменение сопротивления материала под воздействием деформации. Часто в качестве материала такого датчика берется монокристалл кремния. Одной из проблем является зависимость сопротивления датчика от температуры, но, как правило, во всех датчиках присутствует термокомпенсация.
Другой чувствительный элемент под воздействием давление изменяет свою емкость. В секции датчиков влажности мы уже обсудили, что данный метод проблематичен для последующих измерений, да и датчики давления с емкостным выходом мне ни разу не попались.
Также есть пьезоэлектрический эффект, где чувствительный элемент генерирует напряжение под воздействием определенного давления. У меня кстати есть один такой — он установлен в зарядной станции ЗД-6 комплекта индивидуальных дозиметров ИД-1. Зарядное устройство содержит 4 параллельно соединенных пьезоэлемента и механический усилитель, давящий на пьезоэлементы; давление создается вращающейся ручкой. Он используется для генерации напряжения в 180-250В для заряда дозиметра
Рисунок 39: Измеритель дозы ИД-1
Есть датчики и других типов — индуктивные, резонансные и прочие, но они встречаются в очень промышленных объектах и мы их рассматривать в рамках данной статьи не будем.
7.1 Аналоговые датчики давления
На выходе аналоговых датчиков давления присутствует уровень тока или напряжения, которое необходимо подать на измерительный тракт нашего прибора.
Сделаем небольшое лирическое отступление и упомянем датчики с промышленными уровнями аналогового сигнала 0-10В и 4-20мА, предназначенные для подключения к промышленной автоматике. Суровые промышленные датчики видно сразу:
Рисунок 40: Суровые промышленные датчики давления
Однако схема их включения аналогична всему тому, что было описано в разделе 3:
Рисунок 41: Подключение промышленного датчика
Установив делитель напряжения, либо подобрав шунтирующее сопротивление так, чтобы уровень выходного сигнала соответствовал входному диапазону АЦП, эти датчики можно подключать и к обычным микроконтроллерам.
С датчиками давления построенными по мостовой балансной схеме часто имеется та же проблема, что и с термопарами — многие датчики выдают всего порядка 40мВ на весь свой диапазон. Например вот так выглядит зависимость выходного напряжения от давления для датчика MPX2100:
Рисунок 42: Зависимость выходного напряжения датчика от давления
Так что вооружаемся дифференциальным малошумящим АЦП и вперед.
С другой стороны существуют более удобные, но и более дорогие датчики, имеющие на выходе сигнал 0-5В, или 0-3.3В и подобные в зависимости от напряжения питания.
К таким датчикам относится 40PC от Honeywell:
Рисунок 43: датчик серии 40PC от Honeywell
Оцифровать выходной сигнал такого датчика может любой микроконтроллерный АЦП. Вот только при своей точности в 0,2% его стоимость на рынке — порядка $40-50.
7.2 Цифровые датчики давления
Цифровой датчик давления позволяет получать все данные более технологичным способом. Суть его та же — пьезорезистивный мост, дифференциальный АЦП и интерфейс.
Вот так выглядит внутри MEMS-датчик LPS331 от ST в корпусе 3х3х1мм:
Рисунок 44: Структурная схема датчика давления LPS331
Все цифровые датчики давления имеют встроенный датчик температуры и, соответственно, термокомпенсацию. Чувствительность конкретно этого датчика давления — ± 200Па. Разумеется температуры с этого датчика также доступна, с точностью ± 2 градуса.
Одно из применений датчика давления — это барометрическая альтиметрия — т. е. определение относительной высоты. Как известно, с изменением высоты уменьшается давление воздуха. Так что выставим на земле нулевую высоту и поднявшись ввысь, или опустившись внизь можно определить пройденный путь.
Зависимость давления воздуха от высоты выглядит следующим образом:
Рисунок 45: зависимость давления воздуха от высоты
Для поиграться могу порекомендовать часы-отладочный комплект EZ430‑Chronos от Texas instruments на базе контроллера CC430F6137. На хабре есть описание этих часов
В них встроен цифровой датчик давления Bosh BMP085 стоимостью $4. Он имеет рабочий диапазон 30-110кПа и размеры 5х5х1.2мм.
Рисунок 46: Через несколько минут они покажут 4500. Метров.
8 Датчики присутствия газов
Ранее описанные датчики позволяют измерить то, что мы можем ощутить самостоятельно. Но в воздухе может оказаться еще кое-что, что способно убить нас совершенно незаметно.
Рисунок 47: датчик присутствия газа
Это газ. CO2, CO, метан, пропан, аммиак, водород, этанол, хладагенты и прочие газы., большинство из которых проблематично учуять, но которые приведут к серьезным последствиям.
Датчик определенного типа рассчитан, как правило, только на один конкретный газ, так что если вы хотите контролировать различные газы, то нужно использовать несколько датчиков.
Наибольшее распространение имеют различные датчики FIGARO, так что именно их и рассмотрим на примере датчика угарного газа TGS2442. Чувствительным элементом таких датчиков является оксид олова (SnO2). Датчик имеет многослойную структуру.
Рисунок 48: Структура датчика газа
Сначала идет селективный фильтр, пропускающий целевой газ и уменьшающий влияние других газов. После имеется камера с чувствительным элементом о четырех контактах. Два контакта предназначаются для нагревателя и еще два — для резистора, сопротивление которого зависит от концентрации газа.
Подключение датчика производится следующим образом:
Рисунок 49: Подключение датчика газа
Точность определения концентрации напрямую зависит от точности времени подогрева и времени снятия сигнала. Обе цепи подключаются к питанию на короткое время чтобы предотвратить перегрев чувствительного материала.
На нагреватель подается напряжение в 4.8В каждую секунду, длительностью 14мс. Средний ток нагревателя 200мА. За 5мс до включения нагревателя на 5мс включается схема измерителя и производится замер сопротивления.
Рисунок 50: Цикл работы датчика газов
Итоговая концентрация газа определяется в зависимости от отношения измеренного сопротивления к сопротивлению при концентрации газа 100 пропромилле. Зависимость хорошо видно на следующем графике:
Рисунок 51: Чувствительность к газам. Ro = Rs при 100 ppm CO
PS
Данная часть получилась больше справочной чем практической, но я надеюсь что этот материал поможет в выборе типа датчиков для вашей будущей системы климат-контроля.
В заключительной части цикла про датчики я расскажу о датчиках тока и напряжения, знания о которых мы применим при создании самодельного прибора учета электроэнергии и расчете энергетических параметров. Вопросы анализа частоты, реактивной и активной мощности, коэффициента мощности и гармонических искажений я решил разбить и вынести в отдельный цикл.
Подключение датчика температуры DS18B20 к микроконтроллеру
В процессе изучения микроконтроллеров рано или поздно возникает необходимость измерения такого метеорологического параметра окружающей среды, как ее температура. Современный мировой рынок электронных комплектующих предлагает широкий ассортимент датчиков температуры. Основные отличия между ними состоят в диапазоне измеряемой температуры, напряжении питания, области применения, габаритных размерах, способах преобразования температуры, интерфейсом для взаимодействия с пользовательской управляющей системой. Так исторически сложилось, что на текущий момент одним из самых популярных температурных датчиков является датчик DS18B20 корпорации Dallas Semiconductor. О нем следующее повествование.
DS18B20 – цифровой датчик температуры с программируемым разрешением преобразования.
Отличительные особенности:
1) Использование интерфейсной шины данных 1-Wire для взаимодействия с управляющей системой;
2) Наличие уникального 64-битного последовательного идентификационного кода, расположенного во внутренней ROM-памяти и предназначенной для многоточечных систем, где необходимо адресовать конкретный датчик;
3) Напряжение питания составляет 3-5,5В, что позволяет использовать его не только в 5-вольтовых системах, но и в 3,3 (большинство микроконтроллеров);
4) Диапазон измеряемой температуры составляет -55…+125 о С;
5) Точность в ±0,5 о С, правда это верно только для диапазона -10…+85 о С;
6) Разрешение преобразования определяется пользователем и составляет 9…12 бит;
7) Имеет внутренние регистры триггеров верхнего и нижнего порогов срабатывания с вырабатыванием сигнала тревоги для систем, использующих термостатическую логику работы;
8) Эти датчики программно совместимы с DS1822 и широко применяются в промышленных термостатических регуляторах, индустриальных системах, в потребительской электронике и других термочувствительных системах.
Описание и принцип работы устройства:
Сам датчик поставляется в трех видах корпусов, в 8-выводном SOIC-е, 8-выводном uSOP-е, и, пожалуй, самым популярном, ТО-92. Для связи с управляющей системой разработчиками была предусмотрена интерфейсная шина 1-Wire. Одним из отличительных особенностей данного устройства следовало бы отметить возможность питания его от самой интерфейсной шины, т.е., другими словами, датчик DS18B20 предусматривает возможность так называемого «паразитного питания». Благодаря внутреннему 64-битному уникальному коду можно построить систему мониторинга температуры на относительно небольшой площади, причем используя всего лишь 1 линию для связи с управляющим устройством.
В своей статье я опишу пример работы с датчиком, выполненном в корпусе TO-92.
Выглядит он таким образом:
Внутри эта штуковина устроено очень просто, взгляните сами:
Рассмотрим поподробнее эту блок-схему.
Подсистема питания.
Как я уже отмечал немного ранее, датчик имеет возможность подключения по 2-х проводной схеме, используя так называемое «паразитное питание». На рисунке я отметил процесс питания зеленым цветом. Когда на линии DQ высокий логический уровень, через подтягивающий резистор протекает ток, через верхний диод заряжает конденсатор Cpp и сам датчик питается от линии INTERNAL Vdd (внутренняя линия питания датчика температуры). Когда линия данных DQ прижимается к земле, т.е. на ней установили низкий логический уровень, питание осуществляется от заряженного ранее конденсатора. Красота, не правда ли?
Однако питание таким способом вносит некоторые ограничения на временные параметры датчика. Удержание линии данных некоторое время разрядит конденсатор, что приведет к обесточиванию линии INTERNAL Vdd, а соответственно и датчика в целом. Поэтому в неиспользуемое время на линии DQ должен поддерживаться высокий логический уровень. Следует отметить одно важное замечание. При операциях преобразования температуры и копирования данных из Scratchpad в EEPROM (в один из регистров), потребляемый линией INTERNAL Vdd ток может достигать 1,5мА, что непосильно внутреннему конденсатору, а на резисторе подтяжки будет большое падение напряжения, что недопустимо скажется на работе устройства в целом. Для этого необходимо организовать линии DQ схему мощной подтяжки, реализуемой по вот такой схеме:
После выдачи команды Convert T [44h] или Copy Scratchpad [48h] необходимо включить мощную подтяжку MOSFET-транзистором линии DQ не позднее 10мкс(макс.), как утверждают разработчики датчика, после чего выждать время преобразования (Tconv) или время передачи данных (Twr=10мс), причем в это время никаких действий при включенной мощной подтяжке на линии DQ быть не должно!
Про стандартное питание нужно мало что сказать, ведь тут все просто, и даже MOSFET не нужен вовсе:
Следует сделать некоторое замечание в плане выбора типа питания датчика. Не рекомендуется использовать режим паразитного питания в устройствах, измеряющих температуру свыше 100 о С, поскольку при таких температурах в датчике возникают большие токи утечки, что приведет к непредсказуемым результатам. В таких приложениях рекомендуется использовать внешний источник питания.
Кстати, в некоторых ситуациях, ведущее устройство может не знать, каким образом у датчика организовано питание. Для этого он может посылать команду запроса типа питания: передаем команду Skip ROM [CCh] а затем Read Power Supply [B4h], после чего датчик сбросит линию в низкий логический уровень, если питание осуществляется паразитно или установит ее в 1цу, если питание заведено от внешнего ИП. Данная информация необходима ведущему устройству для того, чтобы знать, необходимо ли в некоторых ситуациях организовать мощную подтяжку линии данных.
Рассмотрим устройство датчика дальше:
Подсистема «64-BIT ROM AND 1-Wire PORT» содержит в себе уникальный 64-битный последовательный идентификационный код, расположенный в энергонезависимой памяти ROM, также в этом узле расположен интерфейс взаимодействия с управляющей системой 1-Wire. Подсистема «Memory Control Logic» осуществляет передачи данных между подсистемой интерфейса 1-Wire и памятью типа Scratchpad, которая, в свою очередь, имеет доступ к регистрам температурного датчика, регистрам установки верхнего и нижнего порогов срабатывания сигнала тревоги, конфигурационному регистру и регистру генератора 8-битноой контрольной суммы для защиты системы от неправильных данных.
При включении питания по умолчанию датчик имеет разрешение преобразования 12 бит, и сразу входит в режим пониженного энергопотребления. Для инициирования преобразования ведущее устройство должно передать команду Convert T [44h]. После преобразования температуры в цифровой код, этот код располагается в Scratchpad-памяти в виде двухбайтного слова, и датчик снова переходит в энергосберегающий режим.
После передачи этой команды ведущее устройство может читать временные данные, и если датчик отвечает 0, то он еще находится в процессе преобразования температуры, или 1-цей, если преобразование уже выполнено. Правда, такой метод проверки времени преобразования не подходит для системы с подключенным паразитным питанием.
Преобразование температуры.
Теперь разберемся, как преобразуется температура в датчике. По сути, внутри самого температурного сенсора располагается АЦП, и выходные данные, расположенные в регистре температуры, переносятся в Scratchpad-память. Данные о температуре имеют следующий формат:
Флаг S – флаг знака, используется для указания знака числа (S=0 – число, содержащееся в битах 10-0 положительно, и S=1, если число, содержащееся в тех же битах отрицательно, т.е. в данном случае температура представляется в дополнительном коде (коде дополнения до двух)).
При настройке на разрешение преобразования 12 бит все 12 бит (bit 11- bit 0) задействованы и содержат достоверные данные. При настройке на разрешение 11 бит содержимое бита 0 не следует принимать в расчет, при настройке на 10 бит не следует принимать в расчет биты 0 и 1 и т.д.
Сигнал тревоги – функция термостата.
Для этого предусмотрено 2 8-битных регистра, Th и Tl. В Th содержится значение верхнего порога температуры, а в Tl – соответственно нижнего. Если температура выше значение Th или ниже Tl устанавливается флаг тревоги. Этот флаг тревоги обнаруживается ведущим устройством посредством выдачи команды Alarm Search [ECh] на линию DQ. Флаг тревоги обновляется при после каждой операции преобразования температуры. Кстати, только биты с 11 по 4-й регистра температуры используются в сравнении с регистром Th или Tl, отсюда следует, что функция термостата работает только для целых значений температуры. Регистры физически являются EEPROM памятью, поэтому они сохраняют свои значения при выключении питания. Сами регистры аналогичны регистру температуры, только они 8-битные, флаг S имеет абсолютно такое же значение, как и в предыдущем случае:
64-битный идентификационный код.
Этот код, как отмечалось ранее, необходим для идентификации каждого устройства на линии в системах многоточечного измерения температуры.
Формат этой памяти такой:
Младшие 8 бит отводятся для обозначения семейства, и содержат значение 0х28.Следующие 48 бит содержат уникальный серийный номер устройства. Самый старший байт содержит значение контрольной суммы CRC, рассчитываемой для младших 56 бит ROM-памяти.
Организация памяти.
Память датчика состоит из пространства памяти блокнотного типа (Scratchpad) и EEPROM-памяти для хранения данных конфигурации и значений регистров верхнего и нижнего порогов сигнала тревоги.
При выключении питания данные байта 2, 3 и 4 сохраняют свое значение в EEPROM. Ну а при включении, значение в них остаются неизменными. Байт 0 и 1 содержат значение преобразованной температуры, байты 5, 6, 7 зарезервированы для внутреннего использования и не могут быть доступны пользователю для его нужд.
8-й байт содержит значение, генерируемое встроенной логикой формирования CRC-кода для байтов с 0 по 7, что сводит к минимуму возможность ошибочного определения температуры в конечном итоге.
Следует отметить, что если функция термостата не используется, то регистры Th и Tl могут использоваться как память общего назначения – в них вы можете хранить любую информацию.
Данные записываются в байты 2, 3 и 4 начиная с младшего бита байта 2 при помощи команды Write Scratchpad [4Eh]. Для проверки целостности записанных данных, можно их прочитать, для чего необходимо передать датчику команду Read Scratchpad [BEh], после чего ведущее устройство должно принимать данные начиная с младшего бита байта 0.
Для сохранения данных старшего, младшего регистров термостата а так же регистра конфигурации в EEPROM-памяти, ведущее устройство должно передать датчику команду Copy Scratchpad [48h].
Как отмечалось ранее, данные, уже записанные в EEPROM, при выключении питания сохраняются. Но при включении питания из соответствующих EEPROM-ячеек значения автоматически загружаются в соответствующие регистры памяти scratchpad. Удобно, не правда ли?:)
Кроме всего, данные, записанные в EEPROM, в любое время могут быть перезаписаны в scratchpad-память. Это необходимо например для того, когда вы изменили конфигурацию в процессе работы, а потом вам надо встать на «штатный режим работы», т.е. вернуть ту конфигурацию работы, которая была до изменения содержимого регистров памяти scratchpad. Вот собственно для этого ведущее устройство должно передать датчику команду Recall E2 [B8h].
В это время ведущее устройство может читать слоты времени, и если датчик отвечает 0, то он еще находится в процессе копирования данных, или 1-цей, если все уже готово и данные перегружены из EEPROM в Scratchpad.
Регистр конфигурации.
В регистре конфигурации пользователем могут определяться только 2 бита: R0 и R1. Эти биты определяют разрешение преобразования температуры, и по дефолту установлены в 1, что и определяет изначальную настройку на 12-битное разрешение преобразования.
Все возможные конфигурации этих битов и соответствующие разрешения представлены в таблице ниже. Следует отметить, что чем больше разрешение преобразования, тем больше время преобразования, например, для 12-битного разрешение время преобразования составляет 750мс (макс.).
Взаимодействие с управляющей системой.
DS18B20, как отмечалось ранее, для связи с ведомым устройством используют интерфейсную шину данных 1-Wire. Поэтому для его подключения управляющая система должна обеспечивать выход с открытым стоком или с Hi-Z состоянием линии.
Внутренняя конфигурация интерфейса датчика показана ниже:
В неактивном состоянии (в состоянии простоя) линия DQ подтянута резистором к «+» питания. Таким образом между транзакциями (передачами данных) эта линия всегда должна удерживаться в этом состоянии. Если по какой-либо причине транзакции должны быть приостановлены, линия DQ должна удерживаться в высоком логическом уровне, если эта передача дальше будет возобновлена. В процессе остановки транзакции мы сколько угодно долго можем держать линию DQ в высоком логическом уровне, начиная с 1мкс. Но, если шина данных будет удержана в низком логическом уровне дольше 480мкс, произойдет полный сброс всех датчиком, присутствующих на этой шине.
Последовательность операций для обмена.
Каждый раз при обращении управляющей системы к датчику должна быть соблюдена следующая последовательность действий:
1) Инициализация;
2) Команда ROM (за которым следует необходимый обмен данными);
3) Функциональная команда датчика (за которой следует необходимый обмен данными).
Если какой либо шаг при обращении к датчику отсутствует – датчик не будет реагировать. Исключение составляют команды Search ROM [F0h] и Alarm Search [ECh], после их выполнения мастер должен вернуться к первому шагу управляющей последовательности.
Итак. Все транзакции начинаются с инициализации. Эта операция сопровождается выработкой ведущим устройством импульса сброса, на который ведомые устройства (в данном случае датчик(-и)) передают ведущему импульс присутствия, которые дают ему знать, что датчики подключены и готовы к работе.
Вообще интерфейсная шина 1-Wire, реализуемая в датчике, определяет несколько типов сигналов на линии данных: импульс сброса, импульс присутствия, запись 0, запись 1, чтение 0, чтение 1. Все эти операции реализует ведущее устройство, за исключением импульса присутствия. Его формирует только датчик(-и).
Итак, для начала ведущее устройство переходит в режим передатчика и устанавливает линию DQ в 0 на время не менее 480мкс (выделено жирным черным цветом). Это сбрасывает датчик. Затем линию необходимо отпустить, и перевести ведущее устройство в режим приемника, при этом подтягивающий резистор установит линию данных в высокий логический уровень (выделено тонким черным цветом). После того, как датчик почует нарастающий фронт, датчик выждет время 15-60мкс и своим аппаратным интерфейсом сбросит линию данных в 0, и будет ее держать в течение 60-240мкс. По истечении этого времени датчик отпустит линию и она установится в уровень логической 1 в течение не менее 480мкс после обнаружения датчиком импульса сброса.
Теперь поговорим о том, как осуществляется процесс передачи данных. Вообще, передачи бита. Дело в следующем. Берется отрезок времени, и в течение этого времени мастер смотрит, что там у нас на линии, допустим 1 – значит записали 1, если 0 – значит записали ноль. Но это только абстрактное объяснение. На самом деле там есть некоторые нюансы, связанные с временными рамками всего этого дела.
Все начинается с того, что ведущий должен опустить линию данный в низкий логический уровень, и с этого момента начинается слот записи/чтения 1/0, длящийся от 60 до 120мкс. Между слотами записи/чтения линия данных обязательно должна установиться в 1 на время, не меньшее времени восстановления (1мкс). Для организации слота записи 0 необходимо все время слота держать линию данных в 0, если же необходимо записать в датчик 1, то сначала сбрасываем линию данных в 0, затем ждем не менее 1мкс и отпускаем линию в 1, в течение слота записи 1 (60-120мкс) будет записана 1 в датчик (см. верхний правый рисунок).
Собственно говоря, если в течение 15-60мкс после старта будет обнаружена 1 на линии данных, то запишется 1, а если в течение 60-240мкс обнаружится 0 – то и запишется 0.
Чтение данных сопровождается ведущим устройством, когда он сбрасывает линию, ждет не менее 1мкс, и в течение 15мкс смотрит, что на линии творится: если остался 0, то датчик передает 0, если переключилась в 1, — то и передалась 1.
Команды.
Эти команды должны следовать за последовательностью инициализации и содержат инструкции поиска соответствующего датчика и т.д. Разрядность каждой команды 8бит. После выполнения соответствующей команды можно передать функциональную команду датчику.
SEARCH ROM [F0h]
Когда система первоначально подключена, она должна распознать все подключенные к шине устройства. Для этого эта команда. Но, поскольку у нас всего лишь один датчик, пользоваться этой командой мы не будем.
READ ROM [33h]
Эта команда используется только тогда, когда на шине имеется лишь один датчик. Это позволяет ведущему устройству считать содержимое 64 бит ROM-памяти не используя команду ее поиска. А если же вы попробуете использовать эту команду при подключенном количестве датчиков, более 1, все они начнут передавать содержимое этой памяти, что приведет к нежелательным последствиям.
MATCH ROM [55h]
Это команда соответствия ROM. Мастер выпускает 64 бита соответствующей памяти ROM подключенного к шине датчика, и там уже определяется, что с ним делать (измерить температуру, и т.д.). Другие датчики на шине будут в это время ждать своей очереди.
SKIP ROM [CCh]
Это команда пропуска ROM. Не принимает в расчет адрес какого-либо конкретного датчика на шине, а обращается сразу ко всем. После этой команды, можно выдать, например, команду преобразования температуры, и все датчики начнут преобразование. Однако вывести команду чтения памяти после вызова этой команды приведет к непредсказуемым результатам (потому что сразу все датчики будут передавать данные). Значит, только при одном подключенном датчике возможна такая ситуация.
ALARM SEARCH [ECh]
Эта команда идентична первой в этой таблице за исключением того, что осуществляет поиск датчиков на шине с установленным флагом тревоги.
Эти команды осуществляют функциональные операции каких либо процессов, например, запуск операции преобразования температуры, копирование памяти и т.д. Всего команд 6, разрядность каждой 8бит.
CONVERT T [44h]
Запуск преобразования температуры. После выполнения этой команды 2-байтные данные заносятся в регистр температуры.
WRITE SCRATCHPAD [4Eh]
Записывает данные в регистры 2-4 начиная со второго, младшим битом вперед. Во время передачи данные в три регистра необходимо следить, чтобы мастер не сбросил датчики, потому что возможна потеря данных.
READ SCRATCHPAD [BEh]
Инициирует процесс передачи данных всех регистров памяти scratchpad, начиная с младшего бита байта 0 и заканчивая старшим битом байта 8 (CRC).
COPY SCRATCHPAD [48h]
Эта команда копирует содержимое регистров байта 2, 3 и 4 в соответствующие EEPROM-ячейки.
RECALL E2 [B8h]
Эта команда копирует данные из EEPROM в соответствующие места в блокнотной памяти scratchpad. Как отмечалось ранее, при включении питания эта операция происходит автоматически.
READ POWER SUPPLY [B4h]
Эта команда необходима для предоставления ведущему устройству информации о типе источника питания, который используется для питания датчика. При чтении временного слота датчик будет отвечать 0 если он питается паразитным способом, или 1-цей, если от внешнего источника питания.
Вот, собственно, и вся премудрость работы с датчиком температуры DS18B20. За более детальной информацией обращаемся в даташит (http://cxem.net/doc/mc/ds18b20.pdf). Теперь необходимо все это дело реализовать в железе.
Принципиальная схема устройства:
Сборочный чертеж печатной платы (извиняюсь за качество, делал лишь бы работало, для отладки):
Не забудьте правильно отзеркалить плату
Поскольку это макетка, я вытащил ее из старого проекта, поэтому на плате, приведенной выше – немного не то, что у меня (на своей я сейчас убрал все лишнее и оно стало точь-в-точь как на рисунках выше).
Вот что вышло у меня:
Получился этакий бутерброд
Исходный код программы был написан в среде разработки WinAVR. Я не старался использовать максимум готовых библиотек avr-gcc компилятора, а писал все, как говорится, «от руки». Моя цель – это не демонстрация виртуозного владения Си, а всего лишь пример, написанный за час, способный предоставить новичкам общее представление по работе с датчиком.
Устройство предназначено для использования в комнате, поэтому не предусматривает измерение отрицательных температур.