Comment ouvrir votre porte de garage avec RFID

L'identification par radiofréquence, ou RFID, est une technologie passionnante qui a gagné en popularité ces dernières années. Il crée la possibilité de marquer quelque chose avec une très petite puce passive qui permet ensuite la lecture à distance des informations sur cette puce. Les étiquettes RFID sont couramment utilisées pour les cartes de sécurité des cartes de sécurité, l'identification des animaux perdus et, plus récemment, la communication en champ proche dans les smartphones.  

Dans ce tutoriel, je vais expliquer quelques notions de base sur le fonctionnement de la RFID, décrire différents types de RFID et montrer comment construire un ouvre-porte de garage RFID..


Les bases de la RFID

La RFID est une technologie vraiment cool qui utilise l’énergie du signal du lecteur RFID pour alimenter l’étiquette ou le transpondeur. Cela renvoie ensuite un signal contenant le contenu de la puce de mémoire de la balise..


Le signal d'interrogation alimente la puce RFID

Il existe un certain nombre de types RFID. Certaines étiquettes peuvent contenir une petite quantité de données pouvant être lues ultérieurement. D'autres sont si sophistiqués qu'ils exigent du lecteur qu'il signale une clé de cryptage avant que l'étiquette puisse décoder et renvoyer son contenu. Cependant, la plupart des tags contiennent simplement des numéros d'identification uniques permanents. De plus amples informations sur la RFID sont disponibles sur Wikipedia.

Les formats et les fréquences des puces RFID varient considérablement. Il y a toute une soupe d'alphabet de types. De nombreux téléphones intelligents lisent les formats NFC et MIFARE.  

Pour ce projet, cependant, je vais utiliser le type de puce EM4100 125K Wiegand. Ce type de RFID utilise des lecteurs et des balises peu coûteux, ce qui est la raison principale de cette puce dans mon kit. Tant que vous avez des lecteurs et des tags compatibles, le type de RFID n’a aucune importance pour ce projet..


Le projet RFID

Dans ce projet, j'utiliserai une étiquette RFID et un Arduino pour ouvrir une porte de garage lorsqu'une étiquette autorisée sera détectée. L'utilisation d'un composant RFID de bas niveau est une tâche assez compliquée, nous utilisons donc une carte opto-isolée qui effectue la lecture de bas niveau et transmet le code d'étiquette via des broches série. C'est ainsi que fonctionnent la plupart des tableaux de discussion RFID. Ce tutoriel utilise un de ces tableaux de discussion.

Pour ce tutoriel, je vais préparer le concept de l’ouvre-porte de garage et créer une preuve de concept fonctionnelle..


