Ничего не найдено :(
    В гостях у Самоделкина! » Копилка » Самоделки » Умная система безопасности с датчиком движения, камерой и Telegram-оповещениями

    Умная система безопасности с датчиком движения, камерой и Telegram-оповещениями

    Этот мощный скетч превращает Arduino в охранную систему, которая:

    1. Обнаруживает движение с помощью PIR-датчика

    2. Делает фото при срабатывании

    3. Отправляет уведомление в Telegram

    4. Включает сирену и световую сигнализацию

    5. Сохраняет журнал событий на SD-карту


    Необходимые компоненты:

    • Плата Arduino Uno/Nano

    • Модуль ESP32-CAM (камера + WiFi)

    • PIR-датчик движения HC-SR501

    • Релейный модуль

    • Сирена 12V

    • Светодиодная лента (красная)

    • Модуль SD-карты

    • Источник питания 5V и 12V

    • Макетная плата и провода



    Полный скетч


    #include <WiFi.h>
    #include <ESP32CAM.h>
    #include <UniversalTelegramBot.h>
    #include <SD.h>
    #include <SPI.h>
    
    // Настройки WiFi
    const char* ssid = "YOUR_SSID";
    const char* password = "YOUR_PASSWORD";
    
    // Настройки Telegram
    #define BOT_TOKEN "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXX"
    #define CHAT_ID "XXXXXXXXXX"
    
    // Пины подключения
    #define PIR_PIN 2
    #define RELAY_PIN 3
    #define LED_PIN 4
    #define BUZZER_PIN 5
    #define SD_CS_PIN 15
    
    // Переменные
    bool motionDetected = false;
    unsigned long lastDetectionTime = 0;
    const unsigned long ALARM_DURATION = 30000; // 30 секунд тревоги
    
    WiFiClientSecure client;
    UniversalTelegramBot bot(BOT_TOKEN, client);
    ESP32CAM camera;
    
    void setup() {
      Serial.begin(115200);
      
      // Инициализация пинов
      pinMode(PIR_PIN, INPUT);
      pinMode(RELAY_PIN, OUTPUT);
      pinMode(LED_PIN, OUTPUT);
      pinMode(BUZZER_PIN, OUTPUT);
      digitalWrite(RELAY_PIN, LOW);
      
      // Подключение к WiFi
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("WiFi connected");
      
      // Инициализация камеры
      camera.init();
      camera.setResolution(FRAMESIZE_VGA);
      
      // Инициализация SD-карты
      if (!SD.begin(SD_CS_PIN)) {
        Serial.println("SD Card error");
      }
      
      // Тестовое уведомление
      bot.sendMessage(CHAT_ID, "Система безопасности активирована", "");
    }
    
    void loop() {
      // Проверка датчика движения
      if (digitalRead(PIR_PIN) == HIGH && !motionDetected) {
        triggerAlarm();
        lastDetectionTime = millis();
        motionDetected = true;
      }
      
      // Автоматическое отключение через 30 секунд
      if (motionDetected && (millis() - lastDetectionTime > ALARM_DURATION)) {
        stopAlarm();
        motionDetected = false;
      }
      
      // Проверка новых сообщений в Telegram
      if (motionDetected) {
        int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
        handleTelegramMessages(numNewMessages);
      }
    }
    
    void triggerAlarm() {
      // 1. Активация сигнализации
      digitalWrite(RELAY_PIN, HIGH); // Сирена
      digitalWrite(LED_PIN, HIGH);   // Световая сигнализация
      tone(BUZZER_PIN, 1000);        // Зуммер
      
      // 2. Сделать фото
      camera_fb_t *fb = camera.capture();
      if (fb) {
        // 3. Сохранить на SD-карту
        String filename = "/photo_" + String(millis()) + ".jpg";
        File file = SD.open(filename.c_str(), FILE_WRITE);
        file.write(fb->buf, fb->len);
        file.close();
        
        // 4. Отправить в Telegram
        bot.sendPhoto(CHAT_ID, fb->buf, fb->len);
        
        // 5. Освободить память
        camera.returnFrameBuffer(fb);
      }
      
      // 6. Запись в журнал
      logEvent("Motion detected");
    }
    
    void stopAlarm() {
      digitalWrite(RELAY_PIN, LOW);
      digitalWrite(LED_PIN, LOW);
      noTone(BUZZER_PIN);
      
      bot.sendMessage(CHAT_ID, "Тревога отключена", "");
      logEvent("Alarm stopped");
    }
    
    void handleTelegramMessages(int numNewMessages) {
      for (int i = 0; i < numNewMessages; i++) {
        String text = bot.messages[i].text;
        
        if (text == "/status") {
          String reply = "Статус: " + String(motionDetected ? "ТРЕВОГА" : "НОРМА");
          bot.sendMessage(CHAT_ID, reply, "");
        }
        else if (text == "/off") {
          stopAlarm();
          motionDetected = false;
        }
      }
    }
    
    void logEvent(String event) {
      File logFile = SD.open("/log.txt", FILE_APPEND);
      if (logFile) {
        logFile.println(getTime() + " - " + event);
        logFile.close();
      }
    }
    
    String getTime() {
      // Здесь можно добавить RTC модуль для точного времени
      return String(millis() / 1000);
    }


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

    • Обнаружение движения:

      • PIR-датчик реагирует на перемещение в зоне 5-7 метров

      • Игнорирует мелких животных (регулировка чувствительности)

    • Фотофиксация:

      • Камера делает снимок в разрешении 640x480 (VGA)

      • Сохранение на SD-карту с временной меткой

      • Мгновенная отправка в Telegram

    • Сигнализация:

      • Громкая сирена (105 дБ)

      • Мигающая красная подсветка

      • Звуковой сигнал зуммера

    • Удаленное управление:

      • Команды Telegram: /status, /off

      • Push-уведомления при срабатывании

    • Журналирование:

      • Лог всех событий на SD-карту

      • Возможность просмотра истории



    Подключение компонентов:

    • ESP32-CAM:

      • U0R → TX Arduino

      • U0T → RX Arduino

      • 5V → 5V

      • GND → GND

    • PIR-датчик:

      • OUT → D2

      • VCC → 5V

      • GND → GND

    • Релейный модуль:

      • IN → D3

      • VCC → 5V

      • GND → GND

      • COM → Сирена +

      • NO → 12V+

    • Светодиоды:


        • → D4 через резистор 220 Ом


        • → GND



    Улучшения системы:

    • Добавьте Face Recognition:


      // Используйте библиотеку ESP-FACE для распознавания
      if (recognizeFace(fb)) {
        bot.sendMessage(CHAT_ID, "Опознан знакомый человек", "");
      }
    • Интеграция с охранной компанией:


      void callSecurity() {
        // Отправка API-запроса в охранный сервис
      }
    • Даталоггер на облаке:


      void sendToFirebase() {
        // Запись событий в Firebase Realtime Database
      }
    • Резервный аккумулятор:

      • Литий-ионный аккумулятор 18650

      • Схема автоматического переключения



    Настройка Telegram-бота:

    1. Создайте бота через @BotFather

    2. Получите chat ID через @getidsbot

    3. Вставьте данные в скетч:


      #define BOT_TOKEN "123456789:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
      #define CHAT_ID "123456789"

    Стоимость реализации: ~4000-6000руб
    Время сборки: 1.5-2 часа
    Зона покрытия: до 10 м²

    Идеально для: дома, офиса, гаража, дачи. Полноценная охранная система с возможностью удаленного мониторинга!

    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
    Подборки: Arduino

    Самодельная цанговая гайка из водопроводной муфты: пошаговый гид

    Как построить простой навес для машины или дров своими руками

    Добавить комментарий

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии