Способы подключения датчика DS18B20

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

Ds18b20

Описание датчика ds18b20 и его характеристики

DS18B20 — это датчик, отслеживающий изменения терморежимов. Он обладает следующими характеристиками:

  1. Широкий диапазон измерения шкалы температуры: -55 …+125°С. Пользователь имеет возможность самостоятельно задавать и изменять границы, прибор будет давать сигнал о выходе температуры за их пределы.
  2. Высокая точность измерения. Погрешность сенсора — не более 0,5°C. Датчик калибровали уже в процессе изготовления, никаких дополнительных настроек впоследствии задавать не нужно.
  3. Разрешающая способность — до 0,0625°C. Задается с помощью программы, параметр достигается при максимальном разрешении 12 бит.
  4. Последовательный протокол передачи информации. Чтобы подсоединить термодатчик к микроконтроллеру, необходимы лишь 3 кабеля.
  5. На 1 линию связи есть возможность подсоединить до 127 датчиков.
  6. Способность автоматически изменять точность измерений и пути взаимодействия с контроллером.
  7. Возможность сократить количество проводов до 2 за счет схемы с паразитным питанием, задействовав лишь 1 пин.

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

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

Типы корпусов

Существуют 3 разновидности корпуса:

  • 8-Pin SO (150 mils);
  • 8-Pin SOP;
  • 3-Pin TO-92.

От этих вариантов зависит, каким окажется способ подсоединения термодатчика к Arduino NANO или UNO.

Arduino NANO

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

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

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

Для корпуса TO-92 необходимо ориентироваться на цвет кабелей. Черный соответствует заземлению, красный отвечает за питание, белый, желтый или синий проводят сигнал.

Места продажи

Датчик продается во всех российских интернет-магазинах специального профиля с «Ардуино». Но приобрести устройство на «Алиэкспрессе» выгоднее финансово: одна штука стоит в пределах 2 $.

Особенности цифрового DS18B20

Прибор обладает следующими особенностями:

  • питание требует напряжения от 3,3 до 5 В;
  • в наличии опция сигнала тревоги;
  • у каждого устройства есть неповторимый серийный код;
  • не нуждается во вспомогательных внешних дополняющих;
  • получение и выдача сведений осуществляется по протоколу OneWire.

DS18B20

Для индикаторов возможен режим паразитного/фантомного питания.

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

Схема подключения

Есть 2 схемы подключения:

  • режим питания с внешним источником;
  • паразитное/фантомное питание.

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

Контакт GND с устройством подключается к GND на Arduino.

Контакт Vdd подсоединяется к +5V на Arduino.

Контакт Data подсоединяется к одному из цифровых пинов на Arduino.

Схема подключения

Второй тип требует наличия двух проводов. Это более эффективно в тех случаях, когда следует разместить устройство на большом расстоянии от контроллера.

Контакт GND подсоединяется к GND на Arduino.

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

Работа датчика после подключения осуществляется следующим образом:

  1. Инициализация — датчик получает импульс от основного устройства и должен отправить ответный, сигнализирующий о готовности приступить к работе.
  2. Запись данных — они отправляются в устройство.
  3. Чтение сведений — принятие информации от индикатора.

Датчики подсоединяются к любому из свободных выходов — аналоговому либо цифровому. Несколько подключаются параллельно.

Скетч для датчика

Чтобы получить архив скетчей следует скачать библиотеку OneWire, на основе которой функционирует программа.

Процесс извлечения сведений о температуре в скетче заключается в следующих шагах:

  1. Определение адреса устройства.
  2. Проверка подключения.
  3. Отправка команды, где прописано требование считать температуру и выдать полученные сведения в регистр.
  4. Подача команды считать сведения из регистра.
  5. Отправка полученных сведений в «монитор порта».
  6. Конвертация в градусы по Цельсию/Фаренгейту.

Схема подключения

Последнее выполняется по мере необходимости.

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

Скетч для одного датчика составляется подобным способом:

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
#include <OneWire.h>                            // библиотека для протокола 1-Wire
#include <DallasTemperature.h>                  // библиотека для действий с устройством
#define ONE_WIRE_BUS 5                          // сигнальный провод
 
OneWire oneWire(ONE_WIRE_BUS);                  // создание объекта для OneWire
DallasTemperature sensor(&amp;oneWire);         // создание объекта для работы с библиотекой DallasTemperature
 
void setup()
{
	Serial.begin(9600);                         // инициализация Serial-порта
	sensor.begin();                             // начало действий с датчиком
	sensor.setResolution(12);                   // установка разрешения от 9 до 12 бит
}
 
void loop()
{
	float temperature;                          // переменная для сохранения сведений о температуре
	sensor.requestTemperatures();               // отправка запроса на замер температуры
 
	temperature = sensor.getTempCByIndex(0);    // считывание сведений из регистра
 
	Serial.print("Temp C: ");                   // вывод температуры в Serial-порт
	Serial.println(temperature);
	delay(1000); 
}

Распиновка, включающая код One wire onewire запускает интерфейс для подсоединения индикаторов линии. Для термостатов и пид-терморегуляторов задается myPID по значениям.

Скетч для работы с датчиком без delay

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

Пример работы такой программы:

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>
 
OneWire ds(8);                                  // объект OneWire
int temperature = 0;                            // глобальная переменная, хранит значение показателей DS18B20
long lastUpdateTime = 0;                        // переменная для запоминания времени последнего считывания с устройства
const int TEMP_UPDATE_TIME = 1000;              // определение периодичности проверок
 
void setup()
{
	Serial.begin(9600);
}
 
void loop()
{
	detectTemperature();                        // определение показателей DS18b20
	Serial.println(temperature);                // вывод полученной величины
}
 
int detectTemperature()
{
	byte data[2];
	ds.reset();
	ds.write(0xCC);
	ds.write(0x44);
 
	if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
	{
		lastUpdateTime = millis();
		ds.reset();
		ds.write(0xCC);
		ds.write(0xBE);
		data[0] = ds.read();
		data[1] = ds.read();
 
		temperature = (data[1] << 8) + data[0]; 
		temperature = temperature >> 4;        // формирование показателя
	}
}

Как подключить несколько датчиков температуры к «Ардуино»

Датчики подсоединяются параллельно с одним резистором. Есть возможность считывания всех данных с них одновременно. Если подключается более 10 шт., необходим второй прибор с сопротивлением до 1,6 кОм. Чтобы данные оказались точнее, дополнительный должен стоять на 100…120 Ом между выходом data на «Ардуино» и data на всех подключенных индикаторах.

У каждого устройства есть собственный серийный 64-битный код.Он выдается по итогу выполнения программы и позволяет узнать, какой датчик выдал то или иное значение. Этот номер в скетче отображает бит ROM.

Библиотека Dallas Temperature

Предназначена для операций с датчиками температуры и совмещения с библиотекой OneWire. Пример скетча:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
#include <OneWire.h>                            // библиотека для протокола 1-Wire
#include <DallasTemperature.h>                  // библиотека для действий с устройством
 
OneWire oneWire(15);                            // порт подсоединения (A1)
DallasTemperature ds(&oneWire);
 
void setup() 
{
	Serial.begin(9600);                        // инициализация дисплея порта
	ds.begin();                                // инициализация ds18b20
}
 
void loop() 
{
	ds.requestTemperatures();                  // считывание показателей
	Serial.print(ds.getTempCByIndex(0));       // вывод данных на монитор
	Serial.println("C");
}

Использование данной библиотеки упрощает процесс эксплуатации датчиков.

Ссылка на основную публикацию