Arduino датчик температуры

Считываем показания датчика DS18B20 (DS18S20)

Рассмотрим как при помощи Arduino считывать показания с цифрового датчика температуры DS18B20 или DS18S20. В настоящий момент м/с DS18B20 фирмы Dallas является наиболее распространенным и доступным цифровым датчиком температуры. Работает по протоколу 1-wire. Даташит датчика: DS18B20

Датчик может запитываться двумя способами - внешним питанием (3 провода) или паразитным (питание от шины, 2 провода). Расписывать эти режимы не буду, все есть в документации. Отмечу лишь то, что в данном проекте мы будем использовать нормальное (внешнее) питание датчика.

Схема подключения датчика DS18B20 к Arduino приведена ниже. Подтягивающий Pull-Up резистор номиналом 4.7 кОм (5 кОм) включается между выводом DQ (Data) и питанием датчика Vdd.

Рабочий скетч представлен ниже. Необходима библиотека OneWire, последнюю версию которой можно скачать здесь .

После установки библиотеки, в меню появиться рабочий пример, которым и можно воспользоваться.

Мониторинг температуры на Arduino и Cosmo GSM Connect

Разберем пример устройства позволяющего удаленно отслеживать показания сенсоров, например — датчиков температуры. В качестве аппаратной части устройства будем использовать — Arduino (Uno или другие версии), GSM-шилд «Cosmo GSM Connect », датчики температуры.

Основные возможности системы.

  • Получать СМС при понижении/повышении температуры, причем индивидуально для каждого датчика.
  • Получать СМС при возвращении температуры в заданный интервал.
  • Запрашивать по дозвону текущие показания всех датчиков.

При превышении заданного порогового значения температуры произойдет отправка тревожного СМС-сообщения. При возвращении показаний датчика в нормальный температурный диапазон — отправка соответствующее СМС уведомление. Также реализуем возможность получения показания датчиков по запросу.

Для получения точных значений температуры будем использовать цифровой температурный датчик DS18B20. Его диапазон измерений от –55°C до +125°C и точность 0.5°C в диапазоне от –10°C до +85°C. DS18B20 обменивается данными по 1-Wire шине в 9-12 битном (программируется пользователем) коде с ценой младшего разряда от 0.5°C до 0.0625°C и при этом датчик может быть как единственным устройством, так и работать в группе.

Питание датчика возможно двумя способами — внешнее и паразитное питание. При паразитном питании максимально измеряемая температура составляет + 100 °C. Для расширения диапазона температур до + 125 °C необходимо использовать внешнее питание.

Сенсор DS18B20 отличается наличием во внутренней энергонезависимой памяти (EEPROM) программируемых установок по превышению температуры (TH) и по понижению температуры (TL). Внутренний регистр флага будет выставлен, когда измеренная температура больше чем TH или меньше чем TL.

Итак, возьмем два датчика DS18B20 и подключим их по паразитной схеме питания к 8 пину Ардуино.

Воспользуемся функциональной возможностью встроенной в датчик EEPROM и укажем для каждого сенсора свой диапазон температур. При пересечении этого диапазона, как в большую, так и в меньшую сторону — произойдет срабатывание регистра и в этом случае будем производить отправку тревожного СМС.

Реализуем, чтобы по возвращению температуры в заданные параметры, также отправлялось сообщение о нормализации пареметров.

Для работы с датчиками DS18B20 скачайте и установите библиотеку DallasTemperature .

Для работы с шилдом «Cosmo GSM Connect » скачайте и установите библиотеку GSM

Итак, запускаем Arduino IDE, копируем в него следующий скетч.

Редактируем номер телефона (const char RemoteID[]), с которого можно будет производить дозвон и на который будут приходить СМС. При необходимости можно убрать проверку на номер и тогда на все входящие вызовы шилд будет отправлять смс со значениями датчиков.

Задание температурного диапазона для датчика "sensor_1" от +30 до -10 градусов цельсия, выглядит следующим образом:

Arduino датчик температуры arduino

Аналогичным способом задаем диапазон срабатывания и для второго датчика. Уже в том случае, как будет зафиксировано значение вне заданного диапазона сработает Alarm.

Таким образом, получилась несложная система мониторинга температуры, позволяющая устанавливать каждому температурному датчику свой диапазон срабатываний.

