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

    Умная система контроля доступа с RFID и Telegram-оповещениями

    Этот скетч реализует систему контроля доступа, которая:

    1. Считывает RFID-метки (карты/брелоки)

    2. Сверяет с базой разрешенных меток

    3. Управляет электромагнитным замком

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

    5. Ведет журнал доступа на SD-карте


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

    • Arduino Uno/Nano

    • RFID-модуль RC522

    • Электромагнитный замок (12V)

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

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

    • ESP8266 (для WiFi)

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

    • Диод 1N4007 (для защиты от ЭДС)

    • Светодиоды (красный/зеленый)

    • Зуммер (опционально)



    Полный скетч


    #include <SPI.h>
    #include <MFRC522.h>
    #include <ESP8266WiFi.h>
    #include <WiFiClientSecure.h>
    #include <SD.h>
    #include <TimeLib.h>
    
    #define RST_PIN 9
    #define SS_PIN 10
    #define RELAY_PIN 7
    #define GREEN_LED 3
    #define RED_LED 4
    #define BUZZER 5
    
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    
    // Настройки WiFi
    const char* ssid = "your_SSID";
    const char* password = "your_PASSWORD";
    
    // Настройки Telegram
    const char* botToken = "botXXXXXX:your_token";
    const char* chatID = "your_chat_id";
    
    // База разрешенных меток
    String allowedTags[] = {
      "A1B2C3D4",
      "E5F6G7H8"
    };
    
    void setup() {
      Serial.begin(9600);
      SPI.begin();
      
      pinMode(RELAY_PIN, OUTPUT);
      digitalWrite(RELAY_PIN, LOW);
      
      pinMode(GREEN_LED, OUTPUT);
      pinMode(RED_LED, OUTPUT);
      pinMode(BUZZER, OUTPUT);
      
      mfrc522.PCD_Init();
      
      // Инициализация SD-карты
      if (!SD.begin(8)) {
        Serial.println("SD Card error");
        digitalWrite(RED_LED, HIGH);
      }
      
      // Подключение к WiFi
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("WiFi connected");
    }
    
    void loop() {
      // Проверка новой метки
      if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) {
        delay(50);
        return;
      }
    
      String tagID = "";
      for (byte i = 0; i < mfrc522.uid.size; i++) {
        tagID += String(mfrc522.uid.uidByte[i], HEX);
      }
      tagID.toUpperCase();
      
      bool accessGranted = false;
      for (String allowedTag : allowedTags) {
        if (tagID == allowedTag) {
          accessGranted = true;
          break;
        }
      }
    
      // Управление доступом
      if (accessGranted) {
        grantAccess(tagID);
      } else {
        denyAccess(tagID);
      }
    
      // Журналирование
      logAccess(tagID, accessGranted);
      
      mfrc522.PICC_HaltA();
      delay(1000);
    }
    
    void grantAccess(String tag) {
      digitalWrite(GREEN_LED, HIGH);
      digitalWrite(RELAY_PIN, HIGH);
      tone(BUZZER, 1000, 200);
      
      Serial.println("Access GRANTED for tag: " + tag);
      sendTelegramAlert("✅ Доступ разрешен: " + tag);
      
      delay(3000); // Удержание замка 3 сек
      digitalWrite(RELAY_PIN, LOW);
      digitalWrite(GREEN_LED, LOW);
    }
    
    void denyAccess(String tag) {
      digitalWrite(RED_LED, HIGH);
      tone(BUZZER, 300, 1000);
      
      Serial.println("Access DENIED for tag: " + tag);
      sendTelegramAlert("⛔ Доступ запрещен: " + tag);
      
      delay(2000);
      digitalWrite(RED_LED, LOW);
    }
    
    void logAccess(String tag, bool granted) {
      File logFile = SD.open("access.log", FILE_WRITE);
      if (logFile) {
        String logEntry = String(now()) + "," + tag + "," + (granted ? "GRANTED" : "DENIED");
        logFile.println(logEntry);
        logFile.close();
      }
    }
    
    void sendTelegramAlert(String message) {
      WiFiClientSecure client;
      if (!client.connect("api.telegram.org", 443)) {
        Serial.println("Telegram connection failed");
        return;
      }
    
      String url = "/bot" + String(botToken) + "/sendMessage?chat_id=" + String(chatID) + "&text=" + message;
      
      client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                   "Host: api.telegram.org\r\n" +
                   "Connection: close\r\n\r\n");
    }


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

    • RFID-считывание:

      • Модуль RC522 обнаруживает метки

      • Уникальный ID преобразуется в строку

    • Проверка доступа:

      • Сравнение с базой разрешенных меток

      • Разрешение/запрет доступа

    • Управление замком:

      • Реле активирует электромагнит на 3 секунды

      • Светодиодная и звуковая индикация

    • Telegram-уведомления:

      • ESP8266 отправляет сообщения через бота

      • Формат: ✅/⛔ + ID метки

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

      • Каждое событие записывается на SD-карту

      • Формат: timestamp, ID метки, статус



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

    • RC522:

      • SDA → D10

      • SCK → D13

      • MOSI → D11

      • MISO → D12

      • IRQ → Не подключен

      • GND → GND

      • 3.3V → 3.3V

    • Реле:

      • IN → D7

      • VCC → 5V

      • GND → GND

      • COM → Замок 12V+

      • NO → 12V+

    • SD-модуль:

      • CS → D8

      • MOSI → D11

      • MISO → D12

      • SCK → D13

      • VCC → 5V

    • ESP8266:

      • TX → D2 (Arduino RX)

      • RX → D3 (Arduino TX)

      • CH_PD → 3.3V

      • VCC → 3.3V



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

    1. Добавьте RTC модуль для точного времени:


      #include "RTClib.h"
      RTC_DS3231 rtc;
      // В setup():
      if (!rtc.begin()) {
        Serial.println("RTC error");
      }
    2. Режим офлайн-работы при потере WiFi:


      if (WiFi.status() != WL_CONNECTED) {
        storeOfflineEvent(tagID, granted);
      }
    3. Админ-режим для добавления новых меток:


      if (tagID == "MASTER_TAG") {
        enterLearningMode();
      }
    4. Энергосбережение:


      #include <LowPower.h>
      // В loop():
      if (noActivity) {
        LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
      }


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

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

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

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


      const char* botToken = "bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11";
      const char* chatID = "123456789";

    Эта система идеальна для:

    • Контроля доступа в помещения

    • Умных шкафчиков

    • Систем учета рабочего времени

    • Защищенных хранилищ


    Стоимость реализации: ~2500-3000руб. Время сборки: 1-2 часа.

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

    Гаражный холодильник из пенопласта: сохраняем напитки летом

    0
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    0
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    0
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 0.0 из 10 (голосов: 0 / История оценок)

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

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


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

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

    Войти

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

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

    Онлайн чат

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

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