Урок 10 - Датчик температуры DS18B20, подключаем к Arduino.
В предыдущем
уроке мы рассмотрели
подключения датчика температуры и влажности DHT11 к Arduino. И
выяснили что данный датчик не очень
точный. Чем же его можно заменить? Одним
из
распространенныхдатчиков
для измерения температуры
являться DS18B20. Рассмотрим в данном
уроке варианты
подключения датчика,
пару примеров
программного решения.
Характеристики
датчика DS18B20:
Погрешность
измерения не больше 0,5 С
(для температур
от -10С до +85С). Не требуется дополнительная
калибровка.
Диапазон
измерений от -55 С до +125 С.
Напряжение
питания от 3,3В до 5В.
Датчик
обладает своим уникальным серийным
кодом.
Не
требуются дополнительные внешние
элементы.
Можно
подключить сразу до
127 датчиков к
одной линии связи.
Информация
передается по протоколу Wire.
Существует
так называемый режим
паразитного
питания
– в нем происходит питание
напрямую от линии связи. Для подключения
в этом случае нужны только 2 провода.
Важно, что в этом режиме не гарантируется
корректная работа при температурах
выше 100С. Режим паразитного питания
удобно обычно применяется для приложений
с удаленным температурным датчиком.
Датчик
выпускается
в открытом корпусе в виде
транзистора для измерения температуры
воздуха.
Можно купить
датчик в виде
модуля DS18B20.
Распаренный на плате.
Также датчик
DS18B20
продеться в закрытом корпусе для
измерения температуры жидкости.
Подключаем
датчик DS18B20 к Arduino NANO вот по такой схеме.
Подключение
датчика DS18B20 к Arduino UNO будет вот таким.
Для написания программы нам понадобиться
библиотека
OneWire.
Данную
библиотеку можно установить из менеджера
библиотек или скачать
отсюда.
Код ниже
будет выводить показание температуры
в монитор порта каждую секунду.
<code>#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);
}
</code>
Но данный пример достаточно сложный
для понимания. Для упрощения работы с
датчиком лучше
использовать
библиотеку DallasTemperature.
Данная
библиотека ставиться поверх OneWire. Т.е.
для ее роботы должна быть установлена
библиотека
OneWire.
С
библиотекой
DallasTemperature
устанавливаются
примеры. Вы можете воспользоваться
любым из них.
Мы
рассмотрим более простотой пример.
<code>#include <OneWire.h>
#include <DallasTemperature.h>
// контакт 2 на Arduino:
#define ONE_WIRE_BUS 2
// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту sensors:
DallasTemperature sensors(&oneWire);
void setup(void)
{
Serial.begin(9600);
// запускаем библиотеку:
sensors.begin();
}
void loop(void){
// вызываем функцию sensors.requestTemperatures(),
// которая приказывает всем устройствам, подключенным к шине
sensors.requestTemperatures();
Serial.print("Celsius temperature: ");
// в Цельсиях:
Serial.print(sensors.getTempCByIndex(0));
Serial.print(" - Fahrenheit temperature: ");
// в Фаренгейтах:
Serial.println(sensors.getTempFByIndex(0));
delay(1000);
}
</code>
В
данном примере температура выводиться
1 раз в секунду. И при этом выводится
температура в Цельсиях и фарингитах.
Как
видите данный пример намного меньше и
более понятен для новичка.
На
одну шину можно подключить до 127 датчиков
вот по такой схеме.
С
библиотекой DallasTemperature идут примеры
которые позволяют получать данные с
датчиков при током подключении.
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.