Znamo u uredima, trgovačkim centrima i na mnogim drugim mjestima gdje samo osoba s autorizacijskom karticom smije ulaziti u sobu. Ovi sustavi koriste RFID komunikacijski sustav. RFID se koristi u trgovačkim centrima za zaustavljanje krađe jer su proizvodi označeni RFID čipom, a kada osoba napusti zgradu s RFID čipom automatski se uključuje alarm. RFID oznaka dizajnirana je tako mala kao dio pijeska. RFID sustave za provjeru autentičnosti lako je dizajnirati, a jeftini su. Neke škole i fakulteti danas koriste RFID sustave pohađanja nastave.
U ovom ćemo projektu iz sigurnosnih razloga dizajnirati RFID sustav naplate cestarine. Dakle, ovaj sustav otvara vrata i omogućuje ljudima samo s ovlaštenim RFID oznakama. Ovlašteni ID-ovi držača oznaka programirani su na ATMEGA mikrokontroleru i samo oni koji imaju dozvolu mogu napustiti prostor ili ući u njega.
Komponente potrebne
Hardver: ATmega32 mikrokontroler, napajanje (5v), AVR-ISP programer, JHD_162ALCD (LCD modul 16x2), kondenzator 100uF (spojen preko napajanja), tipka, otpornik 10KΩ, kondenzator 100nF, LED (dva komada), EM-18 (dva komada) RFID modul čitača), IC upravljački program motora L293D, 5V DC motor.
Softver: Atmel studio 6.1, progisp ili flash magic.
Kružni dijagram i radno objašnjenje

U gore prikazanom krugu RFID sustava naplate cestarine, PORTA od ATMEGA32 spojena je na podatkovni priključak LCD-a. Ovdje bismo trebali zapamtiti da onemogućimo JTAG komunikaciju u PORTC-u u ATMEGA promjenom bajtova osigurača, ako želimo koristiti PORTC kao uobičajeni komunikacijski priključak. Na LCD zaslonu 16x2 postoji 16 pinova ako postoji pozadinsko svjetlo, a ako nema pozadinskog svjetla, bit će 14 pinova. Možemo napajati ili ostavljati igle za pozadinsko svjetlo. Sada u 14 pinova postoji 8 podatkovnih pinova (7-14 ili D0-D7), 2 pina za napajanje (1 i 2 ili VSS & VDD ili gnd & + 5v), treći pinski za kontrolu kontrasta (VEE-kontrolira koliko je debela trebaju biti prikazani znakovi), 3 upravljačke igle (RS & RW & E).
U krugu možete primijetiti da sam uzeo samo dvije upravljačke igle. To daje fleksibilnost boljeg razumijevanja. Kontrastni bit i READ / WRITE se ne koriste često, tako da se mogu kratko spojiti na masu. Ovo LCD postavlja u najveći kontrast i način čitanja. Samo trebamo kontrolirati ENABLE i RS igle da bi u skladu s tim slali znakove i podatke.
Priključci izrađeni za LCD prikazani su u nastavku:
PIN1 ili VSS na masu
PIN2 ili VDD ili VCC do + 5v snage
PIN3 ili VEE na zemlju (daje maksimalni kontrast najbolji za početnike)
PIN4 ili RS (registracijski odabir) na PD6 MCU-a
PIN5 ili RW (čitanje / pisanje) na masu (stavlja LCD u način čitanja olakšava komunikaciju za korisnika)
PIN6 ili E (Omogući) za PD5 mikrokontrolera
PIN7 ili D0 do PA0
PIN8 ili D1 do PA1
PIN9 ili D2 do PA2
PIN10 ili D3 do PA3
PIN11 ili D4 do PA4
PIN12 ili D5 do PA5
PIN13 ili D6 do PA6
PIN14 ili D7 do PA7
U krugu možete vidjeti da smo koristili 8-bitnu komunikaciju (D0-D7). Međutim, to nije obvezno i možemo koristiti 4-bitnu komunikaciju (D4-D7), ali s 4-bitnim komunikacijskim programom postaje pomalo složen, pa sam preferirao 8-bitnu komunikaciju.
Dakle, iz pukog promatranja gornje tablice spajamo 10 pinova LCD-a na kontroler u kojem su 8 pinova podatkovne i 2 pina za kontrolu.
Prije nego što krenemo naprijed, moramo razumjeti serijsku komunikaciju. Ovdje RFID modul serijski šalje podatke kontroloru. Ima i drugi način komunikacije, ali za jednostavnu komunikaciju odabiremo RS232. RS232 pin modula povezan je s RXD pinom ATMEGA-e.
Podaci koje šalje RFID modul idu kao:

Sada su za sučelje RFID modula potrebne sljedeće značajke:
1. RXD pin (značajka primanja podataka) kontrolera mora biti omogućen.
2. Budući da je komunikacija serijska, moramo znati kad god se primaju podaci, kako bismo mogli zaustaviti program dok se ne primi kompletan bajt. To se postiže omogućavanjem da podaci dobivaju potpuni prekid.
3. RFID šalje podatke kontroloru u 8-bitnom načinu. Dakle, dva znaka bit će poslana upravljaču odjednom. To je prikazano na gornjoj slici.
4. Na gornjoj slici nema bitova pariteta, jedan zaustavni bit u podacima koje modul šalje.
Gore navedene značajke postavljene su u registre kontrolera; razgovarat ćemo o njima ukratko,


CRVENO (RXEN): Ovaj bit predstavlja značajku primanja podataka. Ovaj bit mora biti postavljen za podatke iz modula koje će primati kontroler. Omogućuje i RXD pin regulatora.
SMEĐA (RXCIE): Ovaj bit mora biti postavljen za dobivanje prekida nakon uspješnog prijema podataka. Omogućavanjem ovog bita upoznajemo se odmah nakon primanja 8-bitnih podataka.
PINK (URSEL): Ovaj bit mora biti postavljen prije omogućavanja ostalih bitova u UCSRC. Nakon postavljanja, ostali potrebni bitovi u UCSRC, URSEL moraju se onemogućiti ili staviti na nulu.
ŽUTO (UCSZ0, UCSZ1, UCSZ2): Ova tri bita koriste se za odabir broja podatkovnih bitova koje primamo ili šaljemo u jednom potezu.

Budući da su podaci koje šalje RFID modul 8-bitni tip podataka, moramo postaviti UCSZ0, UCSZ1 na jedan, a UCSZ2 na nulu.
NARANČASTA (UMSEL): Ovaj je bit postavljen na temelju toga komunicira li sustav asinkrono (oba koriste drugačiji sat) ili sinkrono (oba koriste isti sat).

Budući da modul i kontroler koriste drugačiji sat, taj bit mora biti postavljen na nulu ili ostavljen sam jer su svi prema zadanim postavkama postavljeni na nulu.
ZELENO (UPM1, UPM0): Ova dva bita prilagođena su na temelju pariteta bitova koje koristimo u komunikaciji.

Budući da RFID modul šalje podatke bez pariteta, postavili smo i UPM1, UPM0 na nulu ili ih možemo ostaviti same jer su svi bitovi u bilo kojem registru prema zadanim postavkama postavljeni na nulu.
PLAVO (USBS): Ovaj bit služi za odabir broja zaustavnih bitova koje koristimo tijekom komunikacije.

Budući da RFID modul šalje podatke s jednim zaustavnim bitom, moramo samo ostaviti USBS bit na miru.
Sada napokon trebamo postaviti brzinu prijenosa, iz gornje slike je jasno da RFID modul šalje podatke kontroleru brzinom prijenosa od 9600 bps (bitova u sekundi).
Brzina prijenosa se postavlja u regulatoru odabirom odgovarajućeg UBRRH.

