🛒
0 товаров
0 руб.

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


🕓 Проект: журнал движения с меткой времени на HC-SR505 и DS1302

Датчик HC-SR505, часы DS1302 и LCD1602

HC-SR505 фиксирует каждое срабатывание, а часы реального времени DS1302 сохраняют точное время последнего обнаружения — удобно, чтобы точно знать, когда именно кто-то заходил в комнату.

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

HC-SR505 — миниатюрный пироэлектрический датчик движения (PIR): он реагирует на изменение инфракрасного излучения в поле обзора, то есть фактически на движение тёплого объекта (человека, животного) относительно фона. В отличие от более крупного HC-SR501, у SR505 нет регулировки чувствительности и времени удержания на самой плате — зато он компактнее и работает от 3.3-5V.

Часы реального времени DS1302 хранят текущее время даже при отключённом питании Arduino, благодаря собственной батарейке CR2032 на модуле. Это ключевая деталь проекта: без RTC-модуля Arduino "забывает" время при каждом отключении, и журнал движения был бы бесполезен.

Логика проста: как только PIR переходит из LOW в HIGH (новое срабатывание, а не удержание предыдущего), скетч считывает текущее время с DS1302 и выводит его на LCD — так на экране всегда видно время последнего обнаружения.

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

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

  1. Подключите HC-SR505: OUT → D2, VCC → 5V (или 3.3V), GND → GND.
  2. Подключите DS1302: CLK → D5, DAT → D4, RST → D3, VCC → 5V, GND → GND.
  3. Подключите LCD1602 с I2C-переходником: SDA → A4, SCL → A5.
  4. При первой загрузке один раз выставьте время на DS1302 (см. ниже), затем можно убрать эту строку из кода.

Скетч

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

#include <ThreeWire.h>
#include <RtcDS1302.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

ThreeWire myWire(4, 5, 3);          // DAT, CLK, RST
RtcDS1302<ThreeWire> Rtc(myWire);
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес 0x27 — самый частый, у некоторых плат 0x3F

const int pirPin = 2;    // выход HC-SR505
bool lastState = LOW;    // предыдущее состояние датчика для отслеживания фронта

void setup() {
  Serial.begin(9600);
  Rtc.Begin();

  // При ПЕРВОЙ загрузке раскомментируйте строку ниже, чтобы выставить
  // время по моменту компиляции скетча, затем закомментируйте обратно —
  // иначе при каждой перепрошивке время будет сбрасываться.
  // Rtc.SetDateTime(RtcDateTime(__DATE__, __TIME__));

  pinMode(pirPin, INPUT);
  lcd.init();
  lcd.backlight();
}

void loop() {
  bool state = digitalRead(pirPin);

  if (state == HIGH && lastState == LOW) {
    // новое срабатывание (фронт LOW -> HIGH), а не продолжение предыдущего
    RtcDateTime now = Rtc.GetDateTime();

    lcd.setCursor(0, 0);
    lcd.print("Last: ");
    lcd.print(now.Hour());
    lcd.print(':');
    lcd.print(now.Minute());
    lcd.print(':');
    lcd.print(now.Second());
    lcd.print("  ");

    Serial.print("Движение зафиксировано: ");
    Serial.print(now.Hour());
    Serial.print(':');
    Serial.println(now.Minute());
  }

  lastState = state;
  delay(200);
}

Перед первым запуском часы DS1302 нужно один раз выставить командой `Rtc.SetDateTime()` с текущей датой и временем — дальше они идут сами от собственной батарейки.

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

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

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

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

← 📐 датчик наклона для сейфа на KY-020🪟 многозонная герконовая сигнализация на KY-… →

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

Все 2 товара сразу в корзину: 173 ₽ 156 ₽ (экономия 17 ₽)

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

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

Корзина


Поиск



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