
Интернет-магазин «Неглупый Дом»
Цифровой датчик DS18B20 измеряет температуру и выводит её на экран LCD1602 через I2C-переходник — без лишних проводов на дисплей, всего два сигнальных пина.
DS18B20 — цифровой датчик температуры с интерфейсом 1-Wire: всего один провод передаёт данные, а не аналоговое напряжение, как у простых терморезисторов. Это значит, что на длинном проводе (например, если датчик вынесен на улицу или в аквариум) сигнал не искажается наводками так, как это происходит с аналоговым сигналом. У каждого датчика DS18B20 есть свой уникальный 64-битный адрес, поэтому теоретически к одному пину Arduino можно подключить сразу несколько датчиков DS18B20 одновременно, опрашивая их по очереди — в этом проекте используется один.
Экран LCD1602 без переходника занимает 6 пинов Arduino (RS, E, 4 линии данных) плюс питание. Переходник I2C (модуль на чипе PCF8574) превращает это в 2 сигнальных провода — SDA и SCL — по которым LCD1602 "разговаривает" с Arduino по протоколу I2C. Это освобождает пины для других модулей и заметно упрощает разводку проводов на макетной плате.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <OneWire.h> // библиотека для протокола 1-Wire
#include <DallasTemperature.h> // библиотека конкретно под датчики DS18B20
#include <Wire.h> // стандартная библиотека для шины I2C
#include <LiquidCrystal_I2C.h> // библиотека для LCD-дисплея через I2C-переходник
#define ONE_WIRE_BUS 2 // пин, к которому подключён сигнальный провод DS18B20
OneWire oneWire(ONE_WIRE_BUS); // создаём шину 1-Wire на этом пине
DallasTemperature sensors(&oneWire); // передаём шину в библиотеку датчиков температуры
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес дисплея на шине I2C, 16 столбцов, 2 строки
void setup() {
Serial.begin(9600); // открываем монитор порта для отладки
sensors.begin(); // инициализируем датчик температуры
lcd.init(); // инициализируем дисплей
lcd.backlight(); // включаем подсветку экрана
lcd.setCursor(0, 0);
lcd.print("DS18B20 ready"); // приветственное сообщение при старте
delay(1000);
lcd.clear();
}
void loop() {
sensors.requestTemperatures(); // отправляем всем датчикам на шине команду измерить температуру
float t = sensors.getTempCByIndex(0); // забираем результат измерения от первого (и единственного) датчика
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C "); // пробелы в конце стирают "хвост" от предыдущего, более длинного числа
Serial.print("Temperatura: ");
Serial.println(t); // дублируем значение в монитор порта для отладки
delay(1000); // пауза между измерениями
}
Библиотеки OneWire, DallasTemperature и LiquidCrystal_I2C ставятся через Менеджер библиотек Arduino IDE (Скетч → Подключить библиотеку → Управлять библиотеками). Если LCD не откликается — проверьте адрес на шине I2C через скетч-сканер I2C (обычно 0x27 или 0x3F).
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 302 ₽ 272 ₽ (экономия 30 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.