Vrijednost UBRRH odabire se brzinom prijenosa podataka i frekvencijom kristala CPU-a, tako da se vrijednost UBRR-a s unakrsnom referencom vidi kao '6', i tako je postavljena brzina prijenosa.

Sada je prikazano na slici, dva pina iz regulatora idu na L293D, koji je H-MOST koji se koristi za kontrolu brzine i smjera rotacije za istosmjerne motore male snage.

L293D je H-BRIDGE IC dizajniran za pogon istosmjernih motora male snage i prikazan je na slici, ovaj IC se sastoji od dva h-mosta i tako može pokretati dva istosmjerna motora. Tako se ovaj IC može koristiti za pogon robot-motora od signala mikrokontrolera.
Sada, kao što je već spomenuto, ovaj IC ima mogućnost promjene smjera rotacije istosmjernog motora. To se postiže upravljanjem razinama napona na INPUT1 i INPUT2.
|
Omogući prikvačivanje |
Ulazni pin 1 |
Ulazni pin 2 |
Smjer motora |
|
Visoko |
Niska |
Visoko |
Skrenuti desno |
|
Visoko |
Visoko |
Niska |
Skrenite lijevo |
|
Visoko |
Niska |
Niska |
Stop |
|
Visoko |
Visoko |
Visoko |
Stop |
Dakle, kao što je prikazano u gornjoj tablici, za okretanje u smjeru kazaljke na satu 2A treba biti visoka, a 1A niska. Slično tome, u smjeru suprotnom od kazaljke na satu 1A treba biti visok, a 2A nizak.
Kad god se ovlaštena kartica približi modulu, motor se programira da se sekundu pomiče u smjeru kazaljke na satu, pokazujući da se vrata za naplatu otvaraju nakon sekunde kada se vrate, govoreći da je vrata za naplatu zatvorena. Rad naplatne postaje najbolje je objasniti u koraku po koraku navedenom u nastavku.
Objašnjenje programiranja
Ispod je objašnjenje retka za kôd RFID sustava naplate cestarine. Koncept i rad ovog projekta možete razumjeti čitajući donji kod. Da biste preuzeli ili kopirali, cjeloviti kôd možete pronaći na dnu stranice.
#include // zaglavlje kako bi se omogućila kontrola protoka podataka nad iglama
#define F_CPU 1000000 // pripojena kristalna frekvencija kontrolera
#include
#define E 5 // davanje naziva „omogućiti” na 5 th pin PORTD, jer je spojen na LCD omogućiti pin
#define RS 6 // dajući naziv „registerselection” do 6 th pin PORTD, jer je spojen na pin LCD RS
void send_a_command (nepotpisana naredba char);
void send_a_character (nepotpisani znak znaka);
poništi string_a_string (char * string_of_characters);
int main (void)
{
DDRA = 0xFF; // stavljanje porta kao izlaznih pinova
DDRD = 0b11111110;
_delay_ms (50); // davanje kašnjenja od 50 ms
DDRB = 0b11110000; // Uzimanje nekih portB pinova kao ulaza.
UCSRB - = (1 <
UCSRC - = (1 <
UCSRC & = ~ (1 <
UBRRH & = ~ (1 <
UBRRL = 6; // postavljanje brzine prijenosa // Sljedeće sadrži ID oznaka, one se moraju mijenjati za različite oznake. Moraju se ažurirati da bi projekt mogao raditi
/ * Nakon izbacivanja programa u kontroler morate uzeti kartice koje moraju biti autorizirane i dobiti ID oznake. Dobivaju se postavljanjem oznake blizu RFID modula i ID će se prikazati na zaslonu. Nakon dobivanja ID-ova, program se mora ažurirati zamjenom donjih ID brojeva novim ID brojevima.
|
char ADMIT = {{(0x97), (0xa1), (0x90), (0x92)}, {(0x97), (0xa1), (0x90), (0x93)}, {(0x97), (0xa1), (0x90), (0x94)}, {(0x97), (0xa1), (0x90), (0x95)}, {(0x97), (0xa1), (0x90), (0x96)}}; |
Sada gore odobravamo samo pet karata, koje se mogu promijeniti u bilo koji broj.
Na primjer, uzmite u obzir da je zadani program izbačen u kontroler, nabavite kartice koje bi trebale biti autorizirane. Postavite jedan za drugim blizu modula, za svaki ćete dobiti ID kao xxxxxxxx (907a4F87), Ako imamo 7 oznaka, imamo 7 osmerobitnih ID-a. * /
|
// sada za sedam karata ide kao // char ADMIT = {{(0x90), (0x7a), (0x4F), (0x87)},; // dodjeljivanje memorije za prikaz ID-a koji šalje modul int i = 0; int glas = 0; int k = 0; send_a_command (0x01); // Očisti zaslon 0x01 = 00000001 _zakašnjenje_ms (50); send_a_command (0x38); // kažemo lcd-u da koristimo 8-bitni način naredbi / podataka _zakašnjenje_ms (50); send_a_command (0b00001111); // LCD ZASLON UKLJUČEN i indikator treperi char MEM; // dodjeljivanje memorije za spremanje kompletnog ID-a oznake send_a_string ("RFID BROJ"); // slanje niza send_a_ naredba (0x80 + 0x40 + 0); // premještanje kursora u drugi redak dok (1) { while (! (UCSRA & (1 <
{ } TAČKA = UDR; // UDR pohranjuje primljene osmobitne podatke i uzima se u cijeli broj. MEM = KONTA; // prva dva znaka se ažuriraju u memoriju itoa (COUNTA, SHOWA, 16); // naredba za stavljanje varijabilnog broja u LCD (broj varijable, koji znak koji treba zamijeniti, koja je baza varijabilna (deset ovdje jer brojimo u base10)) send_a_string (SHOWA); // kazivanje zaslona da pokaže karakter (zamijenjen promjenljivim brojem) druge osobe nakon postavljanja kursora na LCD while (! (UCSRA & (1 <
{ } TAČKA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = KONTA; // treći i četvrti znak se ažuriraju u memoriju while (! (UCSRA & (1 <
{ } TAČKA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // peti i šesti znak se ažuriraju u memoriju while (! (UCSRA & (1 <
{ } TAČKA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // sedmi i osam znakova ažuriraju se u memoriju send_a_string (""); send_a_ naredba (0x80 + 0x40 + 0); UCSRB & = ~ (1 <
za (i = 0; i <5; i ++) { ako je ((MEM == DOPUSTITI) & (MEM == DOPUSTITI) & (MEM == DOPUSTITI) & (MEM == DOPUSTITI)) {// provjera autorizacije kupujem uspoređujući dva znaka odjednom s likovima u memoriji PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); // kašnjenje _zakašnjenje_ms (220); _zakašnjenje_ms (220); _zakašnjenje_ms (220); _zakašnjenje_ms (220); _zakašnjenje_ms (220); PORTB - = (1 <
PORTB & = ~ (1 <
_zakašnjenje_ms (220); _zakašnjenje_ms (220); _zakašnjenje_ms (220); _zakašnjenje_ms (220); _zakašnjenje_ms (220); _zakašnjenje_ms (220); PORTB & = ~ (1 <
PORTB - = (1 <
} } UCSRB - = (1 <
} } void send_a_command (nepotpisana naredba char) { PORTA = naredba; PORTD & = ~ (1 <
PORTD - = 1 <
_zakašnjenje_ms (50); PORTD & = ~ 1 <
PORTA = 0; } poništi send_a_character (nepotpisani znak znaka) { PORTA = lik; PORTD - = 1 <
PORTD - = 1 <
_zakašnjenje_ms (50); PORTD & = ~ 1 <
PORTA = 0; } poništi string_a_string (char * string_of_characters) { while (* niz_znaka> 0) { send_a_character (* string_of_characters ++); } } |
