🔐 Задание 11: Система идентификации колонистов
NFC-технология для контроля доступа на марсианской базе
Марсианское утро начинается с восхода далёкого Солнца над красными дюнами. Вы и доктор Мариус проснулись от слабого солнечного света, пробивающегося через защитные купола базы МАРС-1. Вдруг снаружи герметичного шлюза раздаётся сигнал — это робот-помощник РобоМакс в своём защитном корпусе!
🤖 РобоМакс (через динамик): «Доброе марсианское утро! Системы показывают отличную погоду — нет песчаных бурь! Хотите провести геологическую разведку в каньоне Маринер? Там потрясающие виды!»
Вы и доктор Мариус с радостью соглашаетесь на исследовательскую миссию. Готовясь к выходу, вы задумываетесь о безопасности базы…
💬 Вы: «Доктор Мариус, можем ли мы создать систему идентификации для базы? Чтобы только авторизованные колонисты могли входить?»
💬 Доктор Мариус: «Отличная идея! Мы создадим систему с персональными идентификаторами для каждого члена экипажа. Используем модуль PN532 — самый надёжный NFC-считыватель для марсианских условий!»
📚 База знаний: NFC модуль PN532
🔐 NFC модуль PN532
PN532 — профессиональный NFC/RFID считыватель с поддержкой I2C интерфейса. Работает с картами MIFARE на частоте 13.56 МГц.
📡 Преимущества PN532:
- Дальность считывания до 5-7 см
- Поддержка I2C, SPI и UART интерфейсов
- Работает с картами и брелоками MIFARE
- Низкое энергопотребление
- Встроенная антенна
⚡ Принцип работы: Модуль создаёт электромагнитное поле → Карта получает питание от поля → Передаёт свой уникальный UID → ESP32 проверяет доступ
👨💻 Программа системы идентификации
💬 Доктор Мариус: «Сначала загрузим базовую программу, чтобы узнать UID твоих карт!»
// Система идентификации МАРС-1
#include
#include
// Настройка пинов подключения
#define SDA_PIN 21
#define SCL_PIN 22
Adafruit_PN532 nfc(SDA_PIN, SCL_PIN);
// База данных карт доступа
// ЗАМЕНИТЬ НА СВОИ ДАННЫЕ
String commander_uid = "c3fd53fa"; // UID карты командира
String engineer_uid = "d778982c"; // UID карты инженера
String nfc_str = ""; // Текущая считанная карта
void setup() {
// Запуск связи с компьютером
Serial.begin(115200);
Serial.println("Инициализация PN532...");
// Запуск NFC модуля
nfc.begin();
// Проверка работы модуля
uint32_t version = nfc.getFirmwareVersion();
if (!version) {
Serial.println("NFC модуль не найден");
while (1); // Останавливаем программу
}
// Настройка модуля
nfc.SAMConfig();
pinMode(23, OUTPUT); // Зуммер
delay(500);
Serial.println("Система доступа МАРС-1 запущена");
}
void loop() {
uint8_t uid[7]; // Место для номера карты
uint8_t uidLength; // Длина номера
// Проверка новой карты
if (!nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength)) {
delay(50);
return; // Нет карты - ждём
}
// Чтение UID
nfc_str = "";
for (uint8_t i = 0; i < uidLength; i++) {
if (uid[i] < 16) nfc_str += "0"; // Добавляем 0 для однозначных чисел
nfc_str += String(uid[i], HEX);
}
// Вывод информации
Serial.print("Запрос доступа - UID: ");
Serial.println(nfc_str);
// Проверка доступа и звуковой сигнал
if (nfc_str == commander_uid) {
// Доступ командира
Serial.println("КОМАНДИР - Доступ разрешен!");
// Звук успеха - два коротких высоких сигнала
tone(23, 2000); // Высокий тон
delay(100);
noTone(23);
delay(50);
tone(23, 2000);
delay(100);
noTone(23);
} else if (nfc_str == engineer_uid) {
// Доступ инженера
Serial.println("ИНЖЕНЕР - Доступ разрешен!");
// Звук успеха - два коротких высоких сигнала
tone(23, 2000); // Высокий тон
delay(100);
noTone(23);
delay(50);
tone(23, 2000);
delay(100);
noTone(23);
} else {
// Доступ запрещен
Serial.println("НЕИЗВЕСТНЫЙ - Требуется проверка!");
// Звук ошибки - один длинный низкий сигнал
tone(23, 500); // Низкий тон
delay(1000);
noTone(23);
}
delay(500); // Пауза перед следующим считыванием
}
🎯 ВАЖНО: Настройка своих карт доступа
💬 Доктор Мариус: «Внимание! Сейчас мы настроим систему под твои карты. Это займёт две загрузки программы!»
📍 ШАГ 1: Узнаём UID своих карт
- Загрузи программу как есть (не меняя ничего в коде)
- Открой монитор порта (скорость 115200)
- Поднеси первую карту к считывателю
- Запиши появившийся UID (например:
a3fd27ba) - Поднеси вторую карту и запиши её UID
Пример того, что увидишь:
Запиши этот UID! Это номер твоей карты!
📝 ШАГ 2: Добавляем свои карты в программу
Найди в начале программы эти строки:
Замени их на свои UID:
✅ Важно: UID нужно писать в кавычках и маленькими буквами!
🚀 ШАГ 3: Загружаем обновлённую программу
- Сохрани изменения (Ctrl+S)
- Загрузи программу снова на ESP32
- Открой монитор порта
- Проверь карты — теперь они должны распознаваться!
Теперь при поднесении твоих карт увидишь:
💬 Вы: «Отлично! Теперь система знает мои карты!»
🧪 Тестирование системы
🎵 Звуковые сигналы системы:
✅ Доступ разрешён: БИП-БИП (2000 Гц) Два коротких высоких сигнала
❌ Доступ запрещён: БУУУУП (500 Гц) Один длинный низкий сигнал
💡 Советы по отладке:
- Если модуль не находится — проверь подключение I2C (SDA→21, SCL→22)
- Если карта не читается — поднеси ближе (2-3 см)
- Если UID разный каждый раз — карта повреждена, используй другую
- Держи карту неподвижно 1-2 секунды
✨ Система контроля доступа активна!
🛡️ Твоя персональная система готова!
📇 Карта командира
Полный доступ ко всем системам базы
🔧 Карта инженера
Доступ к техническим помещениям
💡 Можешь добавить больше карт! Просто создай новые переменные: scientist_uid, medic_uid и добавь проверки в коде!
💬 Доктор Мариус: «Превосходно! Теперь база МАРС-1 защищена персонализированной системой доступа. Только ты и твоя команда сможете войти!»
💬 Вы: «И система различает разные уровни доступа — командир имеет полный контроль, а инженер — доступ к техническим системам!»
Установив систему контроля доступа с вашими персональными картами, вы, доктор Мариус и РобоМакс отправляетесь исследовать марсианские каньоны, зная, что база надёжно защищена!
🏆 Достижение разблокировано: «Страж врат» — установлена персонализированная NFC-система!
