La identificación por radiofrecuencia, o RFID, es una tecnología emocionante que ha ganado popularidad en los últimos años. Crea la capacidad de etiquetar algo con un chip pasivo muy pequeño que luego permite la lectura remota de la información en ese chip. Las etiquetas RFID se usan comúnmente para tarjetas de seguridad de acceso directo, identificación de mascotas perdidas y, más recientemente, comunicación de campo cercano en teléfonos inteligentes.
En este tutorial, explicaré algunos conceptos básicos sobre cómo funciona la RFID, describiré algunos tipos diferentes de RFID y mostraré cómo se puede construir un abridor de puerta de garaje RFID..
RFID es una tecnología realmente genial que utiliza la energía de la señal del lector RFID para alimentar la etiqueta o el transpondedor. Esto luego devuelve una señal que contiene el contenido del chip de memoria de la etiqueta..
Hay una serie de tipos de RFID. Algunas etiquetas pueden tener una pequeña cantidad de datos escritos que se pueden leer más adelante. Otros son tan sofisticados que requieren que el lector señale una clave de cifrado antes de que la etiqueta pueda decodificar y devolver su contenido. Sin embargo, la mayoría de las etiquetas simplemente contienen números de identificación únicos permanentes. Más información sobre RFID está disponible en Wikipedia..
Los formatos de chip RFID y las frecuencias varían considerablemente. Hay toda una sopa de letras de alfabeto. Muchos teléfonos inteligentes leen formatos NFC y MIFARE.
Para este proyecto, sin embargo, voy a utilizar el tipo de chip EM4100 125K Wiegand. Este tipo de RFID utiliza lectores y etiquetas de bajo costo, que es la razón principal de este chip en mi kit. Sin embargo, siempre que tenga lectores y etiquetas compatibles, el tipo de RFID no importará para este proyecto.
En este proyecto usaré una etiqueta RFID y un Arduino para abrir una puerta de garaje cuando se detecte una etiqueta autorizada. El uso de un componente RFID de bajo nivel es una tarea bastante complicada, por lo que estamos usando una tabla de ruptura que realiza la lectura de bajo nivel y transmite el código de la etiqueta a través de pines en serie. Así es como funcionan la mayoría de las tablas de RFID. Este tutorial usa un tablero de este tipo..
Para este tutorial, realizaré el diseño del abridor de la puerta del garaje y crearé una prueba funcional del concepto..
El proceso es muy simple.
Primero, la placa lectora RFID lee la etiqueta y transmite el código al Arduino. El Arduino luego lee el código de la conexión en serie y lo compara con una lista de códigos RFID autorizados. Si la etiqueta está en la lista autorizada, Arduino colocará un pin alto para proporcionar 5 V para cerrar un relé. Cuando el relé se cierra, conecta los terminales de los contactos de señal de la puerta del garaje. La puerta del garaje se abre..
Utilizando la hoja de datos o las instrucciones del lector RFID, conecte los pines de alimentación, tierra, serie y antena. A continuación se muestra el diagrama de pin out del lector que tengo. Estamos utilizando los pines Arduino 2 y 3 para la comunicación en serie con la placa RFID, por lo que podemos dejar los pines 0 y 1 para la salida de la consola.
Siga estos pasos para conectar el tablero lector de RFID.
La configuración de mi placa se muestra a continuación.
Agrega el relevo al tablero. Los dos pines internos ejecutan el elecromagnet que cerrará el relé. Puede ver en el diagrama a continuación cómo la corriente de corriente a través de los pines 3 a 7 afectará el relé.
Este es mi tablero con el relé cableado..
Breadboard con RFID y configuración de relé.preparar()
función. En este ejemplo: 38400
. Debería ver algo como esto:
RFID GDO V0.1
Lectura de la etiqueta: 3D00CFBB80
Suma de comprobación: C9 - aprobada.
3D00CFBB80
Mala etiqueta Vete.
Copia y pega tu ID (3D00CFBB80
en este ejemplo) en el código en la lista de buenas etiquetas. Tenga en cuenta que un código diferente puede estar en una nueva línea siempre que esté rodeado de comillas y tenga una coma detrás. Una sola lista de códigos puede parecer algo como esto:
char * goodTags [] =
"3D00CFBB80",
;
Haga clic en Cargar en el IDE de Arduino y luego abra el Monitor de serie del IDE de Arduino presionando CTRL SHIFT M o seleccionando el menú Herramientas> Monitor de serie.
Ahora cuando ejecute el código verá algo como esto:
RFID GDO V0.1
Lectura de la etiqueta: 3D00CFBB80
Suma de comprobación: C9 - aprobada.
3D00CFBB80
Puerta de apertura!
Abajo hay una foto de mí probando la etiqueta RFID con el relé. El multímetro está conectado a los pines 1 y 9 del relé, por lo que debe detectar continuidad cuando se cierra el relé.
Con un multímetro conectado, puede escuchar el pitido del multímetro para indicar la continuidad y luego un tink muy débil y el relé se vuelve a abrir..
La mayoría de los abridores de puertas de garaje funcionan de manera muy simple abriéndolos cuando tienen un contacto cerrado. Cuando presionas el botón en la pared estás cerrando el contacto. En el abridor de la puerta de mi garaje, tengo terminales donde se conectan los cables del botón. Puedes ver los terminales resaltados aquí:
Ahora tiene la prueba de concepto básica para abrir la puerta con un movimiento de la mano..
/ * Código de muestra de abrepuertas de garaje RFID por Ben Miller. Función @VMfoo ReadKey inspirada y tomada en parte del patio de juego de arduino. use sus funciones: #include // dejando los puertos seriales del hardware para la depuración #define rxPin 2 // pin para recibir datos del lector RFID #define txPin 3 // pin de transmisión para inicialización suave #define doorPin 4 // pin para activar el relé / / configurar un nuevo puerto serie NewSoftSerial RFIDPort = NewSoftSerial (rxPin, txPin); byte pinState = 0; // para los datos seriales entrantes int entranteByte = 0; // matriz de caracteres para el valor de la etiqueta RFID char tagValue [10]; // ¿Qué valores de etiqueta están autorizados? Char * goodTags [] = "3D00CFBB80", // "######", // agregue otra etiqueta reemplazando los # 's con su código y eliminando el comentario de esta línea; // Calcule el número de etiquetas en la matriz anterior int tagCount = sizeof (goodTags) / sizeof (goodTags [0]); void setup () // define los modos de pin para el relé de apertura pinMode (doorPin, OUTPUT); // establecer la velocidad de datos para el puerto de SoftwareSerial RFIDPort.begin (9600); Serial.begin (38400); // frecuencia de monitoreo de serie Serial.println ("RFID GDO V0.1"); // hello world void loop () // loop and read if (RFIDPort.available ()) if (readKey ()) // comprueba el valor de la etiqueta if (goodTag ()) // si está permitido openDoor (); else Serial.println ("Bad tag. Go away."); int goodTag () for (int i = 0; i < tagCount; i++) //walk through the tag list if(strcmp(tagValue, goodTags[i]) == 0) return 1; return 0; void openDoor() Serial.println("Opening Door!"); digitalWrite(doorPin, HIGH); delay(500); // half a second is plenty of time to let trigger the contact digitalWrite(doorPin, LOW); //to prevent "bounce" or secondary reads if the tag is still close to the reader //we delay 3 seconds delay(3000); int readKey() byte i = 0; byte val = 0; byte checksum = 0; byte bytesRead = 0; byte tempByte = 0; byte tagBytes[6]; // "Unique" tags are only 5 bytes but we need an extra byte for the checksum // char tagValue[10]; this is defined globaly to simplify code if((val = RFIDPort.read()) == 2) // Check for header bytesRead = 0; while (bytesRead < 12) // Read 10 digit code + 2 digit checksum if (RFIDPort.available()) val = RFIDPort.read(); // Append the first 10 bytes (0 to 9) to the raw tag value // Check if this is a header or stop byte before the 10 digit reading is complete if (bytesRead < 10) tagValue[bytesRead] = val; if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02)) break; // Stop reading // Ascii/Hex conversion: if ((val >= '0') && (val <= '9')) val = val - '0'; else if ((val >= 'A') && (val <= 'F')) val = 10 + val - 'A'; // Every two hex-digits, add a byte to the code: if (bytesRead & 1 == 1) // Make space for this hex-digit by shifting the previous digit 4 bits to the left tagBytes[bytesRead >> 1] = (val | (tempByte << 4)); if (bytesRead >> 1! = 5) // Si estamos en el byte de suma de comprobación, checksum ^ = tagBytes [bytesRead >> 1]; // Calcular la suma de comprobación ... (XOR); else tempByte = val; // Almacena el primer dígito hexadecimal primero; bytesRead ++; // Listo para leer el siguiente dígito // Enviar el resultado al host conectado a través de USB si (bytesRead == 12) // La lectura de 12 dígitos está completa tagValue [10] = '\ 0'; // terminar en nulo la cadena Serial.print ("Tag read:"); para (i = 0; i<5; i++) // Add a leading 0 to pad out values below 16 if (tagBytes[i] < 16) Serial.print("0"); Serial.print(tagBytes[i], HEX); Serial.println(); Serial.print("Checksum: "); Serial.print(tagBytes[5], HEX); Serial.println(tagBytes[5] == checksum ? " -- passed." : " -- error."); Serial.println(tagValue); Serial.println(); return 1; //return value to indicate that we read something bytesRead=0; return 0;
En este tutorial describí los conceptos básicos de la tecnología RFID y cómo aprovecharla para sus propios proyectos. Si bien los componentes de bajo nivel que leen RFID pueden ser difíciles de usar para los aficionados, los paneles de RFID permiten usar RFID muy fácilmente en proyectos con Arduino o incluso una Raspberry Pi a través de un puerto serie. Una vez que se lee una identificación de una etiqueta, es fácil actuar sobre la información. En este ejemplo activamos un relé para abrir una puerta de garaje..
Adicionalmente: