- Componente utilizate:
- Explicație de lucru:
- Descrierea circuitului:
- Instalarea wiringPi Library în Raspberry Pi:
- Explicație de programare:
Am folosit anterior RFID în multe dintre proiectele noastre RFID și am construit deja un sistem de prezență bazat pe RFID folosind 8051, aici vom construi un sistem de prezență bazat pe RFID folosind Raspberry Pi.
În acest proiect de sistem de prezență bazat pe RFID, vă vom explica că cum putem autoriza și număra prezența în mod automat utilizând carduri RFID. Tehnologia RFID (identificarea și detectarea frecvenței radio) este utilizată în mod obișnuit în școli, colegii, birouri și stații în diverse scopuri pentru a ține evidența automată a persoanelor. Aici vom număra prezența unei persoane autorizate utilizând RFID.
Dacă nu sunteți familiarizați cu Raspberry Pi, am creat o serie de tutoriale și proiecte raspberry pi, cu interfață cu toate componentele de bază și câteva proiecte simple pentru a începe, verificați.
Componente utilizate:
- Raspberry Pi (cu card SD pornit)
- Apasa butonul
- Buzzer
- 16x2 LCD
- Oala de 10k
- Rezistor 10K
- LED
- Rezistor 1k
- Placă de pâine
- Cititor RFID
- Putere 5 volți
- Etichete sau carduri RFID
- Cablu Ethernet
- Conectarea firelor
Cititor și etichete RFID:
RFID este un dispozitiv electronic care are două părți - una este RFID Reader și alta este etichetă RFID sau Card. Când punem eticheta RFID aproape de cititorul RFID, aceasta citește datele etichetei în serie. Eticheta RFID are un cod de 12 cifre într-o bobină. Acest RFID funcționează la o rată de transmisie de 9600 bps. RFID folosește electromagnet pentru a transfera date de la Reader la Tag sau Tag la Reader.
Explicație de lucru:
Aici Raspberry Pi 3 controlează întregul proces al acestui proiect (utilizatorul poate folosi orice placă Raspberry Pi). RFID Reader citește ID-ul cardului RFID, aceste date sunt primite de Raspberry Pi prin UART, apoi RPi validează cardul și afișează rezultatele pe ecranul LCD.
Când o persoană își pune eticheta RFID aproape de cititorul RFID pentru a scana, RFID citește datele etichetei și le trimite la Raspberry Pi. Apoi, Raspberry Pi citește numărul unic de identificare al acelei etichete RFID și apoi compară aceste date cu date sau informații predefinite. Dacă datele sunt potrivite cu date predefinite, atunci Raspberry Pi mărește prezența persoanei etichetei cu una și dacă nu este potrivită, atunci microcontrolerul afișează mesajul „Card nevalid” pe ecranul LCD și buzzerul sună continuu de ceva timp. Și aici am adăugat și un buton pentru a vedea numărul total. de participare a tuturor elevilor. Aici am luat 4 etichete RFID în care trei sunt folosite pentru a înregistra prezența a trei studenți și unul este folosit ca un card invalid.
Descrierea circuitului:
Diagrama circuitului pentru acest proiect de sistem de prezență Raspberry Pi este foarte simplă, care conține Raspberry Pi 3, cititor RFID, etichete RFID, buzzer, LED și LCD. Aici Raspberry Pi controlează procesul complet, cum ar fi Citirea datelor provenite de la Reader, compararea datelor cu datele predefinite, conducerea buzzerului, conducerea LED-ului de stare și trimiterea stării pe ecranul LCD. RFID Reader este folosit pentru a citi etichete RFID. Buzzerul este utilizat pentru indicații și este acționat de un tranzistor NPN încorporat. LCD-ul este utilizat pentru afișarea stării sau a mesajelor pe acesta.
Conexiunile sunt simple. LCD-ul este conectat cu Raspberry Pi în modul pe 4 biți. Pinurile RS, RW și EN ale LCD-ului sunt conectate direct la cablareaPi GPIO 11, gnd și 10. Și pinul de date sunt conectate la cablareaPi GPIO 6, 5, 4 și 1. Un pot de 10K este utilizat pentru a seta contrastul sau luminozitatea ecranului LCD. Buzzer-ul este conectat la pinul 7 GPIO de cablare Pi față de masă. Trei LED-uri sunt conectate pentru indicarea studenților cu cardul RFID respectiv. Și un LED este folosit pentru a arăta că sistemul este gata să scaneze cardul RFID. Un buton de apăsare este, de asemenea, conectat la cablareaPi GPIO pin 12 pentru a afișa numărul de prezențe. Cititorul RFID este conectat la pinul UART (cablarea pinului GPIO 16).
Instalarea wiringPi Library în Raspberry Pi:
Ca și în Python, importăm RPi.GPIO de import ca fișier de antet IO pentru a utiliza pinii GPIO ai Raspberry Pi, aici, în limbajul C, trebuie să folosim biblioteca wiringPi pentru a utiliza pinii GPIO în programul nostru C. O putem instala utilizând comenzile de mai jos una câte una, puteți rula această comandă de la Terminal sau de la un client SSH cum ar fi Putty (dacă utilizați Windows). Consultați tutorialul Noțiuni introductive despre Raspberry Pi pentru a afla mai multe despre gestionarea Raspberry Pi.
sudo apt-get install git-core sudo apt-get update sudo apt-get upgrade git clone git: //git.drogon.net/wiringPi cd wiringPi git pull origin cd wiringPi./build
Testați instalarea bibliotecii wiringPi, utilizați comenzile de mai jos:
gpio -v gpio readall
Explicație de programare:
Acum, mai întâi am inclus câteva biblioteci și am definit pinii pe care trebuie să îi folosim în acest cod.
#include
După aceasta, definiți câteva variabile și matrice pentru calcul și stocați valori și șiruri.
int sp; int count1 = 0, count2 = 0, count3 = 0; char ch; char rfid; int i = 0; char temp;
Apoi au fost scrise funcții pentru a executa întregul proces. Unele dintre ele sunt prezentate mai jos:
Având în vedere lcdcmd nule funcție este utilizată pentru a trimite comenzi pentru LCD
void lcdcmd (unsigned int ch) {int temp = 0x80; digitalWrite (D4, temp & ch << 3); digitalWrite (D5, temp & ch << 2); digitalWrite (D6, temp & ch << 1); digitalWrite (D7, temp & ch); digitalWrite (RS, LOW); digitalWrite (EN, HIGH);……………..
Având în vedere scriere nule funcție este utilizată pentru a trimite date la LCD.
scriere nulă (nesemnată int ch) {int temp = 0x80; digitalWrite (D4, temp & ch << 3); digitalWrite (D5, temp & ch << 2); digitalWrite (D6, temp & ch << 1); digitalWrite (D7, temp & ch); digitalWrite (RS, HIGH); digitalWrite (EN, HIGH);……………..
Funcția dată de void clear () este utilizată pentru a șterge ecranul LCD, void setCursor este utilizat pentru a seta poziția cursorului și a anula imprimarea pentru trimiterea șirului la LCD.
void clear () {lcdcmd (0x01); } void setCursor (int x, int y) {int set = 0; if (y == 0) set = 128 + x; if (y == 1) set = 192 + x; lcdcmd (set); } void print (char * str) {while (* str) {write (* str); str ++; }}
funcția de începere nulă este utilizată pentru a inițializa ecranul LCD în modul pe 4 biți.
void begin (int x, int y) {lcdcmd (0x02); lcdcmd (0x28); lcdcmd (0x06); lcdcmd (0x0e); lcdcmd (0x01); }
funcțiile void buzzer () și void wait () sunt folosite pentru bip sonor și pentru așteptarea plasării cardului din nou. Funcția void serialbegin este utilizată pentru inițializarea comunicării seriale.
void buzzer () {digitalWrite (buzz, HIGH); întârziere (1000); digitalWrite (buzz, LOW); } void wait () {digitalWrite (led5, LOW); întârziere (3000); } void serialbegin (int baud) {if ((sp = serialOpen ("/ dev / ttyS0", baud)) <0) {clear (); print („Nu se poate deschide”); setCursor (0,1); print ("port serial"); }}
În funcția de configurare nulă () inițiam toate GPIO-urile, LCD-ul și UART-ul serial.
void setup () {if (wiringPiSetup () == -1) {clear (); print („Nu se poate porni”); setCursor (0,1); print ("wiringPi"); } pinMode (led1, OUTPUT); pinMode (led2, OUTPUT);……………………
Dată fiind nule get_card () funcție este utilizată pentru a obține date de la cititor RFID.
În funcția void main () , am arătat câteva mesaje pe LCD și am comparat datele etichetei cu datele predefinite pentru a valida cardul cu codul de mai jos.
……………… if (strncmp (rfid, "0900711B6003", 12) == 0) {count1 ++; clar(); print ("Attd. Înregistrat"); setCursor (0,1); print („Studnet 1”); digitalWrite (led1, HIGH); buzzer (); digitalWrite (led1, LOW); aștepta(); } else if (strncmp (rfid, "090070FE6EE9", 12) == 0) {count2 ++; clar(); print ("Attd. Înregistrat"); setCursor (0,1);………………
În sfârșit, funcția nulă check_button () este utilizată pentru afișarea prezenței totale la apăsarea butonului.
void check_button () {if (digitalRead (in1) == 0) {digitalWrite (led5, LOW); clar(); setCursor (0,0); print ("std1 std2 std3");……………..
Verificați mai jos codul complet pentru acest sistem de prezență Raspberry Pi.