Arduino Enhancement 19 — Uso del módulo RFID

Identificación por radiofrecuencia La tecnología "Identificación por radiofrecuencia, RFID", también conocida como identificación por radiofrecuencia, es una tecnología de comunicación que puede identificar objetivos específicos y leer y escribir datos relacionados a través de señales de radio sin la necesidad de establecer un mecanismo o sistema entre el sistema de identificación y el objetivo específico. Contacto óptico, ampliamente utilizado en tarjetas corporativas / de campus, tarjetas de valor almacenado para autopistas, peajes de autopistas, estacionamientos, gestión comunitaria, etc. Este artículo presenta el uso del módulo FRID-RC522.

1. módulo RFID

La tecnología RFID utiliza radiofrecuencia inalámbrica para llevar a cabo una transmisión de datos bidireccional sin contacto entre el lector y la tarjeta de radiofrecuencia para lograr el propósito de identificación de objetivos e intercambio de datos.

  • Una etiqueta (una tarjeta de radiofrecuencia) está compuesta por un elemento de acoplamiento y un chip. La etiqueta contiene una antena incorporada para la comunicación con la antena de radiofrecuencia.
  • Lector: un dispositivo que lee (y también puede escribir en la tarjeta del lector) información de etiquetas.
  • Antena: transmite señales de radiofrecuencia entre etiquetas y lectores.

El módulo RFID-RC522 utilizado en este experimento utiliza el chip MFRC522, método de comunicación SPI, es compatible con Mifarel S50, S70, Pro, Desfire y otros tipos de tarjetas. La tarjeta blanca y el llavero adjuntos son tarjetas S50, y cada tarjeta tiene su propio logotipo ( UID).

Módulo RFID

2. Instale la biblioteca de controladores

Arduino tiene una biblioteca de controladores RC522, haga clic en "Proyecto" - "Cargar biblioteca" - "Administrar biblioteca", busque y seleccione la última versión de "MFC522" para instalar.

Instala la biblioteca

3. Materiales experimentales.

  • Placa de desarrollo Uno R3
  • Cable de datos USB compatible
  • Tablero de pruebas y cable de soporte
  • Módulo RFID-RC522 y tarjeta blanca S50 compatible y tarjeta de forma especial

4. Pasos experimentales.

1. Construya el diagrama del circuito de acuerdo con el diagrama esquemático.

Los 3.3V y GND del módulo RC522 corresponden respectivamente a los 3.3V y GND de la placa de desarrollo El MOSI, MISO y SCK del módulo están conectados respectivamente a las interfaces SPI 11, 12, 13 de la placa de desarrollo, y el SDA y RST del módulo están conectados a los pines digitales de la placa de desarrollo 10, 9.

El diagrama esquemático experimental se muestra a continuación:

Esquema experimental

El diagrama de conexión física se muestra a continuación:

Diagrama de conexión física

2. Cree un nuevo boceto, copie el siguiente código para reemplazar el código generado automáticamente y guárdelo.

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

#define SS_PIN 10
#define RST_PIN 9

MFRC522 rfid(SS_PIN, RST_PIN);

byte nuidPICC[4]; //存储读取的UID

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  Serial.println("RC522初始化完成...");
}

void loop() {
  //搜索新卡
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // 验证NUID是否可读
  if ( ! rfid.PICC_ReadCardSerial())
    return;

  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);

  // 检查是否MIFARE卡类型
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
      piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
      piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println("不支持读取此卡类型");
    return;
  }

  // 保存读取到的UID
  for (byte i = 0; i < 4; i++) {
    nuidPICC[i] = rfid.uid.uidByte[i];
  }
    
  Serial.print("十六进制UID:");
  printHex(rfid.uid.uidByte, rfid.uid.size);
  Serial.println();

  Serial.print("十进制UID:");
  printDec(rfid.uid.uidByte, rfid.uid.size);
  Serial.println();

  // 使放置在读卡区的IC卡进入休眠状态,不再重复读卡
  rfid.PICC_HaltA();

  // 停止读卡模块编码
  rfid.PCD_StopCrypto1();
}

// 十六进制输出
void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

//十进制输出
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : "");
    Serial.print(buffer[i], DEC);
  }
}

3. Conecte la placa de desarrollo, configure el número de puerto correspondiente y el tipo de placa de desarrollo y descargue el programa.

Descarga del programa

5. Fenómenos experimentales.

Abra el monitor en serie y configure la velocidad en baudios a 9600, que es consistente con el programa. Mueva la tarjeta cerca del área de detección de la antena del módulo para leer la identificación de la tarjeta.

Fenómeno experimental


Preste atención al número público "TonyCode" y responda "1024" para obtener materiales de aprendizaje 1000G.
Blog personal
Inserte la descripción de la imagen aquí

Publicado 73 artículos originales · elogiados 275 · 270,000 vistas +

Supongo que te gusta

Origin blog.csdn.net/TonyIOT/article/details/105386024
Recomendado
Clasificación