http://wm-monitoring.ru/ ')) {alert('Спасибо за то что установили нашу кнопку! =)');} else {alert('Очень жаль! =(');}"> http://wm-monitoring.ru/

Ардуино: датчик температуры DS18B20 от ROC

Опубликовано: 24.08.2018

видео Ардуино: датчик температуры DS18B20 от ROC

DS18B20 + PICAXE 40X1

В предыдущих уроках мы уже работали с датчиком температуры и влажности DHT11, а также с терморезистором. На этот раз попробуем разобраться ещё с одним популярным датчиком измеряющим температуру — DS18B20.


BananaPI + DS18B20 (1WIRE) termometr konfiguracja

Это устройство позволяет измерять температуру в диапазоне от –55°C до +125°C с точностью ±0.5°C ( при температуре от –10°C до +85°C ). Питаться DS18B20 может как от 3.3, так и от 5 Вольт.

Сам по себе датчик — это микросхема, которая может встречаться в разных корпусах:


LM75 temperature sensor demo

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

Другой вариант — датчик в герметичной стальной капсуле с проводом:

1. Подключение модуля DS18B20-ROC к Ардуино

В этом уроке мы будем работать с модулем датчика температуры, разработанным в RobotClass. Подключать мы его будем к контроллеру Ардуино Уно.

Как и DHT11, датчик DS18B20 использует однопроводную шину (1-wire) для обмена данными с контроллером. Так что нам потребуется всего три провода чтобы подключить датчик к Ардуино.

Модуль DS18B20 GND VCC OUT
Ардуино Уно GND +5V 2

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

Внешний вид макета

Примечание. В случае использования не модуля, а отдельной микросхемы, необходимо вывод микросхемы OUT соединить с контактом питания через резистор 4,7 КОм. В указанном выше модуле этот резистор уже установлен.

2. Программа для получения данных с датчика DS18B20

Напишем программу, которая будет каждую секунду считывать показания температуры с датчика и выводить их в COM-порт.

#include <OneWire.h> OneWire ds(2); void setup() { Serial.begin(9600); } void loop() { byte i; byte data[12]; byte addr[8]; float celsius; // поиск адреса датчика if ( !ds.search(addr)) { ds.reset_search(); delay(250); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // команда на измерение температуры delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); // команда на начало чтения измеренной температуры // считываем показания температуры из внутренней памяти датчика for ( i = 0; i < 9; i++) { data[i] = ds.read(); } int16_t raw = (data[1] << 8) | data[0]; // датчик может быть настроен на разную точность, выясняем её byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс // преобразование показаний датчика в градусы Цельсия celsius = (float)raw / 16.0; Serial.print("t="); Serial.println(celsius); }

Процедура на первый взгляд может показать совершенно непонятной. На самом деле, все эти 0xBE, 0x44 и т.п. взяты из спецификации к датчику. Для удобства мы можем всю процедуру вычисления выделить в отдельную функцию или даже в отдельный модуль.

Загружаем программу на Ардуино и запускаем монитор COM-порта. В окне терминала мы должны увидеть данные о температуре, обновляющиеся раз в секунду:

t=23.15 t=23.47 t=23.32

Вот и всё, датчик работает!

Заключение

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

Следующий большой шаг — персональная погодная станция. Но перед тем как браться за такой сложный проект, попробуем сначала научиться сохранять данные о температуре на карте памяти типа micro-SD. Об этом читайте в нашем следующем уроке!

Карта
rss