Взаимодействие ds18b20, однопроводного (1-wire) цифрового датчика температуры, с arduino

Введение

В данной статье я покажу вам, как собрать устройство, которое измеряет температуру и относительную влажность воздуха и посылает измеренные значения с помощью стандартного радиочастотного модуля 433 МГц. Датчик температуры и влажности, используемый в устройстве, – это DHT11.

Существует множество способов передачи небольшого объема данных с помощью Arduino или контроллеров ATMega. Один из них использует уже готовую библиотеку, подобную RCSwitch, Radiohead или VirtualWire. Кроме того, можно отправить необработанные данные с помощью встроенного в микроконтроллер модуля UART. Но использовать встроенный модуль UART не рекомендуется, так как приемник будет собирать и все помехи, и микроконтроллер будет работать не так, как предполагалось. В данной статье для передачи и приема данных я использую библиотеку VirtualWire. Эта библиотека работает с Arduino IDE 1.6.2 и 1.6.5.

Модуль передатчика 433 МГц, когда не передает данные, всё равно излучает радиочастотные колебания и передает шум. Он также может создавать помехи другим радиочастотным устройствам. Чтобы не допустить этого, я включаю его, когда необходимо передать данные, и выключаю его, когда передача закончена.

Программа

Программа передатчика

Сперва рассмотрим программу передающей части:

Для передачи влажности и температуры в одном сообщении я соединяю их вместе. Сначала данные считываются в переменную как целые числа, потом целые числа преобразовываются в массив символов, а затем они соединяются друг с другом. На приемной стороне данные будут разделены на отдельные символы. Делая это, я ограничиваю себя двумя цифрами градусов. Если датчик находится в среде с температурой менее 10°C, я буду получать на дисплее символы мусора. Например, если температура составляет 20°C, а влажность – 45%, то будет передаваться сообщение 2045, и всё хорошо. Если температура равна 9°C, а влажность – 78%, то передастся сообщение 978x, где «x» – случайный символ. Поэтому, если вы будете собирать данный беспроводной термометр, я советую вам изменить программу для передачи правильных данных, когда температура будет меньше 10°C.

Программа приемника

Интересный способ использования библиотеки LiquidCrystal – это создание пользовательских символов. С помощью я создал символ градусов. Таким же способом вы можете создать и свои собственные символы. Чтобы создать пользовательский символ или значок, вам необходимо объявить его, как массив из восьми байт, и «нарисовать», какие пиксели будут включены (1 – включен, 0 – выключен).

В функции вы создаете его с помощью . принимает два аргумента: номер позиции для хранения символа и массив байт, в котором определено, какие пиксели будут отображаться. В нашем случае это . Затем символ выводится на LCD с помощью функции .

Код

Вам нужно будет установить две библиотеки: OneWire и Dallas Temperature.

Установка библиотеки OneWire

  1. Распакуйте этот ZIP-файл. В результате у вас должна получиться папка под названием «OneWire-master».
  2. Переименуйте папку «OneWire-master» на «OneWire».
  3. Переместите папку «OneWire» в папку библиотек IDE Arduino.
  4. Откройте IDE Arduino.

Установка библиотеки DallasTemperature

  1. Распакуйте этот ZIP-файл. В результате у вас должна получиться папка под названием «Arduino-Temperature-Control-Library-master».
  2. Переименуйте папку «Arduino-Temperature-Control-Library-master» на «DallasTemperature».
  3. Переместите папку «DallasTemperature» в папку библиотек IDE Arduino.
  4. Наконец, откройте IDE Arduino.

После установки необходимых библиотек загрузите в IDE Arduino скетч, показанный ниже:

 1 /*********
 2   Автор - Руи Сантос (Rui Santos)
 3   Более подробно о проекте на: http://randomnerdtutorials.com 
 4   За основу взят пример «Dallas Temperature Library»
 5 *********/
 6 
 7 #include <OneWire.h>
 8 #include <DallasTemperature.h>
 9 
