Підключення DS18B20 до Arduino: детальний посібник
Зміст статті
- Вступ: чому DS18B20 став "народним" датчиком
- Що таке DS18B20 і чому він крутіший за звичайний термометр?
- Необхідні компоненти для підключення
- ВАЖЛИВЕ ПОПЕРЕДЖЕННЯ
- Схема підключення DS18B20 до Arduino
- Режими живлення DS18B20
- Програмне забезпечення
- Особливості протоколу 1-Wire
- Практичне використання DS18B20
- Додаткові функції та можливості
- Підключення до інших мікроконтролерів
- Вирішення типових проблем
- Заключення
"В світі електроніки датчик температури DS18B20 — це як швейцарський ніж у кишені туриста: надійний, багатофункціональний та незамінний у багатьох ситуаціях."

DS18B20 датчик температури
Вступ: чому DS18B20 став "народним" датчиком
Всім привіт, шановні любителі електроніки та Arduino! Сьогодні ми детально розберемо один із найпопулярніших датчиків температури на планеті — DS18B20. Якщо ви тільки почали свій шлях у світі мікроконтролерів або вже маєте за плечима десяток проектів, цей "малюк" рано чи пізно опиниться у вашому арсеналі.
Чому DS18B20 заслужив звання "народного" датчика температури? Тому що це, мабуть, єдиний датчик, який можна знайти в проектах як початківця, що щойно відкрив коробку з першою Arduino, так і в промислових системах контролю температури. Цей датчик має історію, що налічує не один десяток років, і досі залишається актуальним — погодьтеся, таку "довгожительність" у світі електроніки заслуговують тільки дійсно гідні компоненти!
Що таке DS18B20 і чому він крутіший за звичайний термометр?
DS18B20 — це цифровий датчик температури, розроблений компанією Dallas Semiconductor (сьогодні частина Maxim Integrated). На відміну від аналогових термометрів, які ми використовуємо щодня, цей датчик не просто розширює рідину при нагріванні. Він вимірює температуру з високою точністю та передає дані в цифровому форматі, готовому для обробки мікроконтролером.
Технічні характеристики DS18B20:
- Діапазон вимірювання: від -55°C до +125°C
- Точність: ±0.5°C в діапазоні від -10°C до +85°C
- Роздільна здатність: Програмована від 9 до 12 біт (від 0.5°C до 0.0625°C)
- Інтерфейс: Однопровідний (1-Wire) — потрібен лише один пін мікроконтролера!
- Напруга живлення: 3.0V - 5.5V
- Унікальна особливість: Кожен датчик має власний 64-бітний серійний номер, що дозволяє підключати до 127 датчиків до одного піну!
-
Варіанти корпусу:
- TO-92 (схожий на маленький транзистор) — для вимірювання температури повітря
- Водонепроникний з кабелем — для вимірювання температури рідин
Жарт для розрядки: DS18B20 такий точний, що може визначити, коли ваша дружина/чоловік змінив налаштування термостата лише на один градус, поки вас не було вдома! 😄
Необхідні компоненти для підключення
Перш ніж почати, давайте зберемо все необхідне для нашого проекту. Це як рецепт — спочатку підготуємо інгредієнти:
- Arduino (Uno, Nano, Mega — підійде будь-яка)
- Датчик DS18B20 (в корпусі TO-92 для початку найзручніший)
- Резистор 4.7 кОм (це наш "підтягуючий" резистор — без нього нічого не працюватиме!)
- Макетна плата для зручності з'єднань
- З'єднувальні дроти
- USB-кабель для підключення Arduino до комп'ютера
ВАЖЛИВЕ ПОПЕРЕДЖЕННЯ: Уникайте поширеної помилки!
🚨 УВАГА! 🚨
Перш ніж ми приступимо до схеми підключення, маю поділитися з вами КРИТИЧНО важливою інформацією, яка може врятувати ваш проект від неточних вимірювань.
Існує цікава особливість у роботі DS18B20, про яку мало хто знає: ніколи не підключайте датчик безпосередньо до пінів Arduino без з'єднувальних дротів довжиною щонайменше 10 см!
Якщо ви вставите датчик безпосередньо у піни плати або використаєте занадто короткі дроти (менше 10 см), датчик почне показувати температуру, значно вищу за реальну. Це відбувається через самонагрів датчика або передачу тепла від самої плати Arduino, яка під час роботи може нагріватися.
Експерименти показують, що різниця може сягати більше 8 градусів! Уявіть, що ваша система автоматичного поливу рослин або інкубатор працюватиме з такою похибкою — це може призвести до сумних наслідків.
Тож правило просте: дроти для підключення DS18B20 мають бути не менше 10 см в довжину. Це не примха, а експериментально доведений факт!
Схема підключення DS18B20 до Arduino
Тепер, коли ми знаємо про важливість довжини дротів, давайте приступимо до підключення. DS18B20 має три виводи, і важливо їх правильно ідентифікувати:
Якщо дивитися на пласку сторону датчика (там, де написано DS18B20), то:
- Ліва ніжка — GND (земля)
- Середня ніжка — DQ (сигнальна лінія даних)
- Права ніжка — VCC (живлення)

