Этот скетч реализует систему контроля доступа, которая:
Считывает RFID-метки (карты/брелоки)
Сверяет с базой разрешенных меток
Управляет электромагнитным замком
Отправляет уведомления в Telegram
Ведет журнал доступа на 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
Улучшения системы:
Добавьте RTC модуль для точного времени:
#include "RTClib.h" RTC_DS3231 rtc; // В setup(): if (!rtc.begin()) { Serial.println("RTC error"); }Режим офлайн-работы при потере WiFi:
if (WiFi.status() != WL_CONNECTED) { storeOfflineEvent(tagID, granted); }Админ-режим для добавления новых меток:
if (tagID == "MASTER_TAG") { enterLearningMode(); }Энергосбережение:
#include <LowPower.h> // В loop(): if (noActivity) { LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); }
Настройка Telegram-бота:
Создайте бота через @BotFather
Получите chat ID через @getidsbot
Вставьте данные в скетч:
const char* botToken = "bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"; const char* chatID = "123456789";
Эта система идеальна для:
Контроля доступа в помещения
Умных шкафчиков
Систем учета рабочего времени
Защищенных хранилищ
Стоимость реализации: ~2500-3000руб. Время сборки: 1-2 часа.

