Как собрать цифровой термометр с DS18B20 и OLED-дисплеем — пошагово, без лишней теории

Как собрать цифровой термометр с DS18B20 и OLED-дисплеем — пошагово, без лишней теории

Если ты хочешь просто узнать температуру в комнате, на кухне или в холодильнике — купи готовый термометр за 300 рублей. Но если ты хочешь понять, как это работает изнутри, и при этом получить точный, настраиваемый и надёжный прибор — собери его сам. Я сделал десятки таких термометров: для дачи, для серверной, для аквариума. И сейчас расскажу, как сделать это без лишней головной боли.

Что тебе понадобится

Всё это можно купить за 5–7 минут на AliExpress или в местном радиомагазине. Не ищи «профессиональные» компоненты — здесь всё простое и дешёвое.

  • DS18B20 — цифровой датчик температуры. Точность ±0.5°C, диапазон от -55°C до +125°C. Берёшь в корпусе TO-92 (три ножки) или в водонепроницаемом корпусе (если будешь мерить в воде или на улице).
  • OLED-дисплей 0.96 дюйма — 128×64 пикселей, I2C. Берёшь с чипом SSD1306. Не берёшь дисплеи с другими чипами — они не будут работать с библиотекой по умолчанию.
  • Arduino Nano (или любая совместимая плата: Uno, Pro Mini). Нужен именно микроконтроллер, потому что DS18B20 требует специального протокола OneWire, а OLED — I2C. Простой логический контроллер не справится.
  • Резистор 4.7 кОм — нужен для подтяжки сигнала датчика. Без него датчик будет глючить.
  • Провода, макетная плата, паяльник — если не хочешь паять, купи набор «джамперов» и работай без пайки.
  • Блок питания — можно от USB-кабеля, от батарейки 9В или от зарядки 5В. Главное — стабильное напряжение.

Всё это обойдётся в 300–500 рублей. Если ты уже есть Arduino — добавь только датчик и дисплей — итого 150–200 рублей.

Как подключить — схема без головной боли

Не надо запоминать схемы. Я покажу, как подключить, чтобы не гадать, почему не работает.

  1. DS18B20:
    • Красный — на +5В (VCC)
    • Чёрный — на GND
    • Жёлтый (или белый) — на D2 (или любой цифровой пин, но D2 удобнее)
    • На жёлтый провод между датчиком и +5В ставишь резистор 4.7 кОм. Это обязательное условие. Без него датчик не будет отвечать.
  2. OLED:
    • VCC — на +3.3В или +5В (дисплей работает и на том, и на другом)
    • GND — на GND
    • SCL — на A5 (на Nano это SCL)
    • SDA — на A4 (на Nano это SDA)

Если у тебя Arduino Nano — пины A4 и A5 именно для I2C. На других платах — ищи маркировку SDA/SCL. Не путай с цифровыми пинами. Если подключишь SDA на D2 — ничего не заработает.

Как прошить — код, который работает сразу

Не надо искать «лучший» код. Вот рабочий вариант, который я использую годами. Копируй, вставляй, заливай.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET    -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(9600);
  
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("OLED не найден");
    while(1);
  }
  
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);
  display.println("Термометр");
  display.display();
  
  sensors.begin();
}

void loop() {
  sensors.requestTemperatures();
  float temp = sensors.getTempCByIndex(0);
  
  if(temp != DEVICE_DISCONNECTED_C) {
    display.clearDisplay();
    display.setCursor(0,0);
    display.setTextSize(2);
    display.print("T: ");
    display.print(temp);
    display.print("°C");
    display.display();
  } else {
    display.clearDisplay();
    display.setCursor(0,0);
    display.setTextSize(1);
    display.print("Датчик отключен");
    display.display();
  }
  
  delay(1000);
}

Перед тем как заливать — установи две библиотеки в Arduino IDE:

  • Adafruit SSD1306
  • Adafruit GFX Library
  • DallasTemperature