Аналоговые датчики температуры и Arduino

В предыдущей статье я уже упоминал о том, как устроена аналоговая микросхема-датчик температуры, а сейчас предлагаю перейти к практике.

Обычно, мы получаем сенсор в корпусе TO-92 (не перепутайте с транзистором):

На фото - популярный датчик TMP36 от Analog Devices. Как видите, выводов три, и если смотреть в положении "надписью к нам, ножками вниз", то получается (слева направо): питание (Vs), выход (Vout), земля (GND). Главная особенность таких датчиков - значение напряжения на выходе однозначно определяет температуру, независимо от напряжения питания (!). Последнее может варьироваться от 2,7 до 5,5 Вольт.

Это очень удобно, и позволяет нам выполнить проверку датчика вне схемы, если под рукой есть элемент питания 3В, хотя бы даже и батарейка CR2032. В активном состоянии датчик потребляет не более 50 мкА, для проверки в течение двух-трех минут вполне хватает. Собираем схему:

Теперь, подключая мультиметр к выходу датчика (разумеется, в режиме измерения напряжения), мы будем наблюдать напряжение около 0,78 В, что соответствует 28 °С.

Чтобы убедиться в работоспособности датчика, его надо слегка нагреть, отлично подойдут:

  • пальцы рук (температура вашего тела - 36,6 °С)
  • дующий горячим возухом фен (можно довести и до 50 °C)
  • кошка (температура 38-39 °C)

Показания мультиметра должны расти при нагревании и уменьшаться при охлаждении.

Конечно, даже простого пальца будет достаточно, чтобы увидеть результат:

Теперь подключим датчик к Arduino. Пусть выход будет подключаться к analog0, а питание - к стабилизированному питанию +5В Arduinio:

Для чтения придется использовать АЦП, а ему, как известно, требуется опорное напряжение, надо выбрать один из трех вариантов: питание, внешнее на AREF или внутреннее.

Напряжение на выходе датчика TMP36 меняется от 100 мВ до 2В, так что использовать внутренний источник опорного напряжения 1,1В не получится. Хотя, такое значение у источника МК ATmega168/328, а вот в ATmega8 это будет уже 2,56 В. Гораздо проще ориентироваться на стабилизированные +5 В, которые поступают от USB.

Чтобы правильно перевести показания датчика в температуру, надо сначала понять, какое напряжение мы прочитали. АЦП возвращает число от 0 до 1023, при этом 0 = 0В, 1023 = 5В для нашего случая. Поэтому:

voltage = 5 В / 1024 * sensor

Заглянем в документацию на датчик: там оговаривается, что изменение на один градус цельсия соответствует изменению на 10 мВ, при этом 500 мВ будет соответствовать температуре 0°C. Получаем формулу:

tempC = (voltage - 0.5) * 100

Одно маленькое замечание к тексту скетча: значение опорного напряжения надо писать именно "5.0". чтобы компилятор случаем не решил разделить 5 на 1024 целочисленным делением и не получил пожизненный ноль в итоге.

Вернемся к вопросу о точности. Наш АЦП имеет шаг измерения 4,9 мВ, в то время как сам датчик имеет погрешность ±1°C, или ±10 мВ. Таким образом, даже если мы понизим опорное напряжение, например, до 3,3 В и получив таким образом шаг преобразования 3,3 / 1024 = 3,2 мВ, это повышение точности не спасет нас от ошибки самого сенсора. С другой стороны, напряжение питания +5 В тоже может запросто "гулять" ±5%, но в итоге это порождает ту же самую ошибку ±10 мВ. Таким образом, как ни крути, для данной схемы погрешность измерения будет не менее ±2°C. Из этого следует, кстати, забавный метрологический вывод: дробную часть можно отбрасывать ;)

Рекомендуем также прочитать
Автономный датчик уровня Геолинк АДУ-02
Нужно купить стартер акцент, если нужно ехать срочно
Таблица сопротивления датчика температуры замыкание на "землю" •Проверьте, что напряжение расходомера воздуха соответствует его температуре. При этом потребуется термометр.
Схема системы управления двигателем ВАЗ-2111 1 – реле зажигания; 2 – аккумуляторная батарея; 3 – выключатель зажигания; 4 – нейтрализатор;
Запчасти Калуга