Cuprins:
Video: Cititor RFID AVR / Arduino cu cod UART în C: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:47
RFID este nebunia, găsită peste tot - de la sistemele de inventar la sistemele de identificare a insignelor. Dacă ați fost vreodată la un magazin universal și ați trecut prin acele lucruri cu aspect de detector de metale la punctele de intrare / ieșire, atunci ați văzut RFID. Există mai multe locuri pentru a găsi informații bune despre configurarea RFID, iar acest lucru instructiv se concentrează pe instalarea cititorului Parallax RFID (Serial TTL) pe un AVR, cu accent pe codul C necesar pentru citirea intrării seriale. Codul este în C și nu folosește nicio bibliotecă externă. De fapt, vorbește 2400 baud direct fără utilizarea unui UART, sincronizându-se la viteza baud a cititorului RFID și citind pinul digital la care este conectat. Excitat? Și eu.
Pasul 1: Obțineți bunurile
Veți avea nevoie de următoarea listă de piese:
- Cititor RFID (Parallax # 28140 39,99 USD)
- Etichetă RFID (Parallax # 32397 $ 0.99)
- Clona AVR sau Arduino (dacă utilizați un AVR stoc, veți avea nevoie și de un condensator max232, 5 x 1uF și un conector DE9)
- Pană de sudură fără sudură
Opțional
- Antet cu 4 poziții
- Sârmă
(și max232 etc. pentru comunicarea informațiilor despre etichetă) De asemenea, puteți conecta ecranul LCD preferat în loc să trimiteți date de etichetă prin RS232.
Pasul 2: Conectați piesele
Partea hardware a lucrurilor este destul de ușoară. În loc să îmi introduc cititorul RFID direct în panoul meu de calcul, am ales să fac un cablu rapid pentru a putea muta cititorul RFID puțin mai bine. Pentru asta, tocmai am tăiat 4 poziții dintr-o bandă de antet femelă pe care o întinsesem și am lipit pe trei fire. Banda electrică a completat conectorul ghetoului. Cititorul RFID are 4 conexiuni:
- Vcc
- PERMITE
- OUT
- Gnd
După cum probabil ați ghicit, conectați Vcc la + 5V și Gnd la masă. Deoarece cititorul RFID consumă atât de multă energie, puteți bate pinul ENABLE pentru a-l opri și porni la diferite intervale. Pur și simplu am ales să-l mențin. Deoarece este inversat, îl trageți LOW pentru al activa. Alternativ, îl puteți conecta la masă. L-am conectat la PIND3 pentru a-mi oferi opțiuni de activare / dezactivare dacă am decis. Pinul OUT este locul în care cititorul își trimite datele seriale după ce citește o etichetă. L-am conectat la PIND2. Notă, în Universul Parallax, roșu înseamnă a merge. Adică, un LED verde înseamnă că unitatea este inactivă și inactivă, în timp ce un LED roșu înseamnă că unitatea este activă. * ridică din umeri * Du-te la figură.
Pasul 3: Scrieți codul
Pentru a citi datele din cititorul RFID, trebuie să știți când a fost trimisă o etichetă, scoateți datele din portul serial, apoi trimiteți-le undeva.
Format de date RFID Reader
Cititorul RFID Parallax trimite date la un ritm glacial fix de 2400 baud. O etichetă RFID are 10 octeți. Pentru a permite detectarea / corectarea erorilor, deoarece cititorul ar putea fi deconectat de zgomotul aleatoriu, RFID-ul de 10 octeți este delimitat de o sentinelă de pornire și oprire. Sentinela de pornire este alimentarea liniei (0x0A), iar sentinela de oprire este returul transportului (0x0D). Arată așa:
[Start Sentinel | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 | Byte 7 | Byte 8 | Byte 9 | Byte 10 | Stop Sentinel]Acestea sunt cele trei etape principale.
Aflați când a fost trimisă o etichetă
Am folosit un Pin Change Interrupt pe AVR care notifică firmware-ul că s-a produs o modificare pe un pin monitorizat. Configurarea AVR pentru acest lucru este ușoară și necesită setarea semnalizatorului, indicarea MCU-ului care pin doriți să monitorizați și setarea bitului de întrerupere global. Configurați PCINT
BSET (PCICR, PCIE2); // registru control control întrerupere pin pcie2 BSET (PCMSK2, PCINT18); // activați întreruperea schimbării pinului pentru PCINT18 (PD2) BSET (SREG, 7); // Setați SREG I-bitScrieți rutina de servicii de întrerupere Doriți să vă mențineți ISR scurt, așa că în vectorul meu de întrerupere citesc întregul octet, bit cu bit, și stochez octetul într-o matrice globală de caractere volatile. Fac următoarele la fiecare întrerupere:
- Verificați pentru a vă asigura că sunt pe un pic de început
- Centrați sincronizarea pe impulsul mediu la 2400 baud (viteza cititorului RFID)
- Omiteți bitul de început și faceți o pauză până la mijlocul bitului următor
- Citiți fiecare bit într-un număr întreg nesemnat
- Când am 8 biți, puneți octetul într-o matrice de caractere
- Când am colectat 12 octeți, anunțați MCU că eticheta a fost citită pentru detectarea erorilor.
Am modificat codul SoftSerial de la Mikal Hart, care a modificat codul de la David Mellis pentru întârzierile determinate experimental în rutinele seriale.
Analizați ieșirea RS232
Rutina PCINT conține codul pentru citirea ieșirii RS232 din cititorul RFID. Când am obținut 12 octeți (RFID de 10 octeți plus sentinele) am setat bDataReady la 1 și las bucla principală să proceseze datele și să le afișeze.
// acesta este instrumentul de gestionare a întreruperii ISR (PCINT2_vect) {if (BCHK (PIND, RFID_IN)) // Bitul de pornire este redus; uint8_t bit = 0; TunedDelay (CENTER_DELAY); // Centrează pe bitul de start pentru (uint8_t x = 0; x <8; x ++) {TunedDelay (INTRABIT_DELAY); // săriți puțin, frate … dacă (BCHK (PIND, RFID_IN)) BSET (bit, x); altfel BCLR (bit, x); } TunedDelay (INTRABIT_DELAY); // skip stop bit RFID_tag [rxIdx] = bit; ++ rxIdx; if (rxIdx == 12) bDataReady = 1;}
Afișați eticheta dvs
În main (), în timpul buclei pentru (pentru totdeauna), verific dacă bDataReady a fost setat, semnalând că întreaga structură RFID a fost trimisă. Verific apoi dacă este o etichetă validă (adică caracterele de pornire și oprire sunt 0x0A și respectiv 0x0D) și, dacă da, îi trimit conexiunea RS232.
for (;;) {if (bDataReady) {#ifdef _DEBUG_ USART_tx_S ("Start byte:"); USART_tx_S (itoa (RFID_tag [0], & ibuff [0], 16)); ibuff [0] = 0; ibuff [1] = 0; USART_tx_S ("\ nStop octet:"); USART_tx_S (itoa (RFID_tag [11], & ibuff [0], 16)); # endif if (ValidTag ()) {USART_tx_S ("\ nRFID Tag:"); pentru (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; }}
Pasul 4: Cod și Adio
Această pagină conține un fișier zip cu codul relevant. A fost scris în AVR Studio 4.16. Dacă utilizați blocnotesul programatorului, eclipsa sau vi (sau altceva), va trebui să copiați un Makefile de încredere în director și să adăugați aceste fișiere la linia sursă. MCU de 16 MHz. Dacă rulați la o frecvență de ceas diferită, va trebui să determinați experimental întârzierile reglate pentru a se concentra pe impulsurile ratei de transmisie. Sper că acest lucru instructabil v-a ajutat într-un fel. Dacă aveți sugestii despre cum ar putea fi îmbunătățit, nu ezitați să mă anunțați!
Recomandat:
Cititor RFID bazat pe ESP32 cu afișaj tactil: 7 pași
Cititor RFID bazat pe ESP32 cu afișaj tactil: Pe această instrucțiune ușoară vă voi arăta cum să creați un cititor RFID simplu cu ieșire TFT pentru montare pe perete utilizând un modul ESP32 DEV KIT C, un card de citire pe bază de RC-522 și un kit AZ-Touch ESP. Puteți utiliza acest cititor pentru acces la ușă sau intrar alar
Încuietoare electrică a ușii cu scaner de amprentă și cititor RFID: 11 pași (cu imagini)
Încuietoare electrică cu scaner de amprentă digitală și cititor RFID: Proiectul a fost conceput pentru a evita necesitatea utilizării tastelor, pentru a ne atinge obiectivul am folosit un senzor optic de amprentă și un Arduino. Cu toate acestea, există persoane care au o amprentă ilizibilă, iar senzorul nu o va recunoaște. Apoi gândindu-mă la
Cititor Arduino RFID cu afișaj TFT: 7 pași
Cititor RFID Arduino cu afișaj TFT: Vă voi arăta în acest instructiv cum să proiectați un cititor RFID frumos cu afișaj TFT și pentru montare pe perete. Este foarte ușor să creați un cititor RFID frumos cu ieșire TFT pentru montare pe perete cu un Arduino MKR la alegere și Ar
Demo 4x4 al unei table de șah electronice / cu cititor Arduino Mega + RFID + senzori de efect Hall: 7 pași
Demo 4x4 al unei table de șah electronice / cu cititor Arduino Mega + RFID + senzori de efect Hall: Bună ziua, sunt Tahir Miriyev, absolvent al Universității Tehnice din Orientul Mijlociu, Ankara / Turcia. M-am specializat în matematică aplicată, dar mi-a plăcut întotdeauna să fac lucruri, mai ales atunci când a implicat unele lucrări manuale cu electronică, proiectare și programare
Cititor Arduino RFID UHF: 10 pași
Cititor Arduino RFID UHF: Scopul acestui instructabil este de a oferi un exemplu ușor de înțeles de interfață cu un microcontroler cu un cititor RFID UHF. Cititorul pe care îl folosim este Thinkify TR-265. Demonstrația constă din trei etichete UHF fiecare cu un ID unic