Интернет-магазин «Неглупый Дом»
HC-SR505 фиксирует срабатывания, часы DS1302 сохраняют точное время последнего обнаружения.
HC-SR505 — миниатюрный PIR-датчик движения: реагирует на изменение инфракрасного излучения в поле обзора, то есть на движение тёплого объекта относительно фона. В отличие от крупного HC-SR501, у SR505 нет регулировок на плате, но он компактнее и работает от 3.3-5V.
Часы DS1302 хранят текущее время даже при отключённом питании Arduino благодаря батарейке CR2032 на модуле — без них журнал движения был бы бесполезен, так как Arduino "забывает" время при каждом отключении.
Как только PIR переходит из LOW в HIGH (новое срабатывание), скетч считывает время с DS1302 и выводит его на LCD.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#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;
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) {
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.println(now.Hour());
}
lastState = state;
delay(200);
}
Перед первым запуском часы DS1302 выставляются один раз командой `Rtc.SetDateTime()` — дальше идут сами от батарейки.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу: 173 ₽ 156 ₽ (экономия 17 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.