10 // контакт для данных подключаем к цифровому контакту 2 на Arduino: 
11 #define ONE_WIRE_BUS 2
12 
13 // создаем экземпляр класса OneWire, чтобы с его помощью
14 // общаться с однопроводным устройством
15 // (т.е. в нашем случае – с температурным датчиком):
16 OneWire oneWire(ONE_WIRE_BUS);
17 
18 // передаем объект oneWire объекту sensors: 
19 DallasTemperature sensors(&oneWire);
20 
21 void setup(void)
22 {
23   // запускаем последовательную коммуникацию (в отладочных целях): 
24   Serial.begin(9600);
25   // запускаем библиотеку:
26   sensors.begin();
27 }
28 
29 
30 void loop(void){ 
31   // вызываем функцию sensors.requestTemperatures(), 
32   // которая приказывает всем устройствам, подключенным к шине,
33   // выполнить конверсию температурных данных:
34 
35   sensors.requestTemperatures();
36   
37   Serial.print("Celsius temperature: ");
38   //  "Температура в Цельсиях: "
39   // почему «byIndex»? к одной шине может быть подключено 
40   // больше одного датчика; самое первое устройство на шине – это «0»:
41   Serial.print(sensors.getTempCByIndex()); 
42   Serial.print(" - Fahrenheit temperature: ");
43   //  " - Температура в Фаренгейтах: "
44   Serial.println(sensors.getTempFByIndex());
45   delay(1000);
46 }

Наконец, открываем монитор порта IDE Arduino на скорости 9600 бод. В нем должны появиться данные о температуре – в градусах Цельсия и Фаренгейта.

Замена датчика

Чтобы начать ремонт датчика охлаждающей жидкости, нужно определить его расположение. Чаще всего он установлен возле термостата или радиатора, в некоторых случаях бортовой компьютер использует показания с обоих датчиков или одного из них, в зависимости от марки авто и его модели. Например, так датчик расположен в Рено, Шевроле, Ситроен, Шкода, Чери, КИА, Субару Импреза.

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

Фото — датчик температуры на приборной панели

Зависимо от года выпуска машины, а также её марки, многие автолюбители отмечают возрастание затрат топлива у двигателя. Но при этом нужно понимать, что дизель так не определишь (УАЗ, ПАЗ и прочие). Если у Вас механика, а не компьютерная система управления, то вот сигналы того, что нужно купить новый датчик температуры охлаждающей жидкости:

  1. Автомобиль стал потреблять топлива больше, чем обычно;
  2. Когда машина заводится, и двигатель достигает своей максимальной температуры, он глохнет;
  3. Появились проблемы с запуском;
  4. Из трубы глушителя выходит черный дым.

Рассмотрим, как осуществляется замена датчика температуры охлаждающей жидкости типа G62 на автомобиле Kia Sportage с двигателем объемом 2 литра. Аналогичная инструкция также пригодится при ремонте Acura, BMW, Buick, Chevrolet, Ford, Toyota, Volkswagen, Ваз 2110/2112 инжектор, Рено Гранд Сценик и прочих.

  1. Чтобы добраться к датчику, Вам нужно снять воздуховод, который охлаждает корпус воздушного фильтра и присоединяется к радиатору при помощи двух болтовых соединений и шланга подачи воздуха. Открутите болты и снимите хомут, аккуратно достаньте всю систему. Отключите от датчика электрические провода, чтобы корректно провести замеры сопротивления. Установите мультиметр на режим омметра и задайте значение в 1000 Ом. Подключите контакты устройства к положительному и отрицательному контактам. Нормальное сопротивление должно быть в пределах 2700 Ом при выключенном моторе. Для проверки датчика при включенном движке, нужно убрать тестер подальше от вращающихся частей авто;

    Фото — проверка датчика мультиметром

  2. Убедившись, что датчику температуры необходим ремонт, нужно отсоединить его от двигателя. Чтобы продолжить снятие, Вы должны предварительно слить антифризную жидкость из радиатора при помощи сливного клапана. После проверить еще раз радиатор и контакты датчика и открутить регулирующий болт как на фото;

    Фото — снятие датчика

  3. Сборка производится в обратной форме. Нужно помнить, что практически основная характеристика датчика температуры охлаждающей жидкости – это материал шайбы. Если шайба медная, то резьбу сигнализатора не нужно обрабатывать герметиком, в противном случае обязательно смажьте устройство.

    Фото — медный температурный датчик

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

