Содержимое курса
Заключение
Заключение
0/1
УМНЫЙ ДОМ на Марсе \ МАРС-1

🔐 Задание 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 своих карт

  1. Загрузи программу как есть (не меняя ничего в коде)
  2. Открой монитор порта (скорость 115200)
  3. Поднеси первую карту к считывателю
  4. Запиши появившийся UID (например: a3fd27ba)
  5. Поднеси вторую карту и запиши её UID

Пример того, что увидишь:

Запрос доступа — UID: a3fd27ba НЕИЗВЕСТНЫЙ — Требуется проверка!

Запиши этот UID! Это номер твоей карты!

📝 ШАГ 2: Добавляем свои карты в программу

Найди в начале программы эти строки:

// База данных карт доступа // ЗАМЕНИТЬ НА СВОИ ДАННЫЕ String commander_uid = «c3fd53fa»; // UID карты командира String engineer_uid = «d778982c»; // UID карты инженера

Замени их на свои UID:

// База данных карт доступа // МОИ КАРТЫ String commander_uid = «ТВОЙ UID 1»; // Моя первая карта String engineer_uid = «ТВОЙ UID 2»; // Моя вторая карта

Важно: UID нужно писать в кавычках и маленькими буквами!

🚀 ШАГ 3: Загружаем обновлённую программу

  1. Сохрани изменения (Ctrl+S)
  2. Загрузи программу снова на ESP32
  3. Открой монитор порта
  4. Проверь карты — теперь они должны распознаваться!

Теперь при поднесении твоих карт увидишь:

Запрос доступа — UID: a3fd27ba КОМАНДИР — Доступ разрешен! 🔊 БИП-БИП! (два коротких сигнала)

💬 Вы: «Отлично! Теперь система знает мои карты!»

🧪 Тестирование системы

🎵 Звуковые сигналы системы:

✅ Доступ разрешён: БИП-БИП (2000 Гц) Два коротких высоких сигнала

❌ Доступ запрещён: БУУУУП (500 Гц) Один длинный низкий сигнал

💡 Советы по отладке:

  • Если модуль не находится — проверь подключение I2C (SDA→21, SCL→22)
  • Если карта не читается — поднеси ближе (2-3 см)
  • Если UID разный каждый раз — карта повреждена, используй другую
  • Держи карту неподвижно 1-2 секунды

✨ Система контроля доступа активна!

🛡️ Твоя персональная система готова!

📇 Карта командира

Полный доступ ко всем системам базы

🔧 Карта инженера

Доступ к техническим помещениям

💡 Можешь добавить больше карт! Просто создай новые переменные: scientist_uid, medic_uid и добавь проверки в коде!

💬 Доктор Мариус: «Превосходно! Теперь база МАРС-1 защищена персонализированной системой доступа. Только ты и твоя команда сможете войти!»

💬 Вы: «И система различает разные уровни доступа — командир имеет полный контроль, а инженер — доступ к техническим системам!»

Установив систему контроля доступа с вашими персональными картами, вы, доктор Мариус и РобоМакс отправляетесь исследовать марсианские каньоны, зная, что база надёжно защищена!

🏆 Достижение разблокировано: «Страж врат» — установлена персонализированная NFC-система!

🚀 База под твоей защитой!

Файлы упражнений
11_PN532_NFC_buzzer.zip
Размер: 1,47 КБ