Их можно установить через «Управление библиотеками» (Sketch → Include Library → Manage Libraries). Вбей названия — найдёшь. Не ставь «Dallas» без «Adafruit» — они не совместимы.

После заливки — дай устройству 3–5 секунд. Дисплей сначала может не включаться. Это нормально. Если через 10 секунд ничего не появилось — проверь подключение OLED. Частая ошибка: подключили SDA/SCL не на те пины.

Что выбрать: водонепроницаемый датчик или обычный?

Если ты просто хочешь мерить температуру в комнате — бери обычный DS18B20 в корпусе TO-92. Он дешевле, компактнее, и его легко приклеить к стене.

Если тебе нужно:

  • Измерять температуру воды (аквариум, бойлер)
  • Мерить на улице или в подвале с высокой влажностью
  • Закопать датчик в землю или вложить в емкость

— берёшь водонепроницаемый вариант. Он в металлической трубочке с термоусадкой. Стоит на 50–80 рублей дороже, но спасает от коррозии и обрыва проводов.

Важно: водонепроницаемый датчик работает медленнее. Он реагирует на изменения температуры с задержкой в 2–3 секунды. Обычный — за 0.5–1 секунду. Если тебе нужна скорость (например, контроль нагрева воды), берёшь обычный.

Сравнение вариантов: что дешевле и надёжнее

Вариант Стоимость Точность Скорость ответа Надёжность Где использовать
DS18B20 TO-92 50–80 руб. ±0.5°C 0.5–1 сек Средняя — боится влаги Комната, шкаф, серверная
DS18B20 в корпусе (водонепр.) 130–180 руб. ±0.5°C 2–3 сек Высокая — выдержит воду Аквариум, бойлер, улица
Аналоговый термистор + ADC 80–120 руб. ±1–2°C 1–2 сек Средняя — калибровка нужна Только если нет DS18B20
Готовый термометр 300–600 руб. ±0.5–1°C 1–2 сек Высокая — не ломается Если не хочешь возиться

Если ты хочешь просто узнать температуру — купи готовый. Если хочешь понять, как это работает, и иметь возможность дорабатывать (например, добавить логирование, уведомления, управление вентилятором) — собирай сам. Это не про экономию. Это про контроль.

Что ломается чаще всего — и как этого избежать

Вот пять ошибок, которые делают новички — и потом часами гадают, почему не работает.

  1. Нет резистора 4.7 кОм. Без него датчик не отвечает. Даже если всё подключено идеально — без резистора датчик молчит. Это самая частая причина «не работает».
  2. Подключили OLED к цифровым пинам вместо I2C. SDA и SCL — это не просто «любые провода». Это специальные линии. На Nano — A4 и A5. Если подключишь на D4 и D5 — дисплей не загорится.
  3. Забыли установить библиотеки. Просто скопировать код — недостаточно. Надо установить три библиотеки. Если не установишь — IDE выдаст ошибку «DallasTemperature not found».
  4. Датчик в воде, но не водонепроницаемый. Ставишь обычный датчик в аквариум — через неделю он сдохнет. Металл внутри окисляется. Никакой ремонт не спасёт.
  5. Питание нестабильное. Если дисплей моргает, а датчик выдаёт странные значения — скорее всего, у тебя слабый блок питания. USB-кабель от телефона может не справляться, особенно если дисплей яркий. Лучше — отдельная зарядка 5В/2А или батарейка 9В.

Если после сборки ничего не работает — проверь резистор. Потом — подключение OLED. Потом — библиотеки. И только потом — паяльник. 90% проблем решаются на первых трёх шагах.

Как сделать лучше — практические советы

