Содержание
- Особенности датчика Arduino DS18B20
- Схема подключения датчика
- Примеры скетчей измерения температуры датчика DS18B20
При помощи датчика DS18B20 и Arduino можно довольно точно измерить температуру. Модель DS18B20 можно отнести к одной из самых популярных среди датчиков температуры. Есть модели в водонепроницаемом корпусе для изменения температуры жидкостей. Эта статья содержит описание технических особенностей датчика температуры DS18B20 и схему подключения к Arduino.
Особенности датчика Arduino DS18B20
Модель DS18B20 представляет собой температурный цифровой датчик, владеющий целым рядом полезных характеристик и особенностей. По сути его можно отнести к микроконтроллеру. Это обусловлено тем, что в функциональные особенности датчика заложена способность сигнализировать контроллеру в тех случаях, когда допустимая температура превышается. Наладчик цифрового датчика может самостоятельно устанавливать или, при необходимости, менять граничные параметры допустимой температуры жидкости. Вся конструкция датчика находится в водонепроницаемом корпусе.
Микросхема цифрового датчика состоит из трех выходов. Один из них используется для передачи данных, два других предназначены для заземления и питания устройства. Существуют модификации с двумя кабелями. В этом случае используется так называемое паразитное питание и кабель VDD соединяют с землей. Еще одной конструктивной особенностью DS18B20 является возможность одновременного подключения нескольких устройств к одному кабелю для данных. В этом случае устройство использует лишь один пин.
Корпуса для температурных датчиков
Разнообразие корпусов для температурных датчиков DS18B20 не так велико. Существует три вида корпусов: 8-Pin SO, 8-Pin µSOP и 3-Pin TO-92. Среди них самым распространенным считается 3-Pin TO-92. Корпус изделия состоит из влагозащитного материала. Эта особенность позволяет использовать устройство под водой. При монтаже корпуса этой модели следует обратить внимание на цвет проводки. Заземление – черный цвет, питание – красный, сигнал может быть каким-то другим цветом. Для покупки датчика DS18B20 можно воспользоваться любым интернет магазином, занимающимся продажей данного типа оборудования.
Покупка датчика.
Самый дешевый выбор температурных датчиков представлен на aliexpress, однако это не означает, что нельзя воспользоваться каким-либо отечественным интернет магазином по продаже температурных датчиков Arduino.
Технические характеристики DS18B20
- погрешность измерения не превышает 0,5 град. С. Это позволяет очень точно проводить измерения;
- нет необходимости в дополнительной калибровке датчика;
- измеряемый диапазон температур варьируется от -55 град. С до +125 град. С;
- питание прибора находится в диапазоне напряжений 3,3 – 5 В;
- разрешающую способность устройства можно довести до значения 0,0625 град. С. Кроме того, наибольшее разрешение составляет 12 бит;
- датчик оснащен функцией тревожного сигнала;
- для идентификации каждый датчик имеет свой уникальный серийный номер;
- для монтажа не нужны дополнительные элементы;
- одна линия связи способна функционировать с одновременно подключенными 127 датчиками;
- протокол передачи информации 1-wire;
- подключение микроконтроллера выполняется тремя кабелями;
- можно использовать паразитное питание.
В его основу ложится прямое подключение к линии связи и соответственно использование двух кабелей. Стоит отметить, что в таком режиме подключения возможно увеличение погрешности при температурах свыше 1000С. Этот режим часто используют, когда температурный датчик установлен на расстоянии.
Память температурного датчика DS18B20 принято делить на две части: оперативную (SRAM) и энергозависимую (EEPROM). Энергозависимая память содержит информацию о регистрах конфигурации и регистрах TH, TL. Последние представляют собой регистры общего предназначения.
Главная задача DS18B20 – преобразование полученных данных о температурных изменениях в цифровой вид. В обычном включенном состоянии датчик не выполняет никаких действий. Чтоб начать измерения необходимо через контроллер отправить ему команду «преобразования температуры». Информация об изменениях температуры сохраняется в оперативной памяти устройства.
Структурная схема датчика
Распиновка датчиков в корпусе TO-92 и 8-pin 150-mil SOIC
Схема подключения датчика ds18b20 к Arduino
DS18B20 является цифровым датчиком, поэтому данные отправляются на пины Arduino с последующей декодировкой. Для того чтобы собрать простенькую схемку понадобятся следующие элементы:
- сам датчик DS18B20;
- Arduino контроллер;
- резистор сопротивлением на 4,7 кОМ;
- соединители;
- кабель для подключения к ПК (как правило с USB интерфейсом);
- монтажная плата.
Подключение нескольких датчиков на одну линию данных
Примеры скетчей измерения температуры датчика DS18B20
Измерение при помощи библиотеки OneWire
В примере используется библиотека OneWire. Скачать библиотеку OneWire можно тут
Для того чтобы подключить библиотеку нужно скачать архив и разархивировать в папку library
#include
/*
* Описание взаимодействия с цифровым датчиком ds18b20
* Подключение ds18b20 к ардуино через пин 8
*/
OneWire ds(8); // Создаем объект OneWire для шины 1-Wire, с помощью которого будет осуществляться работа с датчиком
void setup(){
Serial.begin(9600);
}
void loop(){
// Определяем температуру от датчика DS18b20
byte data[2]; // Место для значения температуры
ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устройство
ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
delay(1000); // Микросхема измеряет температуру, а мы ждем.
ds.reset(); // Теперь готовимся получить значение измеренной температуры
ds.write(0xCC);
ds.write(0xBE); // Просим передать нам значение регистров со значением температуры
// Получаем и считываем ответ
data[0] = ds.read(); // Читаем младший байт значения температуры
data[1] = ds.read(); // А теперь старший
// Формируем итоговое значение:
// - сперва "склеиваем" значение,
// - затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625)
float temperature = ((data[1] << 8) | data[0]) * 0.0625;
// Выводим полученное значение температуры в монитор порта
Serial.println(temperature);
}
Измерение при помощи библиотеки DallasTemperature
Это тоже пример измерения температуры только тут используется библиотека DallasTemperature. Скачать библиотеку DallasTemperature можно тут
#include
// Номер пина Arduino с подключенным датчиком
#define PIN_DS18B20 8
// Создаем объект OneWire
OneWire oneWire(PIN_DS18B20);
// Создаем объект DallasTemperature для работы с сенсорами, передавая ему ссылку на объект для работы с 1-Wire.
DallasTemperature dallasSensors(&oneWire);
// Специальный объект для хранения адреса устройства
DeviceAddress sensorAddress;
void loop(void){
// Запрос на измерения датчиком температуры
Serial.print("Измеряем температуру...");
dallasSensors.requestTemperatures(); // Просим ds18b20 собрать данные
Serial.println("Выполнено");
// Запрос на получение сохраненного значения температуры
printTemperature(sensorAddress);
// Задержка для того, чтобы можно было что-то разобрать на экране
delay(1000);
}
// Вспомогательная функция печати значения температуры для устрйоства
void printTemperature(DeviceAddress deviceAddress){
float tempC = dallasSensors.getTempC(deviceAddress);
Serial.print("Temp C: ");
Serial.println(tempC);
}
// Вспомогательная функция для отображения адреса датчика ds18b20
void printAddress(DeviceAddress deviceAddress){
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
Полезные ссылки по проекту
Видео
Похожие записи
На Arduino можно довольно интересный проект начального уровня - цифровые игральные кости. При помощи которых можно генерировать случайное число от 1 до 6. ...
Системы заземления, используемые для выполнения заземления. Среди критериев, способствующих обеспечению защиты от такого процесса, как поражение электричеством, особого внимания...
В Европе для маркировки кабеля используются свои стандарты и нормативные документы. Чтобы расшифровать маркировку импортного кабеля, необходимо знать, что обозначает конкретная...
Сервопривод (servo) - устройство с электрическим мотором, которому можно задать определенный угол поворота и зафиксировать в определенном положении. Подключение сервопривода к Arduino очень...
Представленная схема полицейской мигалки на микроконтроллере и светодиодах может работать в 16 различных режимах. Режим выбирается при помощи одной кнопки, и собрана на микроконтроллере...
Функция setup() вызывается первой когда запускается скетч. Эта функция необходима для инициализации переменных, настройки режимов работы портов (выводов), для старта каких либо функций...