Tabla de contenido:
- Paso 1: Obtenga los productos
- Paso 2: conecte las piezas
- Paso 3: escriba el código
- Paso 4: Código y despedida
Video: Lector RFID AVR / Arduino con código UART en C: 4 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:45
La tecnología RFID está de moda y se encuentra en todas partes, desde los sistemas de inventario hasta los sistemas de identificación de credenciales. Si alguna vez ha estado en una tienda departamental y atravesó esas cosas que parecen detectores de metales en los puntos de entrada / salida, entonces ha visto RFID. Hay varios lugares para encontrar buena información sobre cómo configurar RFID, y este instructivo se enfoca en instalar el lector RFID Parallax (Serial TTL) en un AVR, con énfasis en el código C necesario para leer la entrada serial. El código está en C y no usa bibliotecas externas. De hecho, habla 2400 baudios directamente sin el uso de un UART sincronizándose con la velocidad en baudios del lector RFID y leyendo el pin digital al que está conectado. ¿Emocionado? Yo también.
Paso 1: Obtenga los productos
Necesitará la siguiente lista de piezas:
- Lector RFID (Parallax # 28140 $ 39.99)
- Etiqueta RFID (Parallax # 32397 $ 0.99)
- Clon de AVR o Arduino (si usa un AVR estándar, también necesitará un máximo de 322, 5 condensadores de 1 uF y un conector DE9)
- Placa de pruebas sin soldadura
Opcional
- Encabezado de 4 posiciones
- Cable
(y el max232, etc. para la comunicación de la información de la etiqueta) También puede conectar su pantalla LCD favorita en lugar de enviar datos de la etiqueta a través de RS232.
Paso 2: conecte las piezas
El lado del hardware es bastante fácil. En lugar de colocar mi lector RFID directamente en mi tablero, opté por hacer un cable rápido para poder mover el lector RFID un poco mejor. Para eso, simplemente corté 4 posiciones de una tira de cabezal de enchufe hembra que tenía tirada y soldé en tres cables. Cinta aislante completaba el conector del ghetto. El lector RFID tiene 4 conexiones:
- Vcc
- HABILITAR
- FUERA
- Gnd
Como probablemente lo adivinó, conecte Vcc a + 5V y Gnd a tierra. Debido a que el lector RFID consume tanta energía, puede golpear el pin ENABLE para apagarlo y encenderlo en varios intervalos. Simplemente elegí mantenerlo encendido. Debido a que está invertido, lo tira hacia BAJO para activarlo. Alternativamente, puede conectarlo a tierra. Lo conecté al PIND3 para darme opciones de habilitar / deshabilitar si así lo decidía. El pin OUT es donde el lector envía sus datos en serie después de leer una etiqueta. Lo conecté a PIND2. Nota, en el Universo Parallax, rojo significa ir. Es decir, un LED verde significa que la unidad está inactiva e inactiva, mientras que un LED rojo significa que la unidad está activa. * encogiéndose de hombros * Imagínese.
Paso 3: escriba el código
Para leer los datos del lector RFID, debe saber cuándo se ha enviado una etiqueta, extraer los datos del puerto serie y enviarlos a algún lugar.
Formato de datos del lector RFID
El lector RFID Parallax envía datos a un ritmo glacial fijo de 2400 baudios. Una etiqueta RFID tiene 10 bytes. Para permitir la detección / corrección de errores, dado que el lector podría activarse con ruido aleatorio, la RFID de 10 bytes está limitada por un centinela de inicio y parada. El centinela de inicio es el salto de línea (0x0A) y el centinela de parada es el retorno de carro (0x0D). Se parece a esto:
[Iniciar Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Detener centinela]Estos son los tres pasos principales.
Sepa cuándo se ha enviado una etiqueta
Usé una interrupción de cambio de pin en el AVR que notifica al firmware que se ha producido un cambio en un pin supervisado. Configurar el AVR para esto es fácil y requiere configurar la bandera, decirle a la MCU qué pin desea monitorear y configurar el bit de interrupción global. Configurar PCINT
BSET (PCICR, PCIE2); // registro de control de interrupción de cambio de pin pcie2 BSET (PCMSK2, PCINT18); // habilita la interrupción de cambio de pin para PCINT18 (PD2) BSET (SREG, 7); // Establecer SREG I-bitEscriba su rutina de servicio de interrupción Desea que su ISR sea corto, así que en mi vector de interrupción leo el byte completo, bit a bit, y almaceno el byte en una matriz global de caracteres volátiles. Hago lo siguiente en cada interrupción:
- Verifica para asegurarte de que estoy en un comienzo
- Centre la sincronización en el pulso medio a 2400 baudios (la velocidad del lector RFID)
- Omita el bit de inicio y haga una pausa en el medio del siguiente bit
- Leer cada bit en un entero sin signo
- Cuando tenga 8 bits, coloque el byte en una matriz de caracteres
- Cuando haya recopilado 12 bytes, informe a la MCU que se ha leído la etiqueta para la detección de errores.
Modifiqué el código SoftSerial de Mikal Hart, quien modificó el código de David Mellis para los retrasos determinados experimentalmente en las rutinas seriales.
Analizar salida RS232
La rutina PCINT contiene el código para leer la salida RS232 del lector RFID. Cuando obtengo 12 bytes (RFID de 10 bytes más centinelas) configuro bDataReady en 1 y dejo que el bucle principal procese los datos y los muestre.
// este es el manejador de interrupcionesISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // El bit de inicio pasa a nivel bajo return; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Centro en el bit de inicio para (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // salta un poco, hermano… if (BCHK (PIND, RFID_IN)) BSET (bit, x); si no BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // omitir el bit de parada RFID_tag [rxIdx] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}
Muestre su etiqueta
En el main (), durante el ciclo for (ever), verifico si se ha establecido bDataReady, lo que indica que se ha enviado toda la estructura RFID. Luego verifico si es una etiqueta válida (es decir, los caracteres de inicio y parada son 0x0A y 0x0D, respectivamente), y si es así, la envío por mi conexión RS232.
for (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Byte de inicio:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nByte de parada:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16)); # endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); para (uint8_t x = 1; x <11; x ++) {USART_tx_S (itoa (RFID_tag [x], ibuff, 16)); if (x! = 10) USART_tx (& apos: & apos); } USART_tx_S ("\ n"); } rxIdx = 0; bDataReady = 0; }}
Paso 4: Código y despedida
Esta página contiene un archivo zip con el código correspondiente. Fue escrito en AVR Studio 4.16. Si usa el bloc de notas del programador, eclipse o vi (o algo más), deberá copiar un archivo Makefile confiable en el directorio y agregar estos archivos a la línea de origen. También tenga en cuenta que el tiempo para la sección de lectura en serie se basa en un MCU de 16 MHz. Si está ejecutando a una frecuencia de reloj diferente, deberá determinar experimentalmente los retardos sintonizados para centrarse en los pulsos de velocidad en baudios. Espero que este instructivo le haya ayudado de alguna manera. Si tiene alguna sugerencia sobre cómo podría mejorarse, ¡no dude en hacérmelo saber!
Recomendado:
Cerradura de puerta eléctrica con escáner de huellas dactilares y lector RFID: 11 pasos (con imágenes)
Cerradura de Puerta Eléctrica con Escáner de Huellas y Lector RFID: El proyecto fue diseñado para evitar la necesidad de usar llaves, para alcanzar nuestro objetivo usamos un sensor óptico de huellas y un Arduino. Sin embargo, hay personas que tienen una huella dactilar ilegible y el sensor no la reconoce. Entonces pensando en
Lector RFID Arduino con pantalla TFT: 7 pasos
Lector RFID Arduino con pantalla TFT: En este instructivo le mostraré cómo diseñar un lector RFID de aspecto agradable con pantalla TFT y para montaje en pared. Es muy fácil crear un lector RFID de aspecto agradable con salida TFT para montaje en pared con un Arduino. MKR de su elección y nuestro Ar
Demostración 4x4 de un tablero de ajedrez electrónico / Con Arduino Mega + Lector RFID + Sensores de efecto Hall: 7 pasos
Demostración 4x4 de un tablero de ajedrez electrónico / Con Arduino Mega + Lector RFID + Sensores de efecto Hall: Hola, soy Tahir Miriyev, graduado en 2018 de la Universidad Técnica de Oriente Medio, Ankara / Turquía. Me especialicé en Matemáticas Aplicadas, pero siempre me encantó hacer cosas, especialmente cuando implicaba algún trabajo manual con la electrónica, el diseño y la programación
Utilice el lector RFID MFRC522 con Arduino: 5 pasos
Utilice el lector RFID MFRC522 con Arduino: ¡Hola! ¡Te voy a enseñar cómo hacer un lector de llavero o tarjeta llave fácil de hacer! Si tiene un módulo RFID MFRC522, leds, resistencias, cables, un arduino uno, una placa de pruebas y una batería de 9v (opcional), entonces está listo para hacer un fresco
Lector de código de barras parlante Raspberry Pi: 12 pasos
Lector de código de barras parlante Raspberry Pi: Escáner de código de barras de la figura 1 de DX.com Vista general Actualización: hay un breve vídeo de demostración disponible en https://youtu.be/b905MLfGTcM Mi mamá ya no puede leer las etiquetas de los productos comestibles, así que busqué soluciones. Después de ver los lectores de códigos de barras para ciegos