Содержание
- 1 Артиллерийские единицы
- 2 Примеры работы для Arduino
- 3 Подключение датчика DS18B20 к Arduino
- 4 Как подключить DHT11 к Ардуино
- 5 DS18B20 – однопроводной датчик температуры
- 6 Исходные коды программ
- 7 Сравнение датчиков DHT11, DHT22 и DHT21
- 8 Скетч для работы с датчиками DHT11 и DHT22 в Arduino
- 9 Характеристики модуля KY-001.
- 10 Назначение выводов
Артиллерийские единицы
Примеры работы для Arduino
Один датчик
Рассмотрим простой пример — подключения одного датчика.
Сенсор подключается к управляющей плате через один сигнальный пин.
При подключении к Arduino в компактном формфакторе, например Arduino Micro или Iskra Nano Pro, воспользуйтесь макетной платой и парочкой нажимных клеммников.
Между сигнальным проводом и питанием установите сопротивление 4,7 кОм.
При коммуникации сенсора со стандартными платами Arduino формата Rev3, Arduino Uno или Iskra Neo, используйте Troyka Slot Shield совместно с модулем подтяжки.
Код программы
Выведем температуру сенсора в Serial-порт.
- simple.ino
-
// библиотека для работы с протоколом 1-Wire #include <OneWire.h> // библиотека для работы с датчиком DS18B20 #include <DallasTemperature.h> // сигнальный провод датчика #define ONE_WIRE_BUS 5 // создаём объект для работы с библиотекой OneWire OneWire oneWire(ONE_WIRE_BUS); // создадим объект для работы с библиотекой DallasTemperature DallasTemperature sensor(&oneWire); void setup(){ // инициализируем работу Serial-порта Serial.begin(9600); // начинаем работу с датчиком sensor.begin(); // устанавливаем разрешение датчика от 9 до 12 бит sensor.setResolution(12); } void loop(){ // переменная для хранения температуры float temperature; // отправляем запрос на измерение температуры sensor.requestTemperatures(); // считываем данные из регистра датчика temperature = sensor.getTempCByIndex(); // выводим температуру в Serial-порт Serial.print("Temp C: "); Serial.println(temperature); // ждём одну секунду delay(1000); }
Серия датчиков
Каждый сенсор DS18B20 хранит в своей памяти уникальный номер, такое решение позволяет подключить несколько датчиков к одному пину.
Добавим к предыдущем схемам подключения ещё по паре датчиков в параллель.
Код программы
Просканируем все устройства на шине и выведем температуру каждого сенсора отдельно в Serial-порт.
- multipleSensors.ino
-
// библиотека для работы с протоколом 1-Wire #include <OneWire.h> // библиотека для работы с датчиком DS18B20 #include <DallasTemperature.h> // сигнальный провод датчика #define ONE_WIRE_BUS 5 // создаём объект для работы с библиотекой OneWire OneWire oneWire(ONE_WIRE_BUS); // создадим объект для работы с библиотекой DallasTemperature DallasTemperature sensors(&oneWire); // создаём указатель массив для хранения адресов датчиков DeviceAddress *sensorsUnique; // количество датчиков на шине int countSensors; // функция вывода адреса датчика void printAddress(DeviceAddress deviceAddress){ for (uint8_t i = ; i < 8; i++){ if (deviceAddressi < 16) Serial.print("0"); Serial.print(deviceAddressi, HEX); } } void setup(){ // инициализируем работу Serial-порта Serial.begin(9600); // ожидаем открытия Serial-порта while(!Serial); // начинаем работу с датчиком sensors.begin(); // выполняем поиск устройств на шине countSensors = sensors.getDeviceCount(); Serial.print("Found sensors: "); Serial.println(countSensors); // выделяем память в динамическом массиве под количество обнаруженных сенсоров sensorsUnique = new DeviceAddresscountSensors; // определяем в каком режиме питания подключены сенсоры if (sensors.isParasitePowerMode()) { Serial.println("Mode power is Parasite"); } else { Serial.println("Mode power is Normal"); } // делаем запрос на получение адресов датчиков for (int i = ; i < countSensors; i++) { sensors.getAddress(sensorsUniquei, i); } // выводим полученные адреса for (int i = ; i < countSensors; i++) { Serial.print("Device "); Serial.print(i); Serial.print(" Address: "); printAddress(sensorsUniquei); Serial.println(); } Serial.println(); // устанавливаем разрешение всех датчиков в 12 бит for (int i = ; i < countSensors; i++) { sensors.setResolution(sensorsUniquei, 12); } } void loop(){ // переменная для хранения температуры float temperature10; // отправляем запрос на измерение температуры всех сенсоров sensors.requestTemperatures(); // считываем данные из регистра каждого датчика по очереди for (int i = ; i < countSensors; i++) { temperaturei = sensors.getTempCByIndex(i); } // выводим температуру в Serial-порт по каждому датчику for (int i = ; i < countSensors; i++) { Serial.print("Device "); Serial.print(i); Serial.print(" Temp C: "); Serial.print(temperaturei); Serial.println(); } Serial.println(); // ждём одну секунду delay(1000); }
Подключение датчика DS18B20 к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Датчик температуры DS18b20+ x 2 шт.
► Резистор 4.7 кОм x 1 шт.
► Макетная плата MB-102 (Breadboard) x 1 шт.
Подключение:
Для подключения датчика DS18b20 к Arduino UNO, будем использовать макетную плату BreadBoard, принципиальную схему можно посмотреть на рисунке ниже. Установим датчик в макетную плату BreadBoard, как показано на рисунке, между ногой DQ и VDD необходимо установить резистор на 4,7 кОм, а ногу VDD подключить в выводам +5V (Arduino) и ногу GND к выводу GND (Arduino), ногу DQ необходимо подключить к выводу 2 (Arduino) (в этом примере использую pin 2), схема собрана.
Для этого эксперимента необходимо скачать и установить библиотеку «DallasTemperature v.3.4» и «OneWire v.2.2» (скачать их можно в конце статьи). Далее, запускаем среду программирования IDE Arduino, копируем пример кода в в окно программы и загружаем в контроллер.
/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 12.11.2016г.
*/
#include <OneWire.h> // Подключаем библиотеку OneWire
#include <DallasTemperature.h> // Подключаем библиотеку DallasTempature
#define ONE_WIRE_BUS 2 // Указываем, к какому выводу подключена DQ
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup(void)
{
Serial.begin(9600); // Задаем скорость передачи данных
sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит
}
void loop(void)
{
Serial.print(» Запрос температуры…»);
sensors.requestTemperatures(); // Запрос на считывание температуры
Serial.println(«Считано»);
Serial.print(» Температура датчика 1: «);
Serial.print(sensors.getTempCByIndex(0)); // Отображение температуры датчика 1
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/* */ OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); voidsetup(void) { Serial.begin(9600);// Задаем скорость передачи данных sensors.begin();// Запуск библиотеки, по умолчанию 9 бит } voidloop(void) { Serial.print(» Запрос температуры…»); sensors.requestTemperatures();// Запрос на считывание температуры Serial.println(«Считано»); Serial.print(» Температура датчика 1: «); Serial.print(sensors.getTempCByIndex());// Отображение температуры датчика 1 } |
Далее, открываем мониторинг порта, котором увидим показания температура с датчика.
Как подключить DHT11 к Ардуино
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- модуль DHT11 Ардуино;
- макетная плата;
- 2 светодиода и 2 резистора на 220 Ом;
- провода «папа-папа» и «папа-мама».
На этом занятии мы приведем для примера два скетча. Первый скетч будет отсылать данные с модуля DHT11 на последовательный монитор порта компьютера. Во втором скетче мы будем использовать вывод данных на жк дисплей — LCD 1602 модуль. LCD модуль можно будет использовать в дальнейшем в любом автономном устройстве, например, при конструировании «Домашней метеостанции» или «Умной теплицы».
Схема. Датчик DHT11 подключение к Ардуино
Скетч термодатчика DHT11 для Ардуино
#include <DHT.h> // подключаем библиотеку для датчика DHT dht(2, DHT11); // сообщаем на каком порту будет датчик void setup() { dht.begin(); // запускаем датчик DHT11 Serial.begin(9600); // подключаем монитор порта } void loop() { // считываем температуру (t) и влажность (h) float h = dht.readHumidity(); float t = dht.readTemperature(); // выводим температуру (t) и влажность (h) на монитор порта Serial.print("Humidity: "); Serial.println(h); Serial.print("Temperature: "); Serial.println(t); }
Пояснения к коду:
- переменные «h» и «t» являются типом данных float, которая служит для хранения чисел с десятичным разделителем (вре11 подключение к ардуино);
- команда выводит информацию на порт без переноса строки, команда выводит информацию на порт с переносом строки.
Скетч DHT11 и дисплея LCD 1602 Arduino
#include <Wire.h> // библиотека для протокола I2C #include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602 #include <DHT.h> // подключаем библиотеку для датчика LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея DHT dht(2, DHT11); // сообщаем на каком порту будет датчик void setup() { LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея dht.begin(); // запускаем датчик DHT11 } void loop() { // считываем температуру (t) и влажность (h) float h = dht.readHumidity(); float t = dht.readTemperature(); // выводим температуру (t) и влажность (h) на жк дисплей LCD.setCursor(0,0); LCD.print("Humidity: "); LCD.print(h); LCD.setCursor(0,1); LCD.print("Temperature: "); LCD.print(t); delay(1000); LCD.clear(); }
Пояснения к коду:
- команда в программе очищает экран дисплея от надписей для вывода новых значений с сенсора температуры DHT11 Arduino.
DS18B20 – однопроводной датчик температуры
DS18B20 – это датчик температуры с однопроводным интерфейсом 1-Wire, изготовленный Dallas Semiconductor Corp. Уникальный интерфейс 1-Wire требует только одного цифрового контакта для двухсторонней связи с микроконтроллером.
Датчик обычно поставляется в двух форм-факторах. Тот, что идет в корпусе TO-92, выглядит точно так же, как обычный транзистор. Другой, в виде водонепроницаемого зонда, может быть более полезен, когда вам нужно измерить что-то далеко, под водой или под землей.
Рисунок 1 – Типы датчиков температуры DS18B20
Датчик температуры DS18B20 достаточно точный и не требует для работы внешних компонентов. Он может измерять температуру от -55°C до +125°C с точностью ±0,5°C.
Разрешение датчика температуры настраивается пользователем до 9, 10, 11 или 12 бит. Однако разрешение по умолчанию при включении питания составляет 12 бит (то есть соответствует точности 0,0625°C).
Датчик может питаться от источника напряжения от 3 В до 5,5 В и потреблять всего 1 мА во время активных преобразований температуры.
Вот полная спецификация:
Напряжение питания | от 3 В до 5,5 В |
Потребляемый ток | 1мА |
Диапазон температур | от -55°C до 125°C |
Точность | ±0,5°С |
Разрешение | от 9 до 12 бит (выбирается) |
Время преобразования | <750 мс |
Исходные коды программ
Код программы для Arduino
Arduino
#include <DHT.h>
#define DHTPIN 4 // контакт, к которому подключен датчик DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
delay(2000);
dht.begin(); // инициализируем датчик DHT11
}
void loop() {
float temp = dht.readTemperature(); //считываем данные температуры
float humi = dht.readHumidity(); // считываем данные влажности
Serial.print(temp);
Serial.print(humi);
delay(2000);
}
1 |
#include <DHT.h> DHTdht(DHTPIN,DHTTYPE); voidsetup(){ Serial.begin(9600); delay(2000); dht.begin();// инициализируем датчик DHT11 } voidloop(){ floattemp=dht.readTemperature();//считываем данные температуры floathumi=dht.readHumidity();// считываем данные влажности Serial.print(temp); Serial.print(humi); delay(2000); } |
Код программы для MATLAB
MATLAB
s = serial(‘COM18’);
time=100;
i=1;
while(i<time)
fopen(s)
fprintf(s, ‘Your serial data goes here’)
out = fscanf(s)
Temp(i)=str2num(out(1:4));
subplot(211);
plot(Temp,’g’);
axis();
title(‘Parameter: DHT11 Temperature’);
xlabel(‘—> time in x*0.02 sec’);
ylabel(‘—> Temperature’);
grid
Humi(i)=str2num(out(5:9));
subplot(212);
plot(Humi,’m’);
axis();
title(‘Parameter: DHT11 Humidity’);
xlabel(‘—> time in x*0.02 sec’);
ylabel(‘—> % of Humidity ‘);
grid
fclose(s)
i=i+1;
drawnow;
end
delete(s)
clear s
1 |
s=serial(‘COM18’); time=100; i=1; while(i<time) fopen(s) fprintf(s,’Your serial data goes here’) out=fscanf(s) Temp(i)=str2num(out(14)); subplot(211); plot(Temp,’g’); axis(,time,20,50); title(‘Parameter: DHT11 Temperature’); xlabel(‘—> time in x*0.02 sec’); ylabel(‘—> Temperature’); grid Humi(i)=str2num(out(59)); subplot(212); plot(Humi,’m’); axis(,time,25,100); title(‘Parameter: DHT11 Humidity’); xlabel(‘—> time in x*0.02 sec’); ylabel(‘—> % of Humidity ‘); grid fclose(s) i=i+1; drawnow; end delete(s) clears |
Сравнение датчиков DHT11, DHT22 и DHT21
На сегодняшний день существует множество датчиков и модулей, которые можно использовать для измерения температуры и прочих показателей, связанных с поддержанием оптимальной жизнедеятельности человека, а также других вещей и организмов.
Их можно использовать в самых простых метеостанциях, в различных системах контроля за климатом и в умном доме, для поддержания необходимой температуры в помещениях, на производстве и во многих других случаях.
Датчики семейства DHT являются самыми популярными в кругу ардуинщиков. Важными критериями здесь являются простота в использовании и написании программного кода, да и относительно недорогая стоимость.
В семействе DHT выделяют три самых распространенных датчика: DHT11, DHT22 и DHT21.
Состоят они из термистора и емкостного датчика влажности. Цифровой сигнал, исходящий от чипа, находящегося внутри датчика, позволяет считывать температуру и влажность воздуха, а уже затем мы можем выводить эти значения в монитор порта или на дисплей, обрабатывать их и т.д.
Подключаются данные модули очень просто – с помощью трех контактов (два из которых отвечают за питание, а третий подключается к цифровому выходу на плате).
Сразу возникает вопрос: а какой датчик лучше применять? Ведь они различаются по своим характеристикам и ценам. Как выбрать необходимый модуль именно для вашего проекта и с правильным соотношением “цена-качество”? Давайте разбираться. Начнем с небольшого обзора.
DHT21 имеет несколько другой вид.
Отличие этого модуля от первых двух заключается в том, что он имеет защитный корпус, что позволяет использовать его на улице, где этот корпус защитит его от пыли, грязи и дождя.
Теперь сравним модули по основным показателям.
Датчик DHT11:
- определение влажности в диапозоне 20-80% с точностью ±5% RH
- определение температуры от 0°C до +50°C с точностью ±2 °C
- частота опроса 1 раз в секунду
Датчик DHT22:
- определение влажности в диапазоне 0-100% с точностью ±2% RH
- определение температуры от -40°C до +125°C с точностью ±0.5℃
- частота опроса 1 раз в 2 секунды
Датчик DHT21:
- определение влажности в диапазоне 0-100% с точностью ±2% RH
- определение температуры от -40°C до +80°C с точностью ±0.5°C
Сравнивая цены на данные модули, можно сразу выделить низкую цену на датчик DHT11. Стоит он, как правило, в районе 100-200 рублей – это связано с высоким спросом на данные модули и с их простым устройством.
DHT21 и DHT22 на фоне первого легко можно отнести к более дорогим: цена на них обычно колеблется в районе 300-400 рублей (то есть в 2-3 раза дороже).
Связано это с большей точностью показаний, большим диапазоном в измерении температур, к тому же у датчика DHT22 есть защитный корпус, который предохраняет его от загрязнения и влаги, что тоже играет весомую роль в составлении цены.
В связи с этим стоит подумать, а так ли вам надо переплачивать за защитный корпус, если применение вашего датчика ограничивается, к примеру, лишь комнатой?
Наиболее оптимальным датчиком для домашней метеостанции будет DHT11, поскольку он дешевле, занимает меньше места, надежен и прост в эксплуатации и не требует от создателя измерять рекордно низкие или высокие температуры, поддерживая стабильность на протяжении долгого времени.
Если же вам необходимо измерять отрицательную температуру или повысить точность и частоту результатов, то воспользуйтесь датчиком DHT22.
Надеемся, что статья была полезной и помогла вам в выборе необходимого модуля в управлении климатом. Удачной всем компиляции и следите за нашим блогом!
DHT22 и Arduino – схема подключенияПодключение кнопки к Arduino
Скетч для работы с датчиками DHT11 и DHT22 в Arduino
#include "DHT.h" #define DHTPIN 2 // Тот самый номер пина, о котором упоминалось выше // Одна из следующих строк закоментирована. Снимите комментарий, если подключаете датчик DHT11 к arduino DHT dht(DHTPIN, DHT22); //Инициация датчика //DHT dht(DHTPIN, DHT11); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(2000); // 2 секунды задержки float h = dht.readHumidity(); //Измеряем влажность float t = dht.readTemperature(); //Измеряем температуру if (isnan(h) || isnan(t)) { // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу Serial.println("Ошибка считывания"); return; } Serial.print("Влажность: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Температура: "); Serial.print(t); Serial.println(" *C "); //Вывод показателей на экран }
После загрузки скетча и подключения датчика, результат измерений можно посмотреть в окне монитора порта. Там будут выводиться значения температуры и влажности. Если что-то пошло не так, проверьте правильность подключения датчика, соответствие номера порта на плате Arduino и в скетче, надежность контактов.
Если все работает и датчик дает показания, можете провести эксперименты. Например, поместить датчик в более холодное место или подышать на него, отслеживая при этом изменения . Если при запотевании уровень влажности увеличивается, значит датчик работает исправно. Подуйте на него тонкой струйкой – влажность уменьшится и температура вернется в норму.
На этом этапе вы сможете заметить разницу между реальным значением температуры и показаниями датчика с ардуино. Точность DHT11 гораздо хуже точности DHT22, о чем мы уже говорили в этой статье. Если у вас есть оба датчика, подключите их к плате Arduino и сравните результаты. По моему опыту, в среднем расхождение составляет больше градуса. Учитывайте это, используя эти датчики в своих проектах.
Характеристики модуля KY-001.
Модуль датчика температуры KY-001 состоит из цифрового датчика температуры DS18B20, светодиода и резистора. Модуль совместим с популярными электронными платформами, такими как Arduino, Raspberry Pi и Esp8266.
- Собран на цифровом сенсоре DS18B20, напряжение питания от 3.0 V до 5.5 V.
- Измеряемая температура -55 ° C до +125 ° C, по Фаренгейту — 67 ° F до 257 ° F.
- В диапазоне от -10 °C до +85 ° C точность измерения ± 0.5 ° C.
- Время измерения не более 750 миллисекунд.
Каждый DS18B20 имеет уникальный номер, что позволяет подключить к одной шине большое количество датчиков.
Схема подключения модуля KY-001 (DS18B20) к Arduino.
Схема подключения модуля KY-001 (DS18B20) к Arduino NANO.
Схема подключения модуля KY-001 (DS18B20) к Arduino.
Подключите линию питания (посередине) c к +5 Arduino, землю (-) и GND соответственно. Подключите сигнал (S) к контакту 2 на Arduino.
Подключение (слева направо)
- GND
- +5V
- S — Signal, в примере подключаем ко 2 выводу arduino
Скетч вывода температуры с модуля KY-001 (DS18B20) в монитор порта.
Код ниже будет выводить показания температуры с модуля KY-001 (DS18B20) в монитор последовательного порта каждую секунду.
#include <OneWire.h> OneWire ds(2); void setup() { Serial.begin(9600); } void loop() { byte i; byte data; byte addr; 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 = ds.read(); } int16_t raw = (data << 8) | data; // датчик может быть настроен на разную точность, выясняем её byte cfg = (data & 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); }
Вот такой результат мы увидим в мониторе порта.
Данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature.h. Данная библиотека ставится поверх OneWire.h, т.е. для ее работы должна быть установлена библиотека OneWire.
С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.
Мы рассмотрим более простотой пример, который я взял из библиотеки, и немного его упростил.
#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); }
В данном примере температура выводится 1 раз в секунду, и при этом выводится температура в Цельсиях и Фаренгейтах в монитор последовательного порта.
Как видите, данный пример намного меньше и более понятен для новичка.
KY-001датчик температуры DS18B20 к ArduinoKY-001
Купить модуль KY-001 можно тут:
Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.
Понравился Урок KY-001 модуль температуры на базе DS18B20. Подключение Arduino? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу , в группу на .
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Файлы для скачивания
Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.
Модуль KY-001 датчика температуры DS18B20.pdf | 82 Kb | 39 | Скачать | |
Скетч вывода температуры с модуля KY-001 .ino | 1 Kb | 39 | Скачать | |
Код с использованием бмблиотеки DallasTemperature.h.ino | 1 Kb | 40 | Скачать | |
Библиотека DallasTemperature .zip | 31 Kb | 47 | Скачать |
Назначение выводов
Как уже говорилось, есть два варианта поставки термодатчика — микросхема с 8 ножками (8-PIN SOIC) или 3 (ТО-92). Из рисунка ниже видно, какие контакты для чего предназначены, включая их полную распиновку.
Линия связи при подключении должна быть задействована через подтягивающий резистор 4.7 кОм. Требование обуславливается работой самого протокола 1-Wire. Питание корпуса, хоть это и не рекомендуется для температур свыше 100 °С, можно организовать от линии данных шины:
Работа вышеописанной схемы обеспечивается внутренним конденсатором Cpp, накапливающим заряд от линии. Ее минус — в моменты трансляции измеренных данных в цифровой вид, из-за повышенного потребления, мощности может просто не хватить на само устройство. Поэтому и рекомендуется использовать схемы с раздельным питанием.
Схема подключения с использованием внешнего источника будет выглядеть по-другому:
Или же, следуя советам профессионалов, выполнить подключение можно также таким образом:
В представленном варианте, схема будет работать от сохраненного через диод заряда в конденсаторе. К сожалению, необходимость в двух проводах никуда не делась.
Если возникает необходимость в определении именно вида поступающего питания на сенсор, то можно произвести опрос самого термодатчика DS18B20, отправив сначала ему команду CС следом B4. На выходе будет 0, если применяется паразитное питание или 1 при раздельном.