Розпіновка DS18B20
Покроковий процес підключення:
- Крок 1: Встановіть Arduino та датчик DS18B20 на макетну плату.
- Крок 2: Підключіть GND (ліву ніжку) датчика до піну GND на Arduino.
- Крок 3: Підключіть VCC (праву ніжку) датчика до піну 5V на Arduino.
- Крок 4: Підключіть DQ (середню ніжку) датчика до цифрового піну D2 на Arduino.
- Крок 5: Підключіть резистор 4.7 кОм між лінією даних (DQ) та лінією живлення (VCC). Цей резистор називається "підтягуючим" (pull-up) і необхідний для стабільної роботи протоколу 1-Wire.
Порада з гумором: Забули, яка ніжка де? Не панікуйте! Якщо ви випадково підключите його неправильно, ви просто відкриєте новий закон фізики, в якому температурні датчики можуть виробляти тепло замість його вимірювання... але краще все ж сконфігуруйте правильно! 😉
(3 дроти)"] Підключення-->Паразитний["Паразитне живлення
(2 дроти)"]
Режими живлення DS18B20
DS18B20 може працювати у двох режимах живлення:
- Звичайний режим (три дроти: VCC, GND, DQ) — саме його ми використовуємо в нашій схемі.
- Режим "паразитного живлення" (два дроти: GND, DQ) — датчик отримує енергію з лінії даних! Це зручно, коли у вас обмежена кількість дротів. Однак майте на увазі, що при такому підключенні проблема з довжиною дротів все одно залишається актуальною.
Порівняння режимів живлення DS18B20
Звичайний режим (3 дроти)
Підключення:
- GND (ліва ніжка) → GND на Arduino
- DQ (середня ніжка) → D2 на Arduino
- VCC (права ніжка) → 5V на Arduino
- Резистор 4.7 кОм між DQ та VCC
Переваги:
- Більш стабільна робота
- Вища точність вимірювання
- Менше самонагрівання датчика
- Швидше перетворення даних
- Гарантована робота в діапазоні -55°C до +125°C
Недоліки:
- Потрібно три дроти
- Складніша прокладка кабелів на великі відстані
Режим паразитного живлення (2 дроти)
Підключення:
- GND (ліва ніжка) → GND на Arduino
- DQ (середня ніжка) → D2 на Arduino
- VCC (права ніжка) → не підключається
- Резистор 4.7 кОм між DQ та 5V на Arduino
Переваги:
- Потрібно лише два дроти
- Економія пінів і кабелів
- Простіша прокладка при великій відстані
- Зручно для складних проектів з обмеженим місцем
Недоліки:
- Трохи нижча надійність
- Обмеження в низькотемпературному режимі
- Повільніше перетворення даних
- Більше самонагрівання датчика
⚠️ Важливе зауваження:
В обох режимах дроти мають бути довжиною не менше 10 см, щоб уникнути нагрівання датчика від плати Arduino. Це критично важливо для точності вимірювань!
Принцип роботи паразитного живлення:
У режимі паразитного живлення датчик DS18B20 отримує енергію безпосередньо з лінії даних (DQ). Ця енергія накопичується у внутрішньому конденсаторі датчика під час паузи в передачі даних.
Внутрішній конденсатор заряджається через підтягуючий резистор і забезпечує живлення датчика в моменти, коли на лінії даних низький рівень сигналу. Саме тому важливо правильно підключити 4.7 кОм резистор між DQ та живленням 5V.
Порівняння звичайного режиму і режиму паразитного живлення
Програмне забезпечення: як змусити датчик заговорити
Для роботи з DS18B20 нам знадобляться дві бібліотеки:
- OneWire.h — бібліотека для роботи з протоколом 1-Wire
- DallasTemperature.h — спеціалізована бібліотека для роботи з датчиками DS18B20 (працює поверх OneWire)
Встановлення бібліотек:
- Відкрийте Arduino IDE
- Перейдіть до Sketch -> Include Library -> Manage Libraries...
- У пошуку знайдіть і встановіть бібліотеки "OneWire" та "DallasTemperature"
Базовий скетч для одного датчика:
// Підключаємо необхідні бібліотеки #include <OneWire.h> #include <DallasTemperature.h> // Визначаємо пін, до якого підключений датчик #define ONE_WIRE_BUS 2 // Налаштовуємо екземпляр oneWire для комунікації з пристроями 1-Wire OneWire oneWire(ONE_WIRE_BUS); // Передаємо посилання на oneWire бібліотеці DallasTemperature DallasTemperature sensors(&oneWire); void setup(void) { // Розпочинаємо послідовну комунікацію Serial.begin(9600); Serial.println("Вітаю в майстерні вимірювання температури!"); // Розпочинаємо роботу з датчиком sensors.begin(); } void loop(void) { // Надсилаємо команду на отримання температури Serial.println("Запитуємо дані від датчика..."); sensors.requestTemperatures(); // Отримуємо температуру від першого знайденого датчика float tempC = sensors.getTempCByIndex(0); // Перевіряємо, чи вимірювання успішне if(tempC != DEVICE_DISCONNECTED_C) { Serial.print("Температура: "); Serial.print(tempC); Serial.println(" градусів Цельсія"); } else { Serial.println("Помилка отримання температури від датчика!"); } // Чекаємо 1 секунду перед наступним вимірюванням delay(1000); }
Розширений скетч для кількох датчиків:
Справжня магія DS18B20 розкривається, коли ви підключаєте кілька датчиків до однієї лінії. Ось скетч, який дозволяє працювати з кількома датчиками одночасно:
#include <OneWire.h> #include <DallasTemperature.h> // Визначаємо пін, до якого підключені датчики #define ONE_WIRE_BUS 2 // Налаштовуємо екземпляр oneWire для комунікації з пристроями 1-Wire OneWire oneWire(ONE_WIRE_BUS); // Передаємо посилання на oneWire бібліотеці DallasTemperature DallasTemperature sensors(&oneWire); // Змінні для зберігання адрес пристроїв DeviceAddress thermometer1, thermometer2; void setup(void) { // Розпочинаємо послідовну комунікацію Serial.begin(9600); Serial.println("Демонстрація роботи з кількома датчиками DS18B20"); // Розпочинаємо роботу з датчиками sensors.begin(); // Визначаємо кількість датчиків на шині Serial.print("Знайдено датчиків: "); Serial.println(sensors.getDeviceCount()); // Перевіряємо наявність датчиків if (!sensors.getAddress(thermometer1, 0)) Serial.println("Не знайдено перший датчик!"); if (!sensors.getAddress(thermometer2, 1)) Serial.println("Не знайдено другий датчик!"); // Встановлюємо роздільну здатність 9 біт (може бути 9, 10, 11, 12) sensors.setResolution(thermometer1, 12); sensors.setResolution(thermometer2, 12); } void loop(void) { // Надсилаємо команду на отримання температури sensors.requestTemperatures(); // Виводимо дані з першого датчика Serial.print("Датчик 1: "); printTemperature(thermometer1); // Виводимо дані з другого датчика Serial.print("Датчик 2: "); printTemperature(thermometer2); Serial.println("----------------------------------------"); // Чекаємо 1 секунду перед наступним вимірюванням delay(1000); } // Функція для виведення температури з певного датчика void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); Serial.print(tempC); Serial.println(" °C"); }
Особливості протоколу 1-Wire і чому це круто
Протокол 1-Wire, розроблений тією ж компанією Dallas Semiconductor, — це унікальна технологія, яка дозволяє комунікувати з багатьма пристроями через один сигнальний дріт. Це чудова новина для проектів з обмеженою кількістю пінів!
Переваги 1-Wire:
- Економія пінів — підключіть хоч 127 датчиків до одного піну Arduino!
- Унікальний ідентифікатор — кожен датчик має свою "прописку" у вигляді 64-бітного коду, тому Arduino точно знає, з яким саме датчиком спілкується в даний момент.
- Дальність дії — завдяки цифровій передачі даних, 1-Wire пристрої можуть працювати на значно більших відстанях, ніж аналогові датчики.
Практичне використання DS18B20
Цей датчик є універсальним солдатом електроніки і може бути використаний у безлічі різних проектів:
- Погодна станція — вимірювання температури зовні та всередині приміщення
- Акваріумний термометр — контроль температури води для рибок
- Термостат для системи опалення — автоматичне підтримання комфортної температури
- Контроль температури в холодильнику/морозильній камері
- Пивоваріння — контроль температури на різних етапах варіння пива
- Розумні теплиці — для забезпечення оптимальних умов росту рослин
- Моніторинг серверних приміщень — для запобігання перегрівання обладнання
Жартівливий проект: Датчик DS18B20, підключений до Arduino з GSM-модулем, який надсилає вам SMS, коли ваша піца в духовці досягла ідеальної температури. Хто сказав, що технології не можуть служити справжнім потребам людства? 😄

Приклади практичного використання DS18B20
Додаткові функції та можливості DS18B20
Програмована роздільна здатність
DS18B20 дозволяє програмно встановлювати роздільну здатність вимірювання:
- 9 біт — крок 0.5°C, час перетворення ~94 мс
- 10 біт — крок 0.25°C, час перетворення ~188 мс
- 11 біт — крок 0.125°C, час перетворення ~375 мс
- 12 біт — крок 0.0625°C, час перетворення ~750 мс
Ця функція дозволяє знайти компроміс між точністю вимірювання та споживанням енергії/швидкістю оновлення даних. Нижча роздільна здатність — швидше вимірювання, вища — точніше вимірювання.
Функція термостата
DS18B20 має вбудовану функцію сигналізації (alarm). Можна запрограмувати верхній (TH) та нижній (TL) пороги температури, а потім за допомогою спеціальної команди швидко дізнатися, чи вийшла температура за ці межі, не зчитуючи саме значення температури. Це особливо корисно для систем автоматичного контролю, де потрібно миттєво реагувати на певні порогові значення.
// Приклад встановлення порогів сигналізації sensors.setHighAlarmTemp(thermometer1, 30); // Верхній поріг 30°C sensors.setLowAlarmTemp(thermometer1, 20); // Нижній поріг 20°C // Перевірка, чи спрацювала сигналізація if (sensors.hasAlarm(thermometer1)) { Serial.println("Тривога! Температура за межами встановленого діапазону!"); }
Підключення DS18B20 до інших мікроконтролерів
Хоча ми розглядали підключення до Arduino, DS18B20 успішно працює з багатьма іншими платформами:
ESP8266/ESP32:
Підключення до ESP8266 аналогічне, але пам'ятайте про рівні напруги — ESP працює на 3.3V, а не 5V, як деякі Arduino. Однак DS18B20 чудово працює при напрузі 3.3V.
// Для ESP8266 #define ONE_WIRE_BUS D2 // GPIO4 на NodeMCU

