Датчик температуры: различия между версиями
(Новая страница: «'''DS18B20''' – это полноценный цифровой термометр, способный измерять температуру в диапазо...») |
мНет описания правки |
||
Строка 41: | Строка 41: | ||
Для работы с датчиком нам понадобится библиотека DallasTemperature.h Данная библиотека немного упрощает процесс программирования за счёт более понятных для восприятия функций. После установки, вы получите доступ к 14 примерам хорошо документированного кода на все случаи жизни. Давайте рассмотрим пример работы одним датчиком. | Для работы с датчиком нам понадобится библиотека DallasTemperature.h Данная библиотека немного упрощает процесс программирования за счёт более понятных для восприятия функций. После установки, вы получите доступ к 14 примерам хорошо документированного кода на все случаи жизни. Давайте рассмотрим пример работы одним датчиком. | ||
// Подключаем необходимые библиотеки | |||
<code>#include <OneWire.h></code> | |||
<code>#include <DallasTemperature.h></code> | |||
// Шину данных подключаем к выводу №2 Arduino | |||
#define ONE_WIRE_BUS 2 | |||
// Создаём экземпляр класса для нашей шины и ссылку на него | |||
<code>OneWire oneWire(ONE_WIRE_BUS);</code> | |||
DallasTemperature sensors(&oneWire); | |||
// ФУНКЦИЯ ПРЕДУСТАНОВОК | |||
<code>void setup(void) | |||
{ | |||
Serial.begin(9600); // Инициализация серийного порта | |||
sensors.begin(); // Инициализация шины</code> | |||
} | |||
// ОСНОВНОЙ ЦИКЛ | |||
<code>void loop(void) | |||
{ | |||
Serial.print("Reading Temperature..."); | |||
// Подаём команду на чтение | |||
sensors.requestTemperatures(); | |||
Serial.println("Read"); | |||
Serial.print("Sensor Temperature 1: "); | |||
// Отображаем значение температуры | |||
Serial.print(sensors.getTempCByIndex(0));</code> | |||
} |
Версия от 18:07, 31 мая 2021
DS18B20 – это полноценный цифровой термометр, способный измерять температуру в диапазоне от -55оС до +125оС с программируемой точностью 9-12 бит. При изготовлении на производстве, каждому датчику присваивается свой уникальной 64-битный адрес, а обмен информацией с ведущим устройством (микроконтроллером или платой Arduino) осуществляется по шине 1-wire. Такой подход позволяет подключать к одной линии целую группу датчиков, вплоть до 264.
Технически, датчики DS18B20 выпускаются в 3-х корпусах: ТО-92, SO, uSOP.
Технические характеристики DS18B20
- Напряжение питания: 3V-5.5V;
- Протокол обмена данными: 1-Wire;
- Способ подключения: прямой / по одной линии с паразитным питанием;
- Разрешение преобразования температуры: 9 бит – 12 бит;
- Диапазон измерения температуры: от -55 до +125 оС;
- Период измерения температуры при максимальной точности 12 бит: 750 мС;
- Тип индексации на линии 1-Wire: уникальный 64-битный адрес;
- Есть возможность программирования диапазона тревожного сигнала.
Подключение к плате
Прямое подключения одиночного датчика:
На рисунке справа показана схема прямого подключения одиночного датчика к Arduino Nano.
Здесь всё довольно просто. Запитываем DS18B20 от самой платы Arduino, подавая 5V на вывод Vdd датчика. Аналогичным образом соединяем между собой выводы GND. Средний вывод термодатчика подключим, например, к выводу D2 нашей Arduino Nano. Подключать вывод данных (DQ) можно практически на любой вход Arduino, предварительно прописав его номер в скетче. Единственный и самый важный момент, на который следует обратить внимание – это наличие резистора номиналом 4,7k между плюсом питания и линией данных термодатчика. Этот резистор служит для подтяжки линии данных к логической единице и его отсутствие вызовет сбой в работе алгоритма обмена информацией. Значение 4,7k не сильно критично и в некоторых пределах его можно изменять, главное не увлекаться.
Прямое подключения группы датчиков:
С прямым подключением одного датчика всё понятно, теперь рассмотрим прямое подключение группы датчиков к одному выводу Arduino. На рисунке слева показан пример подключения 5-ти датчиков DS18B20. Это количество может быть любым и ограничивается только рамками временем на опрос каждого из них (750мС).
Как видно из вышеприведенного рисунка, абсолютно все датчики на шине подключены параллельно и на всю группу идёт один подтягивающий резистор. Хоть изменения в схеме логичны и минимальны, но работа с несколькими термодатчиками немного сложнее в плане составления программы. В этом случае необходимо обращаться к каждому в отдельности, используя уникальные адреса.
Пример кода
Для работы с датчиком нам понадобится библиотека DallasTemperature.h Данная библиотека немного упрощает процесс программирования за счёт более понятных для восприятия функций. После установки, вы получите доступ к 14 примерам хорошо документированного кода на все случаи жизни. Давайте рассмотрим пример работы одним датчиком.
// Подключаем необходимые библиотеки#include <OneWire.h>
#include <DallasTemperature.h>
// Шину данных подключаем к выводу №2 Arduino #define ONE_WIRE_BUS 2 // Создаём экземпляр класса для нашей шины и ссылку на негоOneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire); // ФУНКЦИЯ ПРЕДУСТАНОВОКvoid setup(void) { Serial.begin(9600); // Инициализация серийного порта sensors.begin(); // Инициализация шины
} // ОСНОВНОЙ ЦИКЛvoid loop(void) { Serial.print("Reading Temperature..."); // Подаём команду на чтение sensors.requestTemperatures(); Serial.println("Read"); Serial.print("Sensor Temperature 1: "); // Отображаем значение температуры Serial.print(sensors.getTempCByIndex(0));
}