🛒
0 товар.
0 руб.
Логотип

Интернет-магазин «Неглупый Дом»

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

🌡️ Проект: термостат на LM75 с управлением реле для вентилятора или нагревателя

LM75 — простой цифровой датчик температуры по I2C, а реле превращает его показания в управление вентилятором или нагревателем с гистерезисом, чтобы контакты не "дребезжали" около порога.

Как это работает

LM75 хранит температуру в 16-битном регистре без формулы калибровки под экземпляр. Значащие 9 старших бит сдвигают вправо на 5 и умножают на 0.125°C. Адрес по умолчанию 0x48 при A0-A2 на GND.

Гистерезис — разница между порогом включения и выключения. Без него реле щёлкало бы десятки раз в минуту при колебаниях температуры у порога — в коде заведены два значения, отличающиеся на пару градусов.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. LM75: SDA → A4, SCL → A5, VCC → 5V, GND → GND.
  2. Реле: сигнальный вход → D2, VCC → 5V, GND → GND.
  3. Силовую нагрузку подключайте к COM и NO реле строго по инструкции модуля — эта часть может работать с сетевым напряжением и должна быть собрана аккуратно и изолированно.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.

#include <Wire.h>

const int LM75_ADDR = 0x48;
const int RELAY_PIN = 2;
const float TEMP_ON = 28.0;
const float TEMP_OFF = 26.0;
bool relayOn = false;

float readLM75() {
  Wire.beginTransmission(LM75_ADDR);
  Wire.write(0x00);
  Wire.endTransmission();
  Wire.requestFrom(LM75_ADDR, 2);
  int16_t raw = (Wire.read() << 8) | Wire.read();
  raw = raw >> 5;
  return raw * 0.125;
}

void setup() {
  Serial.begin(9600);
  Wire.begin();
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);
}

void loop() {
  float temp = readLM75();
  Serial.println(temp);

  if (!relayOn && temp >= TEMP_ON) {
    relayOn = true;
    digitalWrite(RELAY_PIN, HIGH);
  } else if (relayOn && temp <= TEMP_OFF) {
    relayOn = false;
    digitalWrite(RELAY_PIN, LOW);
  }
  delay(1000);
}
                

Дополнительные библиотеки не нужны, только Wire.h. Если датчик не отвечает — проверьте его адрес сканером шины I2C.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🧯 анализатор утечки бытового газ…🕰️ программируемый таймер включен… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу: 207 ₽ 186 ₽ (экономия 21 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина

Поиск


Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA