Датчик температуры: различия между версиями
мНет описания правки |
Нет описания правки |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 2: | Строка 2: | ||
[[Файл:Внешний вид и распиновка корпусов.png.png|слева|мини|413x413пкс|Внешний вид и распиновка корпусов]] | [[Файл:Внешний вид и распиновка корпусов.png.png|слева|мини|413x413пкс|Внешний вид и распиновка корпусов]] | ||
Технически, датчики DS18B20 выпускаются в 3-х корпусах: ТО-92, SO, uSOP. | Технически, датчики DS18B20 выпускаются в 3-х корпусах: ТО-92, SO, uSOP. | ||
'''Технические характеристики DS18B20''' | '''Технические характеристики DS18B20''' | ||
Строка 17: | Строка 16: | ||
[[Файл:Схема прямого подключения одиночного датчика.png|мини|369x369пкс|Схема прямого подключения одиночного датчика]] | |||
'''Подключение к плате''' | '''Подключение к плате''' | ||
''Прямое подключения одиночного датчика:'' | ''Прямое подключения одиночного датчика:'' | ||
На рисунке справа показана схема прямого подключения одиночного датчика к Arduino Nano. | На рисунке справа показана схема прямого подключения одиночного датчика к Arduino Nano. | ||
Здесь всё довольно просто. Запитываем DS18B20 от самой платы Arduino, подавая 5V на вывод Vdd датчика. Аналогичным образом соединяем между собой выводы GND. Средний вывод термодатчика подключим, например, к выводу D2 нашей Arduino Nano. Подключать вывод данных (DQ) можно практически на любой вход Arduino, предварительно прописав его номер в скетче. Единственный и самый важный момент, на который следует обратить внимание – это наличие резистора номиналом 4,7k между плюсом питания и линией данных термодатчика. Этот резистор служит для подтяжки линии данных к логической единице и его отсутствие вызовет сбой в работе алгоритма обмена информацией. Значение 4,7k не сильно критично и в некоторых пределах его можно изменять, главное не увлекаться. | Здесь всё довольно просто. Запитываем DS18B20 от самой платы Arduino, подавая 5V на вывод Vdd датчика. Аналогичным образом соединяем между собой выводы GND. Средний вывод термодатчика подключим, например, к выводу D2 нашей Arduino Nano. Подключать вывод данных (DQ) можно практически на любой вход Arduino, предварительно прописав его номер в скетче. Единственный и самый важный момент, на который следует обратить внимание – это наличие резистора номиналом 4,7k между плюсом питания и линией данных термодатчика. Этот резистор служит для подтяжки линии данных к логической единице и его отсутствие вызовет сбой в работе алгоритма обмена информацией. Значение 4,7k не сильно критично и в некоторых пределах его можно изменять, главное не увлекаться. | ||
[[Файл:Прямое подключение группы датчиков.png|слева|мини|372x372пкс| | [[Файл:Прямое подключение группы датчиков.png|слева|мини|372x372пкс|Схема прямого подключения группы датчиков]] | ||
''Прямое подключения группы датчиков:'' | ''Прямое подключения группы датчиков:'' | ||
Текущая версия от 18:09, 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));
}