Table des matières:
- Étape 1: Obtenez les marchandises
- Étape 2: connectez les pièces
- Étape 3: écrivez le code
- Étape 4: Code et adieu
Vidéo: Lecteur RFID AVR/Arduino avec code UART en C : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:11
La RFID est à la mode, que l'on trouve partout - des systèmes d'inventaire aux systèmes d'identification par badge. Si vous êtes déjà allé dans un grand magasin et avez traversé ces objets ressemblant à des détecteurs de métaux aux points d'entrée/de sortie, alors vous avez vu la RFID. Il existe plusieurs endroits pour trouver de bonnes informations sur la configuration RFID, et cette instructable se concentre sur l'installation du lecteur RFID Parallax (Serial TTL) sur un AVR, en mettant l'accent sur le code C nécessaire pour lire l'entrée série. Le code est en C et n'utilise aucune bibliothèque externe. En fait, il parle directement à 2400 bauds sans utiliser d'UART en se synchronisant sur le débit en bauds du lecteur RFID et en lisant la broche numérique à laquelle il est connecté. Excité? Moi aussi.
Étape 1: Obtenez les marchandises
Vous aurez besoin de la liste de pièces suivante:
- Lecteur RFID (Parallaxe #28140 39,99 $)
- Étiquette RFID (Parallaxe #32397 0,99 $)
- AVR ou clone Arduino (si vous utilisez un AVR d'origine, vous aurez également besoin d'un max232, de condensateurs 5 x 1uF et d'un connecteur DE9)
- Planche à pain sans soudure
Optionnel
- en-tête à 4 positions
- Câble
(et le max232 etc. pour la communication des informations d'étiquette) Vous pouvez également connecter votre écran LCD préféré au lieu d'envoyer des données d'étiquette via RS232.
Étape 2: connectez les pièces
Le côté matériel des choses est assez facile. Au lieu de placer mon lecteur RFID directement dans ma planche à pain, j'ai choisi de fabriquer un câble rapide afin de pouvoir déplacer un peu mieux le lecteur RFID. Pour cela, j'ai juste coupé 4 positions d'une barrette femelle d'embase que j'avais allongée et soudée sur trois fils. Du ruban isolant a complété le connecteur ghetto. Le lecteur RFID dispose de 4 connexions:
- Vcc
- PERMETTRE
- DEHORS
- Terre
Comme vous l'avez probablement deviné, connectez Vcc à +5V et Gnd à la terre. Parce que le lecteur RFID consomme tellement d'énergie, vous pouvez frapper la broche ENABLE pour l'éteindre et l'allumer à différents intervalles. J'ai simplement choisi de le garder. Parce qu'il est inversé, vous le tirez BAS pour l'activer. Alternativement, vous pouvez le connecter à la terre. Je l'ai connecté à PIND3 pour me donner des options d'activation/désactivation si je le décidais. La broche OUT est l'endroit où le lecteur envoie ses données série après avoir lu une étiquette. Je l'ai connecté à PIND2. Notez que dans l'univers Parallax, le rouge signifie aller. Autrement dit, une LED verte signifie que l'unité est inactive et inactive, tandis qu'une LED rouge signifie que l'unité est active. *hausse les épaules* Allez comprendre.
Étape 3: écrivez le code
Pour lire les données du lecteur RFID, vous devez savoir quand une étiquette a été soumise, retirer les données du port série, puis les envoyer quelque part.
Format des données du lecteur RFID
Le lecteur RFID Parallax envoie des données à un rythme fixe et glacial de 2400 bauds. Une étiquette RFID fait 10 octets. Afin de permettre la détection/correction des erreurs, étant donné que le lecteur pourrait être déclenché par un bruit aléatoire, le RFID de 10 octets est délimité par une sentinelle de démarrage et d'arrêt. La sentinelle de départ est le saut de ligne (0x0A) et la sentinelle d'arrêt est le retour chariot (0x0D). Cela ressemble à ceci:
[Démarrer Sentinel | Octet 1| Octet 2| Octet 3| Octet 4| Octet 5| Octet 6| Octet 7| Octet 8| Octet 9| Octet 10| Arrêtez la sentinelle]Ce sont les trois étapes principales.
Savoir quand un tag a été soumis
J'ai utilisé une interruption de changement de broche sur l'AVR qui informe le micrologiciel qu'un changement s'est produit sur une broche surveillée. La configuration de l'AVR pour cela est simple et nécessite de définir le drapeau, d'indiquer au MCU quelle broche vous souhaitez surveiller et de définir le bit d'interruption global. Configurer PCINT
BSET(PCICR, PCIE2); // registre de contrôle d'interruption de changement de broche pcie2 BSET(PCMSK2, PCINT18); // activer l'interruption de changement de broche pour PCINT18 (PD2) BSET (SREG, 7); // Définir le bit I SREGEcrivez votre routine de service d'interruption Vous voulez garder votre ISR court, donc dans mon vecteur d'interruption, je lis l'octet entier, bit par bit, et stocke l'octet dans un tableau global de caractères volatiles. Je fais ce qui suit à chaque interruption:
- Vérifiez pour vous assurer que je suis sur un peu de démarrage
- Centrez la synchronisation sur l'impulsion du milieu à 2400 bauds (la vitesse du lecteur RFID)
- Sauter le bit de départ et faire une pause au milieu du bit suivant
- Lire chaque bit dans un entier non signé
- Quand j'ai 8 bits, mets l'octet dans un tableau de caractères
- Lorsque j'ai collecté 12 octets, informez le MCU que la balise a été lue pour la détection d'erreurs.
J'ai modifié le code SoftSerial de Mikal Hart qui a modifié le code de David Mellis pour les retards déterminés expérimentalement dans les routines série.
Analyser la sortie RS232
La routine PCINT contient le code pour lire la sortie RS232 du lecteur RFID. Lorsque j'ai obtenu 12 octets (RFID 10 octets plus sentinelles), je mets bDataReady sur 1 et laisse la boucle principale traiter les données et les afficher.
// c'est le gestionnaire d'interruptionISR(PCINT2_vect){ if (BCHK(PIND, RFID_IN)) // Le bit de démarrage passe au niveau bas; uint8_t bit = 0; Délai accordé(CENTER_DELAY); // Centrer sur le bit de départ pour (uint8_t x = 0; x < 8; x++) { TunedDelay(INTRABIT_DELAY); // saute un peu, frère… if (BCHK(PIND, RFID_IN)) BSET(bit, x); sinon BCLR(bit, x); } TunedDelay(INTRABIT_DELAY); // ignore le bit d'arrêt RFID_tag[rxIdx] = bit; ++rxIdx; if (rxIdx == 12) bDataReady = 1;}
Affichez votre étiquette
Dans le main(), pendant la boucle for(ever), je vérifie si bDataReady a été défini, signalant que toute la structure RFID a été envoyée. Je vérifie ensuite si c'est une balise valide (c'est-à-dire que les caractères de début et de fin sont 0x0A et 0x0D, respectivement), et si c'est le cas, je l'envoie ma connexion RS232.
for (;;){ if (bDataReady) {#ifdef _DEBUG_ USART_tx_S("Octet de début: "); USART_tx_S(itoa(RFID_tag[0], &ibuff[0], 16)); ibuff[0] = 0; ibuff[1] = 0; USART_tx_S("\nOctet d'arrêt: "); USART_tx_S(itoa(RFID_tag[11], &ibuff[0], 16));#endif if (ValidTag()) { USART_tx_S("\nBague RFID: "); for(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; bDonnéesPrêt = 0; }}
Étape 4: Code et adieu
Cette page contient un fichier zip avec le code correspondant. Il a été écrit dans AVR Studio 4.16. Si vous utilisez le bloc-notes du programmeur, Eclipse ou vi (ou autre chose), vous devrez copier un Makefile de confiance dans le répertoire et ajouter ces fichiers à la ligne source. Notez également que le timing de la section de lecture en série est basé sur un Microcontrôleur 16 MHz. Si vous utilisez une fréquence d'horloge différente, vous devrez déterminer expérimentalement les retards accordés pour se centrer sur les impulsions de débit en bauds. J'espère que cette instructable vous a aidé d'une manière ou d'une autre. Si vous avez des suggestions sur la façon dont il pourrait être amélioré, n'hésitez pas à me le faire savoir!
Conseillé:
Comment créer un lecteur MP3 avec écran LCD à l'aide d'Arduino et du module de lecteur MP3 Mini DFPlayer : 6 étapes
Comment créer un lecteur MP3 avec écran LCD à l'aide d'Arduino et du module de lecteur mini MP3 DFPlayer : Aujourd'hui, nous allons créer un lecteur MP3 avec écran LCD à l'aide d'Arduino et du module de lecteur mini MP3 DFPlayer. Le projet peut lire les fichiers MP3 sur la carte SD et peut faire une pause et jouez de la même manière que l'appareil il y a 10 ans. Et aussi il a la chanson précédente et la chanson suivante amusante
Serrure de porte électrique avec lecteur d'empreintes digitales et lecteur RFID : 11 étapes (avec photos)
Serrure de porte électrique avec lecteur d'empreintes digitales et lecteur RFID : le projet a été conçu pour éviter la nécessité d'utiliser des clés. Pour atteindre notre objectif, nous avons utilisé un capteur optique d'empreintes digitales et un Arduino. Cependant, il y a des individus qui ont une empreinte digitale illisible et le capteur ne la reconnaîtra pas. Puis penser à un
Lecteur RFID Arduino avec écran TFT : 7 étapes
Lecteur RFID Arduino avec écran TFT : je vais vous montrer dans cette instructable comment concevoir un joli lecteur RFID avec écran TFT et pour un montage mural. Il est très facile de créer un joli lecteur RFID avec sortie TFT pour un montage mural avec un Arduino MKR de votre choix et notre Ar
Démo 4x4 d'un échiquier électronique/Avec Arduino Mega + Lecteur RFID + Capteurs à effet Hall : 7 étapes
Démo 4x4 d'un échiquier électronique/avec Arduino Mega + lecteur RFID + capteurs à effet Hall : Salut les fabricants, je suis Tahir Miriyev, diplômé de 2018 de l'Université technique du Moyen-Orient, Ankara/Turquie. Je me suis spécialisé en mathématiques appliquées, mais j'ai toujours aimé faire des trucs, surtout quand cela impliquait du travail manuel avec l'électronique, la conception et la programmation
Connecter un lecteur MP3 à un lecteur de cassettes : 6 étapes (avec photos)
Connecter un lecteur MP3 à un lecteur de cassettes : Comment connecter un lecteur MP3 ou une autre source stéréo à un lecteur de cassettes pour écouter de la musique