В статье представляю следующее сетевое устройство – датчик температуры с использованием сенсора DS18B20.
Предыдущая статья Навигация по рубрике Следующая статья
Общее описание.
В устройстве в качестве измерителя используется популярный датчик температуры DS18B20.
Это термодатчик с цифровым последовательным интерфейсом 1-Wire. Обладает достаточно высокими техническими параметрами. Для нас важно:
- Высокая точностью измерения, погрешность не превышает 0,5 °C. Датчик откалиброван при изготовлении, дополнительной калибровки не требует.
- Разрешающая способность достигает 0,0625 °C при максимальном разрешении 12 бит.
- Широкий диапазон измерения температуры -55 … + 125 °C.
- Датчик осуществляет преобразование температуры в цифровой код, т.е. дополнительного АЦП не требуется.
- Низкое энергопотребление. Ток покоя не более 1 мкА, рабочий ток до 1,5 мА.
- Время измерения при максимальном разрешении не превышает 750 мс.
Электрическая схема устройства.
К традиционному узлу, обеспечивающему обмен по сети TinyOneWireNet, подключен сенсор DS18B20.
Когда встал вопрос о разработке печатной платы для термодатчика DS18B20, невозможно было не заметить, что его схема большей частью повторяет схемы большой группы датчиков. Значительное количество устройств представляют собой какой-нибудь сенсор, подключенный через один сигнал к стандартному блоку формирования интерфейса TinyOneWireNet.
Например, вместо DS18B20 можно подключить датчик “сухого контакта”, или фоторезистор, или использовать вход RA4 PIC-контроллера для измерения аналогового сигнала…
Таким образом, появилась идея создать универсальную плату для большого числа разных устройств.
Собранное устройство выглядит так.
По сути это 2 входа/выхода микроконтроллера с различными делителями и подтягивающими резисторами.
Планируется реализовать на этой плате следующие типы устройств:
- датчик DS18B20;
- датчик DHT22;
- датчик света (фоторезистор);
- дискретный датчик (сухой контакт);
- управляющее устройство диммеров;
- управляющее устройство модулей дискретных выходов;
- управляющее устройство любых модулей ввода/вывода (дискретных, аналоговых, кодовых);
- аналоговый вход;
- измеритель сопротивления;
- ШИМ-выход;
- приемник/передатчик I2Cустройств;
- приемник/передатчик UARTустройств.
Параметры компонентов R1-R4 и C2 выбираются для конкретных типов устройств. Для DS18B20 запаивается только резистор R1 и замыкается R3.
Плата может быть установлена в подобный корпус.
Работа с термодатчиком DS18B20 в системе Ардуино.
Подключил датчик по схеме.
Задал адрес с помощью монитора.
Датчик DS18B20 одно из самых простых устройств с точки зрения программного управления. Есть 3 функции библиотеки TinyOneWireNet.h:
uint8_t startMeasurement_DS18B20(uint8_t adr); // запуск измерения температуры
uint8_t readCode_DS18B20(uint8_t adr, uint16_t * code); // чтение результата измерений температуры (код)
uint8_t readTemperature_DS18B20(uint8_t adr, float * tmp); // чтение результата измерений температуры (C)
Где используются следующие аргументы:
- adr – адрес сетевого устройства;
- code – указатель на результат измерений в виде кода;
- tmp – значение измеренной температуры в °C.
Работа с датчиком заключается в следующих операциях:
- Первой функцией запустить преобразование.
- Выдержать паузу на время преобразования (не менее 800 мс).
- Второй или третей функцией считать код или значение температуры.
Вот скетч, выполняющий чтение температуры в цикле.
// измерение температуры (DS18B20)
#include <TinyOneWireNet.h>
#define NET_PIN 2 // вывод данных сети
#define BETWEEN_COM_TIME 2 // пауза между командами (мс)
TinyOneWireNet sens(NET_PIN);
float tmp;
void setup() {
Serial.begin(9600);
sens.onLine(10);
}
void loop() {
if( sens.startMeasurement_DS18B20(10) == 0 ) {
delay(1000);
if( sens.readTemperature_DS18B20(10, & tmp) == 0 ) {
Serial.print("T= ");
Serial.print(tmp);
Serial.println(" C");
}
else Serial.println("Error");
}
else {
Serial.println("Error");
delay(1000);
}
delay(BETWEEN_COM_TIME);
}
Калибровать датчик DS18B20 не надо. Его калибровка производится заводом-изготовителем.
В следующей статье расскажу о датчике освещенности с фоторезистором в качестве сенсора.