Ты собрал базовый термометр. Теперь сделай его полезным.

  • Добавь кнопку переключения — если хочешь видеть температуру в Фаренгейтах. Добавь кнопку на D3, и в коде сделай переключение: temp = sensors.getTempCByIndex(0);temp = sensors.getTempFByIndex(0);
  • Сделай логирование — подключи модуль SD-карты или отправляй данные через WiFi (ESP8266). Тогда ты будешь знать, как менялась температура за день.
  • Установи датчик в защитный корпус — даже если он водонепроницаемый, обмотай его термоусадкой. Влажность в подвале или на балконе быстро разрушает пайку.
  • Проверь адрес датчика — если у тебя несколько DS18B20, каждый имеет уникальный адрес. Напиши простой скрипт, который выведет все адреса в монитор порта. Это нужно, чтобы знать, какой датчик где.
  • Сделай уведомление при критической температуре — если температура упала ниже 5°C или поднялась выше 30°C — включи светодиод или подай звуковой сигнал. Для этого добавь пьезоэлемент или LED на D13.

Что делать в разных ситуациях

Не все задачи одинаковы. Вот как действовать в разных случаях.

Ситуация 1: Ты хочешь просто знать температуру на кухне

Бери обычный DS18B20, Arduino Nano, OLED. Собираешь на макетной плате. Крепишь на стену с помощью двустороннего скотча. Питаешь от USB-зарядки. Всё. Готово. Не трогай. Проверяешь раз в месяц — если дисплей светится, всё ок.

Ситуация 2: Ты хочешь контролировать температуру в аквариуме

Бери водонепроницаемый DS18B20. Помести его в термоусадку, пропаяй провода, залей эпоксидкой. Подключи к Arduino, но не оставляй плату в воде. Вынеси её на сухо, а датчик опусти в воду. Добавь реле — чтобы при температуре ниже 22°C включал подогреватель. Или выше 28°C — вентилятор.

Ситуация 3: Ты хочешь, чтобы термометр работал без розетки

Замени Arduino Nano на Pro Mini (он меньше, дешевле). Питай от двух аккумуляторов 18650 (7.4В) через стабилизатор 5В. Добавь таймер — чтобы дисплей гас через 30 секунд. Или используй дисплей с низким энергопотреблением — OLED и так тратит мало. Срок работы — до 3 месяцев.

Ситуация 4: Ты хочешь, чтобы термометр работал в холодильнике

Используй водонепроницаемый датчик. Но не подключай его напрямую к холодильнику — он может замёрзнуть. Лучше закрепить его на стенке холодильника снаружи, но внутри дверцы — там температура стабильна и не ниже -10°C. Или вставь его в пластиковую трубку, закрепи на полке — и веди провод к внешнему блоку.

Итог: что делать прямо сейчас

Если ты читаешь это — значит, тебе не хватает простого, точного и надёжного термометра. Не покупай готовый. Собери сам.

Вот твой план на сегодня:

  1. Закажи DS18B20 (обычный или водонепроницаемый — выбирай по ситуации) и OLED 0.96 дюйма.
  2. Если нет Arduino — купи Nano. Если есть — просто возьми его.
  3. Купи резистор 4.7 кОм (он стоит 10 рублей).
  4. Собери схему по схеме выше — без пайки, на макетке.
  5. Установи три библиотеки в Arduino IDE.
  6. Скопируй код, который я дал.
  7. Загрузи его на плату.
  8. Включи питание.

Если через 10 секунд на дисплее появилась температура — ты сделал всё правильно. Если нет — проверь резистор. Потом — подключение OLED. Потом — библиотеки.

Это не про «умный дом». Это про то, чтобы понимать, как работает простая вещь. Когда ты собрал термометр сам — ты больше не боишься, когда что-то ломается. Ты знаешь, как это починить. И это ценнее, чем любая готовая система.

Информация в этой статье носит ознакомительный характер. При использовании термометра для контроля температуры в медицинских, пищевых или промышленных целях, убедитесь, что устройство соответствует требованиям безопасности и было калибровано профессионально.

Radio-Blog.ru