Cómo abrir la puerta de su garaje con RFID

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..


Los fundamentos de 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..


La señal de interrogación alimenta el chip RFID

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.


El proyecto RFID

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..


Componentes del proyecto

  • Arduino (Casi cualquier modelo de 5V debería funcionar, usé uno)
  • Lector de tarjetas RFID con antena
  • Etiquetas RFID (encontré que los llaveros EM4100 125K Wiegand son baratos y fáciles de encontrar en eBay)
  • Tablero de circuitos
  • Un LED estándar
  • Resistor de 220 ohmios (rojo rojo marrón)
  • Relé (Aleph SD1A05AWJ)
  • Diodo (1N4148)
  • Cables de puente

Cómo funciona

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..


La construcción

Paso 1. La configuración del lector RFID

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.


La hoja de datos mostrará los pin outs.

Siga estos pasos para conectar el tablero lector de RFID.

  1. Cable de tierra al pin de tierra del lector
  2. Cable de alimentación al pin de potencia del lector
  3. Conecte el pin Arduino 2 al pin TX de la placa RFID
  4. Alambre Arduino pin 3 al pin RX
  5. Conecte la antena al lector.
  6. Conecte el ánodo LED a la pwr out pin del indicador de tableros.
  7. Conecte la clavija de cátodo del LED al suelo a través de la resistencia

La configuración de mi placa se muestra a continuación.


El Arduino conectado a la placa lectora RFID.

Paso 2. Configuración de relé

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é.


Esquema de relevo
  1. Ejecute el pin 4 desde el Arduino hasta el pin 3 en el relé. Cuando se tira alto, este pin proporcionará suficiente corriente para cerrar el relé.
  2. Ejecutar el pin 7 en el relé a tierra.
  3. Agregue el diodo entre los pines 3 y 7 con la franja de pintura hacia el pin 3 del relé.
Propina: Cuando use un relé o realmente cualquier cosa que use un campo electromagnético, siempre use un diodo de “retorno” para proteger el sistema del pico de energía cuando el campo magnético colapsa.

Este es mi tablero con el relé cableado..

Breadboard con RFID y configuración de relé.

Paso 3. Programa Arduino

  1. Copia el código del final de este tutorial. El código está completamente comentado para ayudarlo a comprender lo que está sucediendo en cada paso. Cerca de la parte superior del código, puede ver dónde hay un lugar para modificar la lista de valores de etiquetas RFID. Ejecutaremos el código una vez y agitaremos su etiqueta RFID para que pueda copiar y pegar la ID de sus etiquetas autorizadas en el código final.
  2. Hacer clic subir en el IDE de Arduino
  3. Abra el Monitor Serial del IDE de Arduino presionando CTRL SHIFT M o seleccionando el menú Herramientas> Monitor de serie.
Propina: Asegúrese de que la velocidad en baudios del monitor en serie coincida con lo establecido en el 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é.


Probando el bucle RFID

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..

Paso 4. Abriendo la puerta del garaje

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í:


Terminales de apertura de puertas de garaje
  1. Conecte los pines 1 y 9 del relé en el tablero a los terminales en el abrepuerta del garaje
  2. Agita tu etiqueta RFID cerca de la antena
  3. Mira la puerta abierta

Ahora tiene la prueba de concepto básica para abrir la puerta con un movimiento de la mano..

Paso 5. Hazlo permanente

  1. Monte la antena en algún lugar donde pueda leer la etiqueta a través de la puerta o la pared. La RFID puede pasar a través de objetos sólidos, por lo que se puede ocultar una antena detrás de la pared del garaje, dependiendo del material. Puede tomar un poco de prueba y error encontrar un lugar donde pueda leer la etiqueta.
  2. Transfiera el circuito a un perfboard y suelde una solución permanente
  3. Pon el proyecto en una caja y monta en tu garaje..

Código fuente para este proyecto.

/ * 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; 

Resumen

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:

  • He examinado las diferencias en los tipos de tecnología RFID
  • Exploré el concepto de cómo funciona la RFID.
  • Siguió un ejemplo de conexión de una placa lectora RFID a un Arduino
  • Lea e imprima el identificador RFID desde una etiqueta de identificación
  • Se agregó un relé al circuito para cerrar un contacto cuando se leyó la etiqueta correcta.
  • Conecte el relé a un abridor de puerta de garaje para agregar control de acceso basado en RFID