Composantes du projet

  • Arduino (à peu près n'importe quel modèle 5V devrait fonctionner, j'ai utilisé un Uno)
  • Lecteur RFID avec antenne
  • Tags RFID (j'ai trouvé que les porte-clés EM4100 125K Wiegand sont bon marché et faciles à trouver sur eBay)
  • Planche à pain
  • Une LED standard
  • Résistance 220 Ohm (Rouge Rouge Marron)
  • Relais (Aleph SD1A05AWJ)
  • Diode (1N4148)
  • Fils de cavalier

Comment ça marche

Le processus est assez simple.

Tout d'abord, le lecteur RFID lit l'étiquette et transmet le code à l'Arduino. L'Arduino lit ensuite le code de la connexion série et le compare à une liste de codes RFID autorisés. Si l’étiquette est sur la liste des sites autorisés, l’Arduino tire une broche haute pour fournir 5 V afin de fermer un relais. Lorsque le relais se ferme, il connecte les bornes des contacts de signal de porte de garage. La porte du garage s'ouvre alors.


La construction

Étape 1. La configuration du lecteur RFID

À l'aide de la fiche technique ou des instructions du lecteur RFID, connectez les broches d'alimentation, de mise à la terre, de série et d'antenne. Vous trouverez ci-dessous le schéma du lecteur que j'ai. Nous utilisons les broches Arduino 2 et 3 pour la communication série avec la carte RFID afin de pouvoir laisser les broches 0 et 1 pour la sortie de la console..


La fiche technique montrera les broches

Suivez ces étapes pour connecter la carte du lecteur RFID.

  1. Fil de terre sur la broche de terre du lecteur
  2. Câblez l'alimentation à la broche d'alimentation du lecteur
  3. Câblez la broche 2 Arduino à la broche TX de la carte RFID
  4. Câblez la broche 3 Arduino à la broche RX
  5. Connecter l'antenne au lecteur
  6. Connectez l’anode à DEL à la broche sortie de l’indicateur des cartes.
  7. Reliez la broche de cathode de la LED à la terre via la résistance

Ma configuration de la maquette est indiquée ci-dessous.


L'Arduino connecté à la carte de lecteur RFID

Étape 2. Configuration du relais

Ajoutez le relais à la planche à pain. Les deux broches internes font fonctionner l'électroaimant qui fermera le relais. Le diagramme ci-dessous montre l’incidence du courant sur les broches 3 à 7 sur le relais..


Schéma du relais
  1. Exécutez la broche 4 de l’Arduino sur la broche 3 du relais. Lorsque tiré haut, cette broche fournira assez de courant pour fermer le relais.
  2. Exécuter la broche 7 sur le relais à la terre.
  3. Ajouter la diode entre les broches 3 et 7 avec la bande de peinture vers la broche 3 du relais.
Pointe: Lors de l'utilisation d'un relais ou de tout ce qui utilise un champ électromagnétique, utilisez toujours une diode «flyback» pour protéger le système contre les pointes de puissance lorsque le champ magnétique s'effondre..

Ceci est ma planche à pain avec le relais câblé.

Breadboard avec configuration RFID et relais

Étape 3. Programme Arduino

  1. Copiez le code à la fin de ce tutoriel. Le code est soigneusement commenté pour vous aider à comprendre ce qui se passe à chaque étape. En haut du code, vous pouvez voir où se trouve un emplacement pour modifier la liste des valeurs de balises RFID. Nous exécuterons le code une fois et agiterons votre étiquette RFID pour que vous puissiez copier et coller l'ID de vos étiquettes autorisées dans le code final..
  2. Cliquez sur télécharger dans l'IDE Arduino
  3. Ouvrez le moniteur série de l'IDE Arduino en appuyant sur CTRL SHIFT M ou Sélection du menu Outils> Moniteur série.
Pointe: Assurez-vous que le débit en bauds du moniteur série correspond à ce que nous avons défini dans installer() une fonction. Dans cet exemple: 38400.

Vous devriez voir quelque chose comme ça:

RFID GDO V0.1
Tag lu: 3D00CFBB80
Somme de contrôle: C9 - réussi.
3D00CFBB80

Bad tag. Allez-vous en.

Copiez et collez votre identifiant (3D00CFBB80 dans cet exemple) dans le code dans la liste goodTags. Remarque: un code différent peut figurer sur une nouvelle ligne tant qu'il est entouré de guillemets et suivi d'une virgule. Une liste de codes unique peut ressembler à ceci:

char * goodTags [] =
"3D00CFBB80",
;

Cliquez sur uploader dans l'IDE Arduino, puis ouvrez le moniteur série de l'IDE Arduino en appuyant sur CTRL SHIFT M ou Sélection du menu Outils> Moniteur série.

Maintenant, lorsque vous exécutez le code, vous verrez quelque chose comme ceci:

RFID GDO V0.1
Tag lu: 3D00CFBB80
Somme de contrôle: C9 - réussi.
3D00CFBB80

Porte d'ouverture!

Ci-dessous, une photo de moi testant l’étiquette RFID avec le relais. Le multimètre est relié aux broches 1 et 9 du relais. Il doit donc détecter la continuité à la fermeture du relais..


Test de la boucle RFID

Avec un multimètre connecté, vous pouvez entendre le bip du multimètre pour indiquer la continuité, puis un très léger clignotement et le relais s'ouvrira à nouveau..

Étape 4. Ouverture de la porte du garage

La plupart des ouvre-portes de garage fonctionnent très simplement en s’ouvrant lorsqu’un contact est fermé. Lorsque vous appuyez sur le bouton sur le mur, vous fermez le contact. Sur mon ouvre-porte de garage, j'ai des terminaux où les fils du bouton sont connectés. Vous pouvez voir les terminaux surlignés ici:


Bornes d'ouvre-porte de garage
  1. Reliez les broches 1 et 9 du relais de la planche à pain aux bornes de l'ouvre-porte de garage
  2. Agitez votre étiquette RFID près de l'antenne
  3. Regarder la porte ouverte

Vous avez maintenant la preuve de concept de base pour ouvrir la porte d'un geste de la main.

Étape 5. Rendez-le permanent

  1. Installez l'antenne à un endroit où elle peut lire l'étiquette par la porte ou le mur. La RFID peut traverser des objets solides, ainsi une antenne peut être cachée derrière le mur du garage en fonction du matériau. Cela peut prendre quelques essais et erreurs pour trouver un endroit où il peut lire la balise.
  2. Transférer le circuit sur une carte de performance et souder une solution permanente
  3. Mettez le projet dans une boîte et montez-le dans votre garage.

Code source pour ce projet

/ * Exemple de code d’ouvre-porte de garage RFID de Ben Miller @VMfoo ReadKey inspiré et emprunté en partie à l’exemple de l'aire de jeu arduino: http://playground.arduino.cc/Code/ID12 * / // pour vous permettre d'inclure la bibliothèque SoftwareSerial utilise ses fonctions: #include // laissant les ports série matériels pour le débogage #define rxPin 2 // broche pour recevoir des données du lecteur RFID #define txPin 3 // broche de transmission pour l’initialisation softserial #define doorPin 4 // broche pour déclencher le relais / / configurer un nouveau port série NewSoftSerial RFIDPort = NewSoftSerial (rxPin, txPin); octet pinState = 0; // pour les données série entrantes int incomingByte = 0; // tableau de caractères pour la valeur de la balise RFID char char tagValue [10]; // Quelles sont les valeurs autorisées pour les balises char * goodTags [] = "3D00CFBB80", // "######", // ajoute une autre balise en remplaçant le # par votre code et en décommentant cette ligne; // Calcule le nombre de balises dans le tableau ci-dessus int tagCount = sizeof (goodTags) / sizeof (goodTags [0]); void setup () // définit les modes de broche pour le relais d'ouverture codePode (doorPin, OUTPUT); // définit le débit de données pour le port SoftwareSerial RFIDPort.begin (9600); Serial.begin (38400); // débit de contrôle série Serial.println ("RFID GDO V0.1"); // hello world void loop () // boucle et lit si (RFIDPort.available ()) if (readKey ()) // contrôle la valeur de la balise if (goodTag ()) // si cela est autorisé 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 nous en sommes à l'octet de somme de contrôle, somme de contrôle ^ = tagBytes [bytesRead >> 1]; // Calcule la somme de contrôle… (XOR);  else tempByte = val; // Stocke le premier chiffre hexadécimal en premier; bytesRead ++; // Prêt à lire le chiffre suivant // Envoyez le résultat à l'hôte connecté via USB si (bytesRead == 12) // La lecture à 12 chiffres est terminée tagValue [10] = '\ 0'; // Null-terminer la chaîne Serial.print ("Tag read:"); pour (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; 

Résumé

Dans ce tutoriel, j'ai présenté les bases de la technologie RFID et comment l'exploiter pour vos propres projets. Les composants de bas niveau qui lisent la RFID peuvent être difficiles à utiliser pour les amateurs, mais les cartes RFID permettent d’utiliser très facilement la RFID dans les projets avec Arduino ou même avec un Raspberry Pi via un port série. Une fois qu'un identifiant est lu à partir d'une étiquette, il est simple d'agir sur les informations. Dans cet exemple, nous avons actionné un relais pour ouvrir une porte de garage.

En outre:

  • J'ai examiné les différences dans les types de technologie RFID
  • J'ai exploré le concept de fonctionnement de la RFID
  • Vous avez suivi un exemple de connexion d’une carte de lecteur RFID à un Arduino.
  • Lire et imprimer l'identifiant RFID à partir d'une étiquette d'identification
  • Ajout d'un relais au circuit pour fermer un contact lorsque la bonne étiquette a été lue
  • Connecté le relais à un ouvre-porte de garage pour ajouter un contrôle d'accès basé sur RFID