Интернет-магазин «Неглупый Дом»
RC522 считывает карту при каждом проходе, счётчик хранится во внешней памяти AT24C256 — значение не теряется при отключении питания.
RC522 — модуль 13.56 МГц (Mifare), работает по SPI через библиотеку MFRC522, в отличие от дешёвых 125 кГц UART-ридеров типа RDM6300. Важно: RC522 рассчитан строго на 3.3V — подача 5V на VCC может повредить модуль.
Здесь RC522 используется не для идентификации конкретного человека, а как триггер события "кто-то приложил карту" — счётчик растёт независимо от того, какая карта приложена. Это журнал числа проходов, а не контроль доступа по UID.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, что указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define SS_PIN 10
#define RST_PIN 9
#define EEPROM_ADDR 0x50
MFRC522 rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
lcd.init();
lcd.backlight();
}
int readCounter() {
Wire.beginTransmission(EEPROM_ADDR);
Wire.write(0); Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(EEPROM_ADDR, 2);
int value = Wire.read() << 8 | Wire.read();
return value;
}
void writeCounter(int value) {
Wire.beginTransmission(EEPROM_ADDR);
Wire.write(0); Wire.write(0);
Wire.write(value >> 8);
Wire.write(value & 0xFF);
Wire.endTransmission();
delay(5);
}
void loop() {
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
int total = readCounter() + 1;
writeCounter(total);
Serial.print("Всего проходов: ");
Serial.println(total);
lcd.setCursor(0, 0);
lcd.print("Total scans: ");
lcd.print(total);
rfid.PICC_HaltA();
delay(1000);
}
}
Счётчик хранится по адресу `0x0000` внутри чипа (не путать с I2C-адресом чипа `0x50`) — перед первым запуском стоит обнулить память вызовом `writeCounter(0)`.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу: 240 ₽ 216 ₽ (экономия 24 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.