Схема підключення DS18B20 до плати ESP8266
ATmega та інші AVR мікроконтролери:
Підключення до ATmega8 або інших AVR також цілком можливе. При використанні середовища розробки Flowcode слід пам'ятати, що компонент "One Wire" очікує підключення до нульового біта (піна 0) одного з портів мікроконтролера (наприклад, PB0, PC0, PD0 для ATmega8).
Вирішення типових проблем
Типові проблеми та їх вирішення
Показує -127°C
- Перевірити підключення дротів
- Перевірити підтягуючий резистор
- Перевірити справність датчика
Некоректна температура
- Перевірити якість з'єднань
- Довжина дротів > 10 см
- Віддалити від джерел тепла
Arduino не розпізнає датчик
- Перевірити встановлені бібліотеки
- Перевірити адресу пристрою
- Правильне підключення резистора
Повільні вимірювання
- Знизити роздільну здатність
- Перевірити кількість датчиків на шині
- Оптимізувати код для швидкодії
Датчик показує значення -127°C
Це класична ознака проблеми з підключенням. Перевірте:
- Чи правильно підключені дроти (особливо лінія даних)
- Чи справний підтягуючий резистор
- Чи не пошкоджений сам датчик
Температура показується некоректно або змінюється стрибками
- Перевірте якість з'єднань
- Переконайтеся, що довжина з'єднувальних дротів не менше 10 см
- Переконайтеся, що датчик не знаходиться поблизу джерел тепла (включаючи саму плату Arduino)
Arduino не розпізнає датчик
- Перевірте, чи правильно встановлені бібліотеки
- Перевірте адресу пристрою — іноді необхідно явно вказати адресу датчика в коді
- Переконайтеся, що підтягуючий резистор підключений саме між лінією даних та VCC, а не GND
Вимірювання дуже повільні
- Спробуйте знизити роздільну здатність (з 12 біт до 9 біт)
- Перевірте, чи не надто велика кількість датчиків на одній шині (більше 10-15 можуть сповільнювати роботу)

