Цифровой датчик температуры используется в медицинских системах, системах контроля климата, энергосбережения.
Датчик построен на основе температурного сенсора с цифровым выходом DS18B20. Датчик включает в себя сам сенсор и микросхему, которая переводит полученную информацию в цифровой вид.
К возможностям датчика можно отнести способность хранить значения измерений, сигнализировать о выходе температуры за установленные границы (сами границы можно устанавливать и менять), менять точность измерений, изменять способ взаимодействия с контроллером и так далее.
Для удобства и простоты использования мы разместили всю схему с необходимой обвязкой на одной плате, к модулю необходимо подключить только питание и выводы контроллера при помощи четырехконтактного разъема.
Диапазон измерений: -55...+125
Питание: 3...5.5В
Защита от неправильной полярности питания: Есть
Размер платы: 22x29мм
Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения:
VCC - питание (+5V)
CH2 - подключается к цифровому входу контроллера
CH1 - не используется (NC)
GND - земля (общий)
Работа с модулем выполняется по протоколу 1WIRE.
Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру по схеме ниже. Для быстрого и надежного подключения используйте QuatroPort A050.
Программа
После сборки схемы необходимо загрузить в микроконтроллер программу, предварительно установив библиотеку OneWire.h, скачать её можно отсюда: https://github.com/PaulStoffregen/OneWire.
#include "OneWire.h" OneWire ds(9); // Объект 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); // Выводим полученное значение температуры // Т.к. переменная temperature имеет тип int, дробная часть будет просто отбрасываться } 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; } }
Теперь если открыть монитор порта можно увидеть температуру окружающей среды в градусах Цельсия, изменения мгновенно отображаются на экране.