Sommario:
- Passaggio 1: prendi la merce
- Passaggio 2: collegare le parti
- Passaggio 3: scrivi il codice
- Passaggio 4: codice e addio
Video: Lettore RFID AVR/Arduino con codice UART in C: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:06
L'RFID è la mania, che si trova ovunque, dai sistemi di inventario ai sistemi di identificazione dei badge. Se sei mai stato in un grande magazzino e hai camminato attraverso quelle cose che sembrano metal detector nei punti di ingresso/uscita, allora hai visto l'RFID. Ci sono molti posti dove trovare buone informazioni sulla configurazione dell'RFID, e questa istruzione si concentra sull'installazione del lettore RFID Parallax (Serial TTL) su un AVR, con enfasi sul codice C necessario per leggere l'input seriale. Il codice è in C e non utilizza librerie esterne. Infatti, parla direttamente a 2400 baud senza l'uso di un UART sincronizzandosi al baud rate del lettore RFID e leggendo il pin digitale a cui è connesso. Emozionato? Anche io.
Passaggio 1: prendi la merce
Avrai bisogno del seguente elenco di parti:
- Lettore RFID (parallasse # 28140 $ 39,99)
- Tag RFID (parallasse #32397 $ 0,99)
- AVR o clone di Arduino (se usi un AVR di serie, avrai anche bisogno di un max232, condensatori 5 x 1uF e un connettore DE9)
- breadboard senza saldatura
Opzionale
- Intestazione a 4 posizioni
- Filo
(e il max232 ecc. per la comunicazione delle informazioni sui tag) Puoi anche collegare il tuo schermo LCD preferito invece di inviare i dati dei tag tramite RS232.
Passaggio 2: collegare le parti
Il lato hardware delle cose è abbastanza semplice. Invece di inserire il mio lettore RFID direttamente nella mia breadboard, ho deciso di creare un cavo rapido in modo da poter spostare un po' meglio il lettore RFID. Per questo, ho appena tagliato 4 posizioni da una striscia di intestazione della presa femmina che avevo in giro e saldata su tre fili. Il nastro isolante ha completato il connettore del ghetto. Il lettore RFID ha 4 connessioni:
- Vcc
- ABILITARE
- FUORI
- Gnd
Come probabilmente avrai intuito, collega Vcc a +5V e Gnd a massa. Poiché il lettore RFID consuma così tanta energia, puoi battere il pin ENABLE per spegnerlo e riaccenderlo a vari intervalli. Ho semplicemente scelto di tenerlo acceso. Poiché è invertito, lo tiri in BASSO per attivarlo. In alternativa, puoi collegarlo a terra. L'ho collegato a PIND3 per darmi opzioni di abilitazione/disabilitazione se decidessi di farlo. Il pin OUT è dove il lettore invia i suoi dati seriali dopo aver letto un tag. L'ho collegato a PIND2. Nota, nell'Universo Parallax, rosso significa vai. Cioè, un LED verde indica che l'unità è inattiva e inattiva, mentre un LED rosso indica che l'unità è attiva. *alza le spalle* Vai a capire.
Passaggio 3: scrivi il codice
Per leggere i dati dal lettore RFID, devi sapere quando è stato inviato un tag, estrarre i dati dalla porta seriale, quindi inviarli da qualche parte.
Formato dati lettore RFID
Il lettore RFID Parallax invia i dati a un ritmo fisso e glaciale di 2400 baud. Un tag RFID è di 10 byte. Per consentire il rilevamento/correzione degli errori, poiché il lettore potrebbe essere attivato da rumore casuale, l'RFID a 10 byte è delimitato da una sentinella di avvio e arresto. La sentinella di inizio è l'avanzamento riga (0x0A) e la sentinella di arresto è il ritorno a capo (0x0D). Sembra così:
[Avvia Sentinella |Byte 1|Byte 2|Byte 3|Byte 4|Byte 5|Byte 6|Byte 7|Byte 8|Byte 9|Byte 10| Ferma la sentinella]Questi sono i tre passaggi principali.
Sapere quando è stato inviato un tag
Ho usato un Pin Change Interrupt sull'AVR che notifica al firmware che si è verificata una modifica su un pin monitorato. La configurazione dell'AVR per questo è semplice e richiede l'impostazione del flag, la comunicazione all'MCU del pin che si desidera monitorare e l'impostazione del bit di interruzione globale. Configura PCINT
BSET(PCICR, PCIE2); // registro di controllo dell'interruzione del cambio pin pcie2 BSET(PCMSK2, PCINT18); // abilita l'interrupt di cambio pin per PCINT18 (PD2) BSET(SREG, 7); // Imposta SREG I-bitScrivi la tua routine di servizio di interruzione Vuoi mantenere la tua ISR breve, quindi nel mio vettore di interruzione leggo l'intero byte, bit per bit, e memorizzo il byte in un array di caratteri volatile globale. Faccio quanto segue ad ogni interrupt:
- Controlla per assicurarti di essere un po' all'inizio
- Centrare la temporizzazione sull'impulso medio a 2400 baud (la velocità del lettore RFID)
- Salta il bit iniziale e metti in pausa a metà del bit successivo
- Leggi ogni bit in un intero senza segno
- Quando ho 8 bit, inserisci il byte in un array di caratteri
- Quando ho raccolto 12 byte, informa l'MCU che il tag è stato letto per il rilevamento degli errori.
Ho modificato il codice SoftSerial di Mikal Hart che ha modificato il codice di David Mellis per i ritardi determinati sperimentalmente nelle routine seriali.
Analizza uscita RS232
La routine PCINT contiene il codice per leggere l'uscita RS232 dal lettore RFID. Quando ho ottenuto 12 byte (RFID a 10 byte più sentinelle) ho impostato bDataReady a 1 e lascio che il loop principale elabori i dati e li visualizzi.
// questo è l'interrupt handlerISR(PCINT2_vect){ if (BCHK(PIND, RFID_IN)) // Il bit di inizio va a tornare basso; uint8_t bit = 0; TunedDelay(CENTER_DELAY); // Centra sul bit di inizio for (uint8_t x = 0; x < 8; x++) { TunedDelay(INTRABIT_DELAY); // salta un po', fratello… if (BCHK(PIND, RFID_IN)) BSET(bit, x); altrimenti BCLR(bit, x); } TunedDelay(INTRABIT_DELAY); // salta il bit di stop RFID_tag[rxIdx] = bit; ++rxIdx; if (rxIdx == 12) bDataReady = 1;}
Mostra il tuo tag
Nel main(), durante il ciclo for(ever), verifico se bDataReady è stato impostato, segnalando che l'intera struttura RFID è stata inviata. Quindi controllo per vedere se è un tag valido (cioè i caratteri di inizio e fine sono 0x0A e 0x0D, rispettivamente) e, in tal caso, lo invio alla mia connessione RS232.
for (;;){ if (bDataReady) {#ifdef _DEBUG_ USART_tx_S("Byte iniziale: "); USART_tx_S(itoa(RFID_tag[0], &ibuff[0], 16)); ibuff[0] = 0; ibuff[1] = 0; USART_tx_S("\nByte di arresto: "); USART_tx_S(itoa(RFID_tag[11], &ibuff[0], 16));#endif if (ValidTag()) { USART_tx_S("\nRFID Tag: "); 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; bDataReady = 0; }}
Passaggio 4: codice e addio
Questa pagina contiene un file zip con il relativo codice. È stato scritto in AVR Studio 4.16. Se usi il blocco note del programmatore, eclipse o vi (o qualcos'altro) dovrai copiare un Makefile affidabile nella directory e aggiungere questi file alla riga di origine. Inoltre, i tempi per la sezione di lettura seriale si basa su un MCU a 16 MHz. Se stai correndo a una frequenza di clock diversa, dovrai determinare sperimentalmente i ritardi sintonizzati per centrare gli impulsi della velocità di trasmissione. Spero che questa istruzione ti abbia aiutato in qualche modo. Se hai qualche suggerimento su come potrebbe essere migliorato, non esitare a farmelo sapere!
Consigliato:
Serratura elettrica con lettore di impronte digitali e lettore RFID: 11 passaggi (con immagini)
Serratura elettrica con lettore di impronte digitali e lettore RFID: Il progetto è stato progettato per evitare la necessità di utilizzare le chiavi, per raggiungere il nostro obiettivo abbiamo utilizzato un sensore ottico di impronte digitali e un Arduino. Tuttavia ci sono persone che hanno un'impronta digitale illeggibile e il sensore non la riconosce. Poi pensando a
Come caricare il codice C su AVR utilizzando Arduino Uno come programmatore: 6 passaggi
Come caricare il codice C su ِAVR utilizzando Arduino Uno come programmatore: CIAO a tutti: D Qui condividerò un modo semplice per programmare qualsiasi chip AVR utilizzando Arduino Uno R3 Tutto ciò di cui hai bisogno per masterizzare il codice sul tuo microcontrollore è Arduino Uno invece di acquistare uno specifico programmatore che costa molto
Come caricare il programma o il codice in Arduino Pro Mini utilizzando il cavo convertitore seriale UART CH340: 4 passaggi
Come caricare il programma o il codice in Arduino Pro Mini utilizzando il cavo convertitore seriale UART CH340: I cavi seriali USB TTL sono una gamma di cavi convertitori da USB a seriale che forniscono connettività tra le interfacce USB e UART seriale. È disponibile una gamma di cavi che offrono connettività a 5 volt, 3,3 volt o livelli di segnale specificati dall'utente con
Collegare un lettore MP3 a un lettore di nastri: 6 passaggi (con immagini)
Collegare un lettore MP3 a un lettore di nastri: come collegare un lettore mp3, o altra sorgente stereo, a un lettore di nastri per ascoltare la musica
Biglietto da visita con decodificatore - Messaggio segreto con codice QR: 6 passaggi (con immagini)
Biglietto da visita con decodificatore - Messaggio segreto con codice QR: Avere un buon biglietto da visita può aiutarti a mantenere i contatti, promuovere te stesso e la tua attività e fare amicizia. Creando un biglietto da visita personale che coinvolga il destinatario che traduce attivamente il tuo biglietto, sarà più probabile che si ricordi di te