Проверка датчика температуры является несложной процедурой, с которой может справиться даже начинающий автолюбитель. Датчик температуры охлаждающей жидкости (сокращенно — ДТОЖ) представляет собой термистор, то есть, резистор, изменяющий значение своего внутреннего сопротивления в соответствии с температурой, куда помещен его исполнительный элемент. Чаще всего для этого используют мультиметр (другое название — тестер, «цэшка»), который в состоянии измерять значение электрического сопротивления в цепи.

Использование и применение

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

  1. Определение t воды в аквариуме для рыб. Особенно актуальный способ в летнюю жару. Сенсор среагирует на показатель, который оказался за пределами нормы и оповестит вас об этом по каналам связи. Естественно, можно подвязать дополнительное действие при нагревании воды, например, запускать Аэрацию.
  2. Оповещение о нагретой воды в бойлере. При достижении определенной t в бойлере, на компьютер, или подключенный LCD-дисплей вам поступит уведомление. Можно с схему добавить реле, которое будет отключать бойлер. Конечно, современные водонагревающие устройства могут оснащаться автоматикой и термостатом, но часто с помощью дополнительных датчиков реализуются более сложные системы управления умным домом, чем автономная автоматика водонагревателя.
  3. Замер температуры в холодильной витрине. Комплект из нескольких датчиков на достаточно простой схеме может замерять и выдавать температуру в каждой секции витрины. Выставленный диапазон значений может указывать, когда температура вышла за пределы нормы и уведомлять о нарушениях стационарного режима.
  4. Замер точного градуса воды в чайнике. Выпитый натощак стакан теплой воды помогает запустить желудок. При этом нужно выпить подогретую до температуры тела воду. Самодельный термодатчик способен решить подобную задачу, определив градус с точностью до 0,5 °С.
  5. Определение температуры воды в ванной, джакузи, бассейне. Набирая воду для водных процедур, нужно, чтобы она была комфортной. С помощью терморегулятора Arduino можно определить комфортный уровень и подобрать нужный градус для себя. Дополнительно, пороговыми значениями температуры можно реагировать на снижение или увеличения t воды и держать все время воду подогретой.

На что они похожи?

На Рисунке 1 приведен пример подлинного датчика DS18B20 производства Maxim в корпусе TO-92.

Рисунок 1. Пример маркировки оригинальных датчиков DS18B20 на корпусе TO-92.

На момент написания статьи (2019) маркировка оригинальных  микросхем Maxim наносилась лазером, а не печаталась.

  • Первые две строки, DALLAS 18B20, указывают, что это датчик DS18B20 (Dallas Semiconductor является первоначальным производителем), датчики только с паразитным питанием маркируются DALLAS 18B20P.
  • Знак «+» в четвертой строке означает, что компонент соответствует требованиям RoHS.
  • 3-я строка указывает год выпуска и номер недели в году (в данном случае это 32 неделя 2019 года).
  • Последние два символа в строке 3 указывают ревизию кристалла (на данный момент С4).
  • В строке 4 трехзначное число, за которым следуют два символа, является формой кода партии, которая позволяет Maxim отследить историю производства.
  • В микросхемах, выпущенных в 2016 году или позже, встречалась только комбинация символов AB и AC .

Маркировка внутри отступа на задней части:

  • Маркировка P (Филиппины?). На всех последних микросхемах (2016 и моложе) и на большинстве микросхем, выпуск которых уходит, как минимум, в 2009 год.
  • Маркировка THAI <буква> (Таиланд?), где <буква> — это одна из I, J, K, L, M, N, O, S, T, U, V, W, X, и, возможно, других, по крайней мере, на некоторых микросхемах произведенных в 2011 году . Шрифт <буквы>  отличается от шрифта символов, составляющих слово THAI.

Из того, что было автором замечено на корпусе TO-92, только для микросхем с маркировкой P в отступе на задней части один код партии соответствует коду даты производства. Это не относится к микросхемам с маркировкой THAI в отступе.

Способ 1: чтение показаний DS18B20 по индексу

В этом методе библиотека Dallas Temperature при инициализации обнаруживает все датчики, использующие одну шину. Она рассматривает всю шину как массив датчиков и присваивает им индексы. Поэтому мы можем точно выбрать каждый датчик по его индексу и прочитать показания температуры.

Вывод вышеприведенного скетча выглядит так:

Рисунок 5 – Вывод показаний нескольких датчиков DS18B20 индексным методом

Объяснение кода

Скетч начинается с включения библиотек, объявления вывода, к которому подключена шина датчиков, и создания объекта библиотеки .

В настроечной части кода мы сначала вызываем функцию . Она инициализирует шину и обнаруживает все DS18B20, присутствующие на ней. Затем каждому датчику присваивается индекс и устанавливается разрешение в 12 бит.

Затем мы вызываем функцию , чтобы получить количество устройств, найденных на шине.

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

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

Исходный код программы (скетча)

Перед тем как загружать программу в плату Arduino необходимо скачать и извлечь из архива следующие библиотеки, необходимые для работы проекта:

  • 1-Wire bus;
  • Dallas Temperature (необходима для считывания и расчета температуры с датчика).

В скетче программы необходимо подключить заголовочные файлы этих библиотек.

Arduino

/********************************************************************/
// сначала необходимо подключить следующие библиотеки в проект
#include <OneWire.h>
#include <DallasTemperature.h>
/********************************************************************/
// контакт данных датчика подключен к контакту 2 платы Arduino
#define ONE_WIRE_BUS 2
/********************************************************************/
//создаем объект класса oneWire для работы с датчиком и его взаимодействия
//с другими OneWire устройствами (не только температурными датчиками Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
/********************************************************************/
// связываем наш объект oneWire с библиотекой Dallas Temperature.
DallasTemperature sensors(&oneWire);
/********************************************************************/
void setup(void)
{
// инициализируем последовательную связь со скоростью 9600 бод
Serial.begin(9600);
Serial.println(«Dallas Temperature IC Control Library Demo»);
// инициализируем датчик
sensors.begin();
}
void loop(void)
{
// вызываем функцию sensors.requestTemperatures() для запроса значения
// температуры со всех устройств, подключенных к шине
/********************************************************************/
Serial.print(» Requesting temperatures…»);
sensors.requestTemperatures(); // передаем команду на запрос температуры
Serial.println(«DONE»);
/********************************************************************/
Serial.print(«Temperature is: «);
Serial.print(sensors.getTempCByIndex(0)); // почему вводится индекс «byIndex»?
// потому что к одной и той же шине может быть подключено несколько датчиков DS18B20.
// 0 относится к первому датчику (микросхеме) на шине (проводе)
delay(1000);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

/********************************************************************/
// сначала необходимо подключить следующие библиотеки в проект
#include <OneWire.h>
#include <DallasTemperature.h>
/********************************************************************/
// контакт данных датчика подключен к контакту 2 платы Arduino
#define ONE_WIRE_BUS 2
/********************************************************************/
//создаем объект класса oneWire для работы с датчиком и его взаимодействия
//с другими OneWire устройствами (не только температурными датчиками Maxim/Dallas temperature ICs)

OneWireoneWire(ONE_WIRE_BUS);

/********************************************************************/
// связываем наш объект oneWire с библиотекой Dallas Temperature.

DallasTemperaturesensors(&oneWire);

/********************************************************************/

voidsetup(void)

{

// инициализируем последовательную связь со скоростью 9600 бод

Serial.begin(9600);

Serial.println(«Dallas Temperature IC Control Library Demo»);

// инициализируем датчик

sensors.begin();

}

voidloop(void)

{

// вызываем функцию sensors.requestTemperatures() для запроса значения

// температуры со всех устройств, подключенных к шине

/********************************************************************/

Serial.print(» Requesting temperatures…»);

sensors.requestTemperatures();// передаем команду на запрос температуры

Serial.println(«DONE»);

/********************************************************************/

Serial.print(«Temperature is: «);

Serial.print(sensors.getTempCByIndex());// почему вводится индекс «byIndex»?  

// потому что к одной и той же шине может быть подключено несколько датчиков DS18B20.  

// 0 относится к первому датчику (микросхеме) на шине (проводе)

delay(1000);

}

На следующем рисунке показано тестирование работы проекта.

Подключение DS18B20 к Arduino

Датчик подключается элементарно.

Контакт GND с DS18B20 подключается к GND на Arduino.

Контакт Vdd с DS18B20 подключается к +5V на Arduino.

Контакт Data с DS18B20 подключается к любому цифровому пину на Arduino. В данном примере используется пин 2.

Единственное, что необходимо добавить из внешней дополнительной обвязки — это подтягивающий резистор на 4.7 КОм.

Схема подключения DS18B20 к Arduino показана ниже (в скетче, который будет приведен ниже, проверьте строки 10 и 65. В них указаны пины, к которым вы подключали контакт сигнала с датчика и режим питания!):

На рисунке ниже приведена фотография нашей простой схемы «в жизни».

Паразитное и обычное питание

Есть альтернативный вариант подключения — так называемое «паразитное» подключение. В этом случае мы не будем подключать пин +5V к пину Vdd на датчике DS18B20. Вместо этого мы подключим контакт Vdd с датчика DS18B20 к GND. Преимущества такого подключения очевидны: нам понадобится всего два коннектора!

Недостатком такого подключения является ограничение количества одновременно подключаемых сенсоров. Кабели для подключения должны быть максимально короткими!

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

Программный код термостата Arduino

Аналогично, как и в схеме подключения, код каждого термостата Arduino будет немного отличаться. Его нужно адаптировать к потребностям тепловой сети.

Эту схему можно модернизировать, например, добавить такие функции:

  1. Датчик движения для включения и выключения источника нагрева, в зависимости от присутствия жителей.
  2. Режим «АВТО», автоматическое ведение тепловым процессом.
  3. Внешние датчики для измерения температуры в помещении в разных местах.
  4. LED-экран для контроля температуры.

Таким образом, функциональные возможности терморегулятора с Arduino огромны. Они могут учесть, практически все, внутридомовые системы отопления. Современная промышленность наладила выпуск комплектующих изделий для такой схемы управления, а используя возможности Arduino и фреймворка MySensors, домашняя «умная» автоматики может быть реализована в каждом доме своими руками.

Почему стоит переживать?

Помимо неких эстетических соображений, некоторые из поддельных датчиков фактически не работают в режиме паразитного питания, имеют высокий уровень шума, погрешность измерения вне заявленной полосы ±0.5 °С, не содержат энергонезависимую память (EEPROM), имеют ошибки и несоответствующие нормы отказов, или отличаются по другими параметрам из спецификации производителя. Понятно, что проблемы не настолько велики, чтобы отговаривать людей покупать датчики на eBay, но может быть полезно знать реальные характеристики, когда получаемые данные важны или измерения выполняются в сложных условиях.

What we need to get the Arduino and DS18B20 to work

Software
  • Of course we will need the Arduino IDE software
  • OneWire library for the Arduino and DS18B20 (will save you a lot of work)
  • Our own sketch …

The Arduino IDE can be downloaded from the Arduino website (highly recommended), or from Tweaking4All (this version might be outdated by the time you read this article).

The OneWire Library can be downloaded from the OneWire Project Page (highly recommended to get the latest version) or you can download v2.2 from Tweaking4All.

Download — Arduino Windows

Filename:  arduino-ide-windows.exe
Platform:  Microsoft Windows
Version:  1.8.8
File size:  110.7 MB
Date:  2018-01-02
 Download Now 
Send me a cup of Coffee    

Download — Arduino MacOS X

Filename:  arduino-ide-macosx.zip
Platform:  Apple macOS
Version:  1.8.8
File size:  189.7 MB
Date:  2018-01-02
 Download Now 
Send me a cup of Coffee    

Download — Arduino Linux 32 bit

Filename:  arduino-ide-linux32.tar.xz
Platform:  Linux
Version:  1.8.8
File size:  124.1 MB
Date:  2018-01-02
 Download Now 
Send me a cup of Coffee    

Download — Arduino Linux 64 bit

Filename:  arduino-ide-linux64.tar.xz
Platform:  Linux
Version:  1.8.8
File size:  121.7 MB
Date:  2018-01-02
 Download Now 
Send me a cup of Coffee    

Download — OneWire

Filename:  OneWire.zip
Platform:  Undefined
Version:  2.2
File size:  15.1 kB
Date:  2014-03-19
 Download Now 
Send me a cup of Coffee    
Harware
  • At least one DS18B20 digital temperature sensor (from , AdaFruit or eBay for example)
  • An Arduino (I used an Uno R3 – for example from , eBay, Arduino or AdaFruit)
  • 3 jumper wires
  • Breadboard (see our Breadboard article)
  • USB cable for the Arduino

The USB cable is of course only needed to program and power the Arduino during development.
When we run the Arduino computer independent you might want to look for a suitable power supply.

Датчик DS18B20: характеристики

  • диапазон измерения температуры -55 … +125 °C;
  • погрешность сенсора не превышает 0,5 °C;
  • разрешающая способность достигает 0,0625 °C;
  • сенсор DS18B20 откалиброван при изготовлении;
  • можно подключить до 127 датчиков на одной линии;
  • для подключения требуется только 3 провода.


Подключение и распиновка термодатчика ds18b20

Цифровой датчик DS18B20 отправляет данные по Wire шине и может работать на одной линии с множеством других устройств. Каждый датчик имеет свой персональный 64-битный код, позволяющий микроконтроллеру Arduino общаться на одной шине сразу с несколькими сенсорами. Датчик преобразует температуру окружающей среды в цифровой код, т.е. для подключения не требуется дополнительного АЦП.

Датчик может быть выполнен в нескольких вариантах (смотри фото выше), от этого будет зависеть только схема подключения термодатчика к Arduino NANO или UNO. В первом случае необходимо использовать подтягивающий резистор на 4.7 кОм. Датчик, в виде готового модуля уже имеет резистор. Третий вариант — это датчик в герметичном корпусе, который можно смело использовать в горячей воде.

Как определить?

Если ПЗУ (ROM) микросхемы не соотвествует шаблону 28-xx-xx-xx-xx-00-00-xx, то микросхема DS18B20 является клоном .

Также автор предоставляет два скетча Arduino для тестирования датчиков (доступны для скачивания в разделе загрузок):

  • discover_fake_DS18B20.ino – выполняет некоторые безопасные тесты и сообщает, есть ли какие-то отклонения от подлинного DS18B20. Данный скетч не предназначен для работы с датчиком в режиме паразитного питания.
  • classify_fake_DS18B20.ino – это минимальная реализация классификации датчиков по определенным семействам (см. ниже), которая основана на ответах на недокументированные коды функций. Результат работы теста достаточно точный. Автор предупреждает, что работа данного скетча может вывести микросхему DS18B20 из строя, действуете на свой риск!

Wrapping Up

The DS18B20 temperature sensor is a one-wire digital sensor. To use this sensor with the Arduino, you need the OneWire and the DallasTemperature libraries. You can use one sensor or multiple sensors on the same data line because you can identify each sensor by its unique address.

Now, you can take this project further and display your sensor readings in an OLED display, for example.

We have more tutorials for other Arduino compatible sensors that you may find useful:

  • DHT11/DHT22 Humidity and Temperature Sensor With Arduino
  • BME280 (Temperature, Humidity, Pressure) with Arduino
  • Relay Module with Arduino
  • Ultrasonic Sensor HC-SR04 with Arduino

We hope you’ve found this guide useful.

If you want to learn more about Arduino, take a look at our resources:

  • Arduino Step-by-step projects course
  • Free Arduino Projects and Tutorials
  • Arduino Mini Course

Thanks for reading!

Updated July 2, 2019

Other functions of the DallasTemperature Arduino library

The DallasTemperature library has some other useful functions built-in that I have not yet covered in the examples above. I have therefore listed a few of them below:

setResolution()

This function can be used to set the resolution of the temperature-to-digital conversion. As I mentioned in the introduction, this can be set to 9, 10, 11, or 12 bits, corresponding to increments of 0.5 °C, 0.25 °C, 0.125 °C, and 0.0625 °C, respectively.

You might wonder why you would want to change the resolution, isn’t higher always better? One advantage of selecting a lower resolution is that the temperature-to-digital conversion takes a lot less time. This means that you can take more temperature readings in the same amount of time.

From the datasheet I got the following information:

Resolution Temperature increment Max conversion time
9-bit 0.5 °C 93.75 ms
10-bit 0.25 °C 187.5 ms
11-bit 0.125 °C 375 ms
12-bit 0.0625 °C 750 ms

The DallasTemperature library allows you to set the resolution with the function . This function can be added to the setup or loop section of your code.

You can set the resolution for all the connected sensors as follows:

// Set the resolution for all devices to 9, 10, 11, or 12 bits:
sensors.setResolution(9);

Or you can set it individually for a specific sensor by specifying its address:

// Addresses of DS18B20 sensors connected to the 1-Wire bus
byte sensor1 = {0x28, 0x18, 0xB4, 0x49, 0x0C, 0x00, 0x00, 0x7C};

// Set the resolution of a specific device to 9, 10, 11, or 12 bits:
sensors.setResolution(sensor1, 9);

toFahrenheit()

This function can be used to convert the temperature in degrees Celsius to Fahrenheit.

float tempC = sensors.getTempCbyIndex(0);
float tempF = DallasTemperature::toFahrenheit(tempC);

Принципиальные схемы

Передатчик

Передающая часть беспроводного термометра на ATMega328p
(для увеличения масштаба можно кликнуть по картинке правой кнопкой мыши и выбрать «Открыть ссылку/изображение в новой вкладке/новом окне»)

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

Приемник

Приемная часть беспроводного термометра на Arduino Mega
(для увеличения масштаба можно кликнуть по картинке правой кнопкой мыши и выбрать «Открыть ссылку/изображение в новой вкладке/новом окне»)

Пожалуйста, обратите внимание, что приемник построен на базе платы Arduino Mega, которая не изображена на схеме. Для подключения платы Arduino Mega соедините с ней радиочастотный модуль и LCD дисплей согласно метка на схеме

DHT11 против DHT22/AM2302

У нас есть две версии серии датчиков DHTxx. Они выглядят немного похоже и имеют одинаковую распиновку, но имеют разные характеристики. Вот подробности.

DHT22 является более дорогой версией, которая, очевидно, имеет лучшие характеристики. Диапазон измерения температуры составляет от -40°C до +80°C с точностью ±0,5 градуса, а диапазон температур DHT11 составляет от 0°C до 50°C с точностью ±2 градуса. Также датчик DHT22 имеет более широкий диапазон измерения влажности, от 0 до 100% с точностью 2-5%, в то время как диапазон измерения влажности DHT11 составляет от 20 до 80% с точностью 5%.

Сравнение спецификаций DHT11 и DHT22/AM2302
 
  DHT11 DHT22
Рабочее напряжение от 3 до 5 В от 3 до 5 В
Максимальный рабочий ток 2,5 мА макс 2,5 мА макс
Диапазон измерения влажности 20-80% / 5% 0-100% / 2-5%
Диапазон измерения температуры 0-50°C / ± 2°C от -40 до 80°C / ± 0,5°C
Частота выборки 1 Гц (чтение каждую секунду) 0,5 Гц (чтение каждые 2 секунды)
Размер корпуса 15,5 мм х 12 мм х 5,5 мм 15,1 мм х 25 мм х 7,7 мм
Преимущество Ультра низкая стоимость Более точный

Хотя DHT22/AM2302 более точен и работает в большем диапазоне температур и влажности; есть три вещи, в которых DHT11 сильно превосходит DHT22. Он более дешевый, меньше по размеру и имеет более высокую частоту выборки. Частота выборки DHT11 составляет 1 Гц, то есть одно чтение каждую секунду, в то время как частота выборки DHT22 составляет 0,5 Гц, то есть одно чтение каждые две секунды.

Рабочее напряжение обоих датчиков составляет от 3 до 5 вольт, в то время как максимальный ток, используемый во время преобразования (при запросе данных), составляет 2,5 мА. И самое приятное, что датчики DHT11 и DHT22/AM2302 являются «взаимозаменяемыми», то есть, если вы создаете свой проект с одним датчиком, вы можете просто отключить его и использовать другой датчик. Ваш код, возможно, придется немного изменить, но, по крайней мере, схема не изменится!

Для получения более подробной информации обратитесь к техническим описаниям датчиков DHT11 и DHT22/AM2302.

Распиновка DHT11 и DHT22/AM2302

Датчики DHT11 и DHT22/AM2302 довольно легко подключаются. У них есть четыре вывода:

Рисунок 5 – Распиновка датчиков температуры и влажности DHT11 и DHT22/AM2302

  • Вывод VCC обеспечивает питание датчика. Хотя допускается напряжение питания в диапазоне от 3,3 до 5,5 В, рекомендуется питание 5 В. В случае источника питания 5 В, вы можете держать датчик на расстоянии до 20 метров от источника питания. Однако при напряжении питания 3,3 В длина кабеля не должна превышать 1 метра. В противном случае падение напряжения в линии приведет к ошибкам измерения.
  • Вывод Data используется для связи между датчиком и микроконтроллером.
  • NC не подключен
  • GND должен быть подключен к земле Arduino.

Подключение датчика температуры DS18B20 к Arduino

Достаточно теории, давайте практиковаться! Давайте подключим DS18B20 к Arduino.

Подключение довольно простое. Начните с подключения VDD к 5V выходу на Arduino, и GND – к земле.

Затем подключите оставшийся цифровой сигнальный вывод DQ к цифровому выводу 2 на Arduino. Вам также необходимо добавить подтягивающий резистор 4,7 кОм между сигнальным выводом и выводом питания, чтобы обеспечить стабильную передачу данных (внутренние подтягивающие резисторы на ардуино не работают).

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

Рисунок 3 – Подключение датчика температуры DS18B20 к Arduino

Если вы используете водонепроницаемую версию DS18B20, подключите красный провод к 5V, черный провод соединится с землей, а желтый провод – данные, которые поступают на цифровой вывод 2 на Arduino. Вам всё еще нужно подключить подтягивающий резистор 4,7 кОм между линией данных и шиной 5 В.

Рисунок 4 – Подключение водонепроницаемого датчика температуры DS18B20 к Arduino