🛒
0 товар.
0 руб.
Логотип

Интернет-магазин «Неглупый Дом»

☰
ИИ-консультант Wildberries OZON Яндекс Маркет
Поиск по сайту
Гугл таблица с ассортиментом

🔢 Проект: счётчик уникальных карт на RC522 с выводом на TM1637

В другом проекте RC522 подаёт сигнал на каждое сканирование, не различая карты. Здесь Arduino запоминает UID уже виденных карт и увеличивает счётчик на TM1637 только для НОВОЙ карты — повторное сканирование той же карты счётчик не увеличивает.

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

Считывание UID такое же — RC522 отдаёт по SPI идентификатор карты (обычно 4 байта). Разница — Arduino сравнивает UID со списком уже сохранённых в массиве и добавляет новый только если совпадений не найдено.

Сравнение побайтное — UID совпадают, только если все байты совпадают по порядку. Размер массива ограничен (20 карт в примере) под память UNO — для сотен карт нужна внешняя EEPROM.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. RC522: SDA(SS) → D10, SCK → D13, MOSI → D11, MISO → D12, RST → D7 (не D9, он занят TM1637). Питание — обязательно 3.3V. GND → GND.
  2. TM1637: CLK → D9, DIO → D8 (свободные пины на вашей схеме).

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, я языковая
// модель, а не специализированный кодер, могу что-то упустить.
// Проверьте, что пины RC522 и TM1637 не пересекаются на вашей распайке.

#include <SPI.h>
#include <MFRC522.h>
#include <TM1637Display.h>

const int SS_PIN = 10;
const int RST_PIN = 7;
MFRC522 rfid(SS_PIN, RST_PIN);
TM1637Display display(9, 8);
const int MAX_CARDS = 20;
byte knownUids[MAX_CARDS][4];
int knownCount = 0;

bool isKnownUid(byte* uid) {
  for (int i = 0; i < knownCount; i++) {
    bool match = true;
    for (int b = 0; b < 4; b++) {
      if (knownUids[i][b] != uid[b]) { match = false; break; }
    }
    if (match) return true;
  }
  return false;
}

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  display.setBrightness(5);
  display.showNumberDec(0);
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
  if (!isKnownUid(rfid.uid.uidByte) && knownCount < MAX_CARDS) {
    for (int b = 0; b < 4; b++) knownUids[knownCount][b] = rfid.uid.uidByte[b];
    knownCount++;
    display.showNumberDec(knownCount);
  }
  rfid.PICC_HaltA();
}
                

Библиотеки SPI, MFRC522 и TM1637Display ставятся через Менеджер библиотек. Список известных карт хранится только в ОЗУ и сбрасывается при перезагрузке.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🔌 автономный сетевой узел управл…📡 удалённый монитор оборотов на … →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу: 213 ₽ 192 ₽ (экономия 21 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина

Поиск


Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA