← До всіх проєктів
Автоматизація Початковий

Датчик руху HC-SR501 вмикає світло через реле

Автоматичне світло в коридорі чи коморі: PIR-датчик бачить людину, ESP32 вмикає реле. Налаштування чутливості й часу утримання на самому датчику, модуль реле, контакти NO/COM і техніка безпеки при роботі з 230 В.

Складність
Початковий
Час
30 min
Категорія
Автоматизація
Оновлено

Про проєкт

Пасивний інфрачервоний (PIR) датчик реагує на зміну теплового випромінювання: людина, що рухається, «перетинає» його зони чутливості. Він не випромінює нічого сам, тож споживає мікроампери і працює роками. Разом із реле виходить класичне автосвітло.

Що знадобиться

  • ESP32 DevKit
  • PIR-датчик HC-SR501 (або мініатюрний AM312)
  • Модуль реле на 5 В (з оптроном або транзистором на вході)
  • Лампа або, для першої збірки, світлодіод із резистором замість неї

Схема

Модуль Вивід ESP32
HC-SR501 VCC 5V
OUT GPIO27
GND GND
Реле VCC 5V
IN GPIO26
GND GND

Вихід HC-SR501 видає 3.3 В, хоч сам датчик живиться від 5 В, тож його можна підключати прямо до ESP32. Для HC-SR501 потрібно ≥ 4.5 В живлення, від 3.3 В він працює нестабільно.

Навантаження вмикається контактами реле: COM (спільний) і NO (нормально розімкнений) замикаються, коли реле ввімкнене. NC — навпаки, розімкнений при ввімкненому реле.

⚠️ 230 В смертельно небезпечні. Контакти реле ізольовані від ESP32, але підключення до мережі робіть лише знеструмивши лінію, в закритому корпусі, з запобіжником. Якщо немає досвіду, для навчання використовуйте низьковольтну лампу 12 В або світлодіод.

Налаштування HC-SR501

На платі датчика два підстроювальні резистори і перемичка:

  • Sx (чутливість) — дальність до ~7 м.
  • Tx (час утримання) — скільки секунд тримати HIGH після останнього руху, від ~3 с до кількох хвилин. Для керування з ESP32 виставте мінімум, а таймер робіть у коді.
  • Перемичка H/L: «H» — повторний рух продовжує імпульс (для світла саме це), «L» — одиночні імпульси.

Після ввімкнення датчику потрібно до хвилини на «прогрів»: у цей час він може хибно спрацьовувати.

Код

// PIR-датчик вмикає лампу через реле
const int PIR_PIN = 27;
const int RELAY_PIN = 26;

void setup() {
  Serial.begin(115200);
  pinMode(PIR_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);
}

void loop() {
  bool motion = digitalRead(PIR_PIN) == HIGH;
  digitalWrite(RELAY_PIN, motion ? HIGH : LOW);
  static bool last = false;
  if (motion != last) {   // пишемо в порт лише зміни стану
    last = motion;
    Serial.println(motion ? "Рух! Світло УВІМК" : "Руху немає. Світло ВИМК");
  }
  delay(50);
}

Як покращити

  • Таймер у коді. Замість Tx на датчику тримайте світло ще 60 с після останнього руху: lastMotion = millis() і перевірка millis() - lastMotion < 60000.
  • Лише в темряві. Додайте фоторезистор на ADC1 і вмикайте світло тільки нижче порогу освітленості.
  • Реле з «активним LOW». Багато модулів вмикаються від LOW на IN. Тоді інвертуйте логіку, а в setup() спершу digitalWrite(RELAY_PIN, HIGH) і лише потім pinMode, щоб реле не клацнуло при старті.