Poznáme v kanceláriách, nákupných centrách a na mnohých ďalších miestach, kde má do miestnosti vstup iba osoba s autorizačnou kartou. Tieto systémy využívajú komunikačný systém RFID. RFID sa používa v nákupných centrách na zastavenie krádeží, pretože výrobky sú označené čipom RFID a keď osoba opustí budovu s čipom RFID, automaticky sa aktivuje alarm. RFID štítok je navrhnutý tak malý, ako súčasť piesku. RFID autentifikačné systémy sa dajú ľahko navrhnúť a sú lacné. Niektoré školy a vysoké školy v súčasnosti používajú dochádzkové systémy založené na RFID.
V tomto projekte navrhneme z bezpečnostných dôvodov systém výberu mýta založený na RFID. Tento systém teda otvára brány a umožňuje ľuďom iba autorizované štítky RFID. Identifikátory držiteľov autorizovaných značiek sú naprogramované v mikrokontroléri ATMEGA a iba tí držitelia majú povolené opustiť alebo vstúpiť do areálu.
Súčasti sú povinné
Hardvér: mikrokontrolér ATmega32, napájací zdroj (5 V), programátor AVR-ISP, JHD_162ALCD (16x2 LCD modul), kondenzátor 100uF (pripojený cez napájací zdroj), tlačidlo, rezistor 10KΩ, kondenzátor 100nF, LED (dva kusy), EM-18 (Modul čítačky RFID), integrovaný obvod vodiča L293D, motor 5V ss.
Softvér: Atmel studio 6.1, progisp alebo flash magic.
Schéma zapojenia a pracovné vysvetlenie
V obvode systému výberu mýta RFID, ktorý je zobrazený vyššie, je PORTA z ATMEGA32 pripojená k dátovému portu LCD. Tu by sme mali pamätať na deaktiváciu komunikácie JTAG v PORTC na ATMEGA zmenou bajtov poistky, ak chceme používať PORTC ako normálny komunikačný port. Na 16x2 LCD displeji je 16 pinov, ak je podsvietenie, ak nie je podsvietenie, bude 14 pinov. Môžeme napájať alebo nechať kolíky podsvietenia. Teraz v 14 kolíkoch je 8 dátových kolíkov (7-14 alebo D0-D7), 2 kolíky napájacieho zdroja (1 a 2 alebo VSS a VDD alebo gnd a + 5v), 3. kolík na kontrolu kontrastu (VEE riadi, aká silná je by mali byť zobrazené znaky), 3 ovládacie kolíky (RS & RW & E).
V obvode môžete pozorovať, že som vzal iba dva ovládacie piny. To dáva flexibilitu lepšieho porozumenia. Kontrastný bit a READ / WRITE sa často nepoužívajú, aby ich bolo možné skratovať na zem. Toto nastavuje LCD do najvyššieho kontrastu a režimu čítania. Potrebujeme iba ovládať piny ENABLE a RS, aby sme mohli zodpovedajúcim spôsobom odosielať znaky a údaje.
Pripojenia, ktoré sú vytvorené pre LCD, sú uvedené nižšie:
PIN1 alebo VSS na zem
PIN2 alebo VDD alebo VCC na napájanie + 5 V.
PIN3 alebo VEE na zem (poskytuje maximálny kontrast najlepšie pre začiatočníkov)
PIN4 alebo RS (výber registra) na PD6 MCU
PIN5 alebo RW (čítanie / zápis) na zem (prepnutie LCD do režimu čítania uľahčuje komunikáciu pre používateľa)
PIN6 alebo E (povoliť) na PD5 mikrokontroléra
PIN7 alebo D0 až PA0
PIN8 alebo D1 až PA1
PIN9 alebo D2 až PA2
PIN10 alebo D3 až PA3
PIN11 alebo D4 až PA4
PIN12 alebo D5 až PA5
PIN13 alebo D6 až PA6
PIN14 alebo D7 až PA7
V obvode môžete vidieť, že sme použili 8-bitovú komunikáciu (D0-D7). To však nie je povinné a môžeme použiť 4-bitovú komunikáciu (D4-D7), ale so 4-bitovým komunikačným programom sa stáva trochu zložitejšou, takže som uprednostnil 8-bitovú komunikáciu.
Takže iba z pozorovania vyššie uvedenej tabuľky pripájame 10 pinov LCD k ovládaču, v ktorom 8 pinov sú dátové piny a 2 piny pre riadenie.
Predtým, ako napredujeme, musíme pochopiť sériovú komunikáciu. Tu modul RFID odosiela dáta do radiča sériovo. Má iný spôsob komunikácie, ale pre ľahkú komunikáciu sme vybrali RS232. Pin RS232 modulu je pripojený k RXD pinu ATMEGA.
Údaje odoslané modulom RFID idú ako:
Teraz sú pre rozhranie modulu RFID potrebné tieto funkcie:
1. Musí byť povolený pin RXD (funkcia príjmu dát) radiča.
2. Pretože komunikácia je sériová, musíme to vedieť vždy, keď je prijatý dátový bye, aby sme mohli program zastaviť, kým nedostaneme úplný bajt. To sa deje povolením úplného prerušenia prijímania údajov.
3. RFID odosiela údaje do radiča v 8bitovom režime. Takže do radiča budú naraz odoslané dva znaky. To je znázornené na obrázku vyššie.
4. Z vyššie uvedeného obrázku nie sú žiadne paritné bity, jeden stop bit v dátach odosielaných modulom.
Vyššie uvedené funkcie sú nastavené v registroch radiča; budeme o nich krátko diskutovať,
ČERVENÉ (RXEN): Tento bit predstavuje funkciu príjmu dát. Tento bit musí byť nastavený pre dáta z modulu, ktoré má prijímať kontrolér. Umožňuje tiež pin RXD radiča.
BROWN (RXCIE): Tento bit musí byť nastavený na získanie prerušenia po úspešnom prijatí dát. Povolením tohto bitu spoznáme bezprostredne po 8-bitovom príjme údajov.
PINK (URSEL): Tento bit musí byť nastavený pred povolením ďalších bitov v UCSRC. Po nastavení ďalších potrebných bitov v UCSRC musí byť URSEL deaktivovaný alebo vynulovaný.
ŽLTÁ (UCSZ0, UCSZ1, UCSZ2): Tieto tri bity sa používajú na výber počtu dátových bitov, ktoré prijímame alebo odosielame naraz.
Pretože dáta zasielané RFID modulom sú 8bitový dátový typ, musíme nastaviť UCSZ0, UCSZ1 na jednu a UCSZ2 na nulu.
ORANŽOVÁ (UMSEL): Tento bit je nastavený na základe toho, či systém komunikuje asynchrónne (obe používajú odlišné hodiny) alebo synchrónne (obe používajú rovnaké hodiny).
Pretože modul a kontrolér používajú odlišné hodiny, musí byť tento bit nastavený na nulu alebo ponechaný sám, pretože všetky sú predvolene nastavené na nulu.
ZELENÁ (UPM1, UPM0): Tieto dva bity sú upravené na základe bitovej parity, ktorú používame pri komunikácii.
Pretože RFID modul odosiela dáta bez parity, nastavili sme UPM1, UPM0 na nulu alebo ich môžeme nechať osamote, pretože všetky bity v ľubovoľných registroch sú štandardne nastavené na nulu.
MODRÁ (USBS): Tento bit sa používa na výber počtu stop bitov, ktoré používame počas komunikácie.
Pretože RFID modul odosiela dáta s jedným stop bitom, musíme nechať bit USBS na pokoji.
Teraz musíme konečne nastaviť prenosovú rýchlosť, z obrázku vyššie je zrejmé, že modul RFID odosiela dáta do radiča s prenosovou rýchlosťou 9600 bps (bitov za sekundu).
Prenosová rýchlosť sa nastavuje v ovládači výberom vhodnej UBRRH.
Hodnota UBRRH sa vyberá pomocou krížovej prenosovej rýchlosti a kryštalickej frekvencie CPU, takže pri krížovom odkaze sa hodnota UBRR považuje za „6“, a tak sa nastavuje prenosová rýchlosť.
Teraz, ako je znázornené na obrázku, dva piny z ovládača smerujú k L293D, čo je H-BRIDGE používaný na riadenie rýchlosti a smeru otáčania pre jednosmerné motory s nízkym výkonom.
L293D je integrovaný obvod H-BRIDGE určený na pohon jednosmerných motorov s nízkym výkonom a je znázornený na obrázku. Tento integrovaný obvod pozostáva z dvoch mostíkov typu h, takže môže poháňať dva jednosmerné motory. Tento IC možno teda použiť na pohon robotických motorov zo signálov mikrokontroléra.
Ako už bolo uvedené predtým, tento IC má schopnosť meniť smer otáčania jednosmerného motora. To sa dosiahne riadením úrovní napätia na INPUT1 a INPUT2.
Povoliť pripnutie |
Vstupný pin 1 |
Vstupný pin 2 |
Smer motora |
Vysoký |
Nízka |
Vysoký |
Odbočiť doprava |
Vysoký |
Vysoký |
Nízka |
Odbočiť vľavo |
Vysoký |
Nízka |
Nízka |
Prestaň |
Vysoký |
Vysoký |
Vysoký |
Prestaň |
Ako je uvedené v predchádzajúcej tabuľke, pre pravotočivé otáčanie by mala byť 2A vysoká a 1A nízka. Podobne pre proti smeru hodinových ručičiek by mala byť 1A vysoká a 2A nízka.
Kedykoľvek sa k modulu priblíži autorizovaná karta, motor je naprogramovaný tak, aby sa na sekundu pohyboval v smere hodinových ručičiek, aby sa mýtna brána otvorila po chvíli, keď sa vráti späť, čo znamená, že mýtna brána je zatvorená. Fungovanie mýtneho námestia je najlepšie vysvetliť krok za krokom v kóde C uvedenom nižšie.
Vysvetlenie programovania
Nižšie je uvedené vysvetlenie riadku ku kódu systému RFID na výber mýta. Koncepcii a fungovaniu tohto projektu môžete porozumieť prečítaním nižšie uvedeného kódu. Celý kód nájdete v spodnej časti stránky.
#include // header to allow data flow control over pins
#define F_CPU 1000000 // pripojená kryštálová frekvencia radiča
#include
#define E 5 // dávať meno "povoliť" na 5 th pin PORTD, pretože je spojený s LCD umožniť pin
#define RS 6 // dávať meno "registerselection" až 6. ročník čap PORTD, pretože je spojený s LCD RS pin
void send_a_command (nepodpísaný príkaz char);
void send_a_character (znak bez znaku);
void send_a_string (char * retazec_charakterov);
int main (void)
{
DDRA = 0xFF; // uvedenie porty ako výstupných kolíkov
DDRD = 0b11111110;
_delay_ms (50); // oneskorenie 50ms
DDRB = 0b11110000; // Ako vstup si vezmeme niektoré piny portB.
UCSRB - = (1 <
UCSRC - = (1 <
UCSRC & = ~ (1 <
UBRRH & = ~ (1 <
UBRRL = 6; // nastavenie prenosovej rýchlosti // Nasledujúci text obsahuje ID značiek, ktoré je potrebné pre rôzne značky zmeniť. Tieto musia byť aktualizované, aby projekt fungoval
/ * Po vyhodení programu v ovládači musíte vziať karty, ktoré musia byť autorizované, a získať ID štítkov. Získajú sa umiestnením štítku blízko modulu RFID a ID sa zobrazí na obrazovke. Po získaní identifikačných údajov musí byť program aktualizovaný nahradením nižšie uvedených identifikačných čísel novými identifikačnými číslami.
char ADMIT = {{(0x97), (0xa1), (0x90), (0x92)}, {(0x97), (0xa1), (0x90), (0x93)}, {(0x97), (0xa1), (0x90), (0x94)}, {(0x97), (0xa1), (0x90), (0x95)}, {(0x97), (0xa1), (0x90), (0x96)}}; |
Teraz vyššie autorizujeme iba päť kariet, ktoré je možné zmeniť na ľubovoľné číslo.
Napríklad zvážte, že predvolený program je uložený v radiči, získajte karty, ktoré by mali byť autorizované. Umiestnite jeden za druhým blízko modulu, dostanete ID každého z nich ako xxxxxxxx (907a4F87), Ak máme 7 značiek, budeme mať 7 osembitových ID. * /
// teraz pre sedem kariet to ide ako // char ADMIT = {{(0x90), (0x7a), (0x4F), (0x87)},; // pridelenie pamäte na zobrazenie ID odoslaného modulom int i = 0; int hlasovanie = 0; int k = 0; send_a_command (0x01); // Vymazať obrazovku 0x01 = 00000001 _delay_ms (50); send_a_command (0x38); // hovorí lcd, že používame 8bitový príkazový / dátový režim _delay_ms (50); send_a_command (0b00001111); // LCD OBRAZOVKA ZAPNUTÁ a kurzor bliká char MEM; // pridelenie pamäte na uloženie kompletného ID tagu send_a_string ("ČÍSLO RFID"); // odosielací reťazec send_a_command (0x80 + 0x40 + 0); // presunutie kurzora do druhého riadku zatiaľ čo (1) { while (! (UCSRA & (1 <
{ } COUNTA = UDR; // UDR ukladá prijaté osembitové dáta a berie sa do celého čísla. MEM = COUNTA; // prvé dva znaky sa aktualizujú do pamäte itoa (COUNTA, SHOWA, 16); // príkaz na vloženie variabilného čísla na LCD (variabilné číslo, v ktorom znaku sa má nahradiť, ktorá báza je premenná (tu desať, keďže počítame číslo v base10)) send_a_string (SHOWA); // informovanie displeja, aby zobrazil znak (nahradený variabilným počtom) druhej osoby po umiestnení kurzora na LCD while (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // tretí a štvrtý znak sa aktualizujú do pamäte while (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // piaty a šiesty znak sa aktualizujú do pamäte while (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // siedmy a osem znakov sa aktualizujú do pamäte send_a_string (""); send_a_command (0x80 + 0x40 + 0); UCSRB & = ~ (1 <
pre (i = 0; i <5; i ++) { if ((MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT)) {// kontrola nákupu autorizácie porovnaním dvoch znakov naraz so znakmi v pamäti PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); // oneskorenie _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); _delay_ms (220); PORTB & = ~ (1 <
PORTB - = (1 <
} } UCSRB - = (1 <
} } void send_a_command (nepodpísaný príkaz char) { PORTA = príkaz; PORTD & = ~ (1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
PORTA = 0; } void send_a_character (znak bez znaku) { PORTA = znak; PORTD - = 1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
PORTA = 0; } void send_a_string (char * string_of_character) { while (* string_of_character> 0) { send_a_character (* string_of_character ++); } } |