
Интернет-магазин «Неглупый Дом»
Комплект KY-001/013/028/015 включает четыре разных дешёвых аналоговых датчика температуры на основе терморезисторов (термисторов). В отличие от цифровых датчиков типа DS18B20 или LM75, уже разбиравшихся в других проектах на сайте, каждый из этих четырёх даёт просто переменное напряжение, которое нужно самостоятельно пересчитывать в градусы — этот проект читает все четыре одновременно и выводит их показания рядом на одном экране LCD1602 для наглядного сравнения.
Термистор — это резистор, сопротивление которого заметно меняется с температурой. Подключив термистор в делитель напряжения с обычным постоянным резистором, получаем на средней точке делителя напряжение, зависящее от температуры — именно его и читает `analogRead()`. Разные модули в этом комплекте могут отличаться конкретным номиналом терморезистора при 25°C и коэффициентом его изменения (так называемый коэффициент B), поэтому точный пересчёт показаний именно в градусы Цельсия требует знания этих паспортных параметров для каждого конкретного датчика, которые производитель часто не указывает подробно для бюджетных модулей такого уровня.
Поэтому в этом проекте показания всех четырёх датчиков выводятся как относительные числа (`analogRead()`, 0-1023), а не как точные градусы — честно, без придуманной формулы калибровки, которая выдавала бы ложную точность. Такое сравнение всё равно практически полезно: если все четыре датчика находятся в одинаковых условиях (например, рядом друг с другом на столе), их относительные показания должны вести себя похоже и сонаправленно при изменении температуры в помещении — это и есть практическая демонстрация принципа, а не лабораторный точный термометр.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему. Показания — относительные
// числа analogRead(), не калиброванные градусы (см. текст статьи выше).
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int SENSOR_PINS[4] = {A0, A1, A2, A3}; // KY-001, KY-013, KY-028, KY-015 — в любом порядке подключения
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void loop() {
int values[4];
for (int i = 0; i < 4; i++) {
values[i] = analogRead(SENSOR_PINS[i]);
}
Serial.print("KY-001/013/028/015: ");
for (int i = 0; i < 4; i++) {
Serial.print(values[i]);
Serial.print(" ");
}
Serial.println();
lcd.setCursor(0, 0);
lcd.print(values[0]);
lcd.print(" ");
lcd.print(values[1]);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(values[2]);
lcd.print(" ");
lcd.print(values[3]);
lcd.print(" ");
delay(500);
}
Библиотеки Wire и LiquidCrystal_I2C ставятся через Менеджер библиотек Arduino IDE. Если LCD не откликается — проверьте адрес на шине I2C через скетч-сканер (обычно 0x27 или 0x3F).
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 437 ₽ 393 ₽ (экономия 44 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.