Діагностика та вирішення проблем з DS18B20
Заключення: Чому DS18B20 залишається фаворитом
Датчик DS18B20 заслужено займає особливе місце в світі електроніки. Його поєднання точності, надійності, простоти використання та унікальних можливостей протоколу 1-Wire роблять його незамінним інструментом у багатьох проектах.
Однак, як ми з'ясували, навіть у такого досконалого пристрою є свої особливості, про які варто знати. Зокрема, критична довжина з'єднувальних дротів у 10 см — це той маленький, але важливий нюанс, який може серйозно вплинути на точність вимірювань.
Надіюся, що ця інформація допоможе вам у ваших проектах з Arduino та DS18B20. Як сказав би якийсь філософ від електроніки: "Добре виміряна температура — половина успіху будь-якого проекту!"
А тепер беріть свою паяльну станцію, Arduino, датчик DS18B20 і починайте творити чудеса електроніки! І не забудьте про дроти довжиною не менше 10 см — адже дрібниці вирішують все! 😉
P.S. Якщо у вас виникнуть цікаві ідеї щодо причин феномену з довжиною дротів та DS18B20, не соромтеся ділитися ними в коментарях — ми всі тут, щоб вчитися та розвиватися разом!
© 2025 Мій Проект.Автор: Jazzzman. Використання матеріалів дозволено лише з посиланням на джерело.
Написати коментар