Taula de continguts:

Lector RFID AVR / Arduino amb codi UART en C: 4 passos
Lector RFID AVR / Arduino amb codi UART en C: 4 passos

Vídeo: Lector RFID AVR / Arduino amb codi UART en C: 4 passos

Vídeo: Lector RFID AVR / Arduino amb codi UART en C: 4 passos
Vídeo: Arduino MEGA2560 + RFID-RC522 - Arduino Tutorial 2024, Desembre
Anonim
Lector RFID AVR / Arduino amb codi UART en C
Lector RFID AVR / Arduino amb codi UART en C

La RFID és la moda que es troba a tot arreu, des de sistemes d’inventari fins a sistemes d’identificació de distintius. Si alguna vegada heu anat a un gran magatzem i heu recorregut aquestes coses amb aspecte de detector de metalls als punts d’entrada / sortida, heu vist RFID. Hi ha diversos llocs on es pot trobar bona informació sobre la configuració de l’RFID, que es pot centrar en la instal·lació del lector RFID Parallax (Serial TTL) en un AVR, amb èmfasi en el codi C necessari per llegir l’entrada sèrie. El codi està en C i no utilitza cap biblioteca externa. De fet, parla 2400 baud directament sense l'ús d'un UART mitjançant la sincronització amb la velocitat en baud del lector RFID i la lectura del pin digital al qual està connectat. Us emociona? Jo també.

Pas 1: Obteniu els béns

Obteniu els béns
Obteniu els béns

Necessiteu la següent llista de peces:

  • Lector RFID (Parallax # 28140 $ 39,99)
  • Etiqueta RFID (Parallax # 32397 0,99 $)
  • AVR o clon Arduino (si utilitzeu un AVR existent, també necessitareu un condensador max232, 5 x 1uF i un connector DE9)
  • Taula de pa sense soldadura

Opcional

  • Capçalera de 4 posicions
  • Filferro

(i el max232, etc. per a la comunicació de la informació de l'etiqueta) També podeu connectar la vostra pantalla LCD preferida en lloc d'enviar dades de l'etiqueta mitjançant RS232.

Pas 2: connecteu les peces

Connecteu les peces
Connecteu les peces
Connecteu les peces
Connecteu les peces
Connecteu les peces
Connecteu les peces

El costat del maquinari de les coses és bastant fàcil. En lloc de col·locar el meu lector RFID directament a la taula, vaig optar per fer un cable ràpid per poder moure el lector RFID una mica millor. Per a això, acabo de tallar 4 posicions d'una tira de capçalera de femella que tenia estirada i soldada en tres cables. La cinta elèctrica ha completat el connector del gueto. El lector RFID té 4 connexions:

  • Vcc
  • HABILITAR
  • Fora
  • Gnd

Com probablement ho heu endevinat, connecteu Vcc a + 5V i Gnd a terra. Com que el lector RFID consumeix tanta energia, podeu tocar el pin ENABLE per apagar-lo i encendre-lo a diversos intervals. Simplement vaig escollir continuar. Com que està invertit, el tireu BAIX per activar-lo. Com a alternativa, podeu connectar-lo a terra. El vaig connectar a PIND3 per donar-me opcions d’activar / desactivar si ho decidia. El pin OUT és on el lector envia les seves dades de sèrie després de llegir una etiqueta. El vaig connectar a PIND2. Nota, a l’univers Parallax, vermell significa anar. És a dir, un LED verd significa que la unitat està inactiva i inactiva, mentre que un LED vermell significa que la unitat està activa. * encongir-se d’espatlles * Anar xifra.

Pas 3: escriviu el codi

Escriu el Codi
Escriu el Codi

Per llegir les dades del lector RFID, heu de saber quan s’ha enviat una etiqueta, traieu les dades del port sèrie i envieu-les a algun lloc.

Format de dades del lector RFID

El lector RFID Parallax envia dades a un ritme glacial fix de 2.400 baud. Una etiqueta RFID té 10 bytes. Per tal de permetre la detecció / correcció d'errors, ja que el lector es podria desactivar del soroll aleatori, el RFID de 10 bytes està limitat per una sentinella d'inici i aturada. El sentinella inicial és l'alimentació de línia (0x0A) i el sentinella d'aturada és retorn de carro (0x0D). Es veu així:

[Inici Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Stop Sentinel]Aquests són els tres passos principals.

Saber quan s'ha enviat una etiqueta

He utilitzat una interrupció de canvi de pins a l'AVR que notifica al firmware que s'ha produït un canvi en un pin supervisat. Configurar l'AVR per a això és fàcil i requereix establir el senyalador, indicar a la MCU quin pin voleu controlar i configurar el bit d'interrupció global. Configureu PCINT

BSET (PCICR, PCIE2); // registre de control d'interrupció de canvi de pin pcie2 BSET (PCMSK2, PCINT18); // habilitar la interrupció del canvi de pin per a PCINT18 (PD2) BSET (SREG, 7); // Estableix SREG I-bitVoleu que el vostre ISR sigui breu, de manera que en el meu vector d’interrupcions llegeixo tot el byte, poc a poc, i emmagatzemo el byte en una matriu de caràcters volàtils global. Faig el següent a cada interrupció:

  • Comproveu que estic en un punt inicial
  • Centreu el temps al pols mig a 2400 baud (la velocitat del lector RFID)
  • Omet el bit inicial i posa’t en pausa a la meitat del bit següent
  • Llegiu cada bit en un enter sense signar
  • Quan tinc 8 bits, poseu el byte en una matriu de caràcters
  • Quan hagi recopilat 12 bytes, feu saber a la MCU que l'etiqueta s'ha llegit per a la detecció d'errors.

Vaig modificar el codi SoftSerial de Mikal Hart que va modificar el codi de David Mellis pels retards determinats experimentalment en les rutines serials.

Analitza la sortida RS232

La rutina PCINT conté el codi per llegir la sortida RS232 del lector RFID. Quan tinc 12 bytes (RFID de 10 bytes més sentinelles) he definit bDataReady a 1 i deixo que el bucle principal processi les dades i les mostri.

// aquest és el controlador d’interrupcionsISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // El bit d’inici té un retorn baix; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Centra el bit inicial per a (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // salta una mica, germà … if (BCHK (PIND, RFID_IN)) BSET (bit, x); altrament BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // ometeu el bit de parada RFID_tag [rxIdx] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}

Mostra la vostra etiqueta

Al main (), durant el bucle for (ever), comprovo si s'ha configurat bDataReady, indicant que s'ha enviat tota l'estructura RFID. A continuació, comprovo si es tracta d’una etiqueta vàlida (és a dir, els caràcters d’inici i d’aturada són 0x0A i 0x0D, respectivament) i, si és així, l’envio la meva connexió RS232.

per a (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Octet inicial:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nDeter byte:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16)); # endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); per a (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; }}

Pas 4: Codi i comiat

Aquesta pàgina conté un fitxer zip amb el codi corresponent. Va ser escrit a AVR Studio 4.16. Si utilitzeu el bloc de notes, eclipsi o vi del programador (o alguna cosa més), haureu de copiar un Makefile de confiança al directori i afegir aquests fitxers a la línia d’origen. MCU de 16 MHz. Si esteu executant amb una freqüència de rellotge diferent, haureu de determinar experimentalment els retards sintonitzats per centrar-se en els impulsos de la velocitat en bauds. Espero que aquesta instrucció us ajudi d'alguna manera. Si teniu algun suggeriment sobre com es podria millorar, no dubteu en fer-m'ho saber.

Recomanat: