Mēs zinām birojos, tirdzniecības centros un daudzās citās vietās, kur telpā drīkst ienākt tikai persona, kurai ir autorizācijas karte. Šīs sistēmas izmanto RFID sakaru sistēmu. RFID tiek izmantots tirdzniecības centros, lai apturētu zādzību, jo produkti ir marķēti ar RFID mikroshēmu, un, kad cilvēks atstāj ēku ar RFID mikroshēmu, automātiski tiek iedarbināta trauksme. RFID tags ir veidots tik mazs kā smilšu daļa. RFID autentifikācijas sistēmas ir viegli projektējamas un to izmaksas ir lētas. Dažās skolās un koledžās mūsdienās tiek izmantotas RFID apmeklēšanas sistēmas.
Šajā projektā mēs izstrādāsim RFID balstītu nodevu iekasēšanas sistēmu drošības nolūkos. Tātad šī sistēma atver vārtus un ļauj cilvēkiem atrasties tikai ar atļautajiem RFID tagiem. Atļauto tagu turētāja ID tiek ieprogrammēti ATMEGA mikrokontrollerī, un tikai tiem īpašniekiem ir atļauts atstāt vai iekļūt telpās.
Nepieciešamās sastāvdaļas
Aparatūra: mikrokontrolleris ATmega32, barošanas avots (5v), AVR-ISP programmētājs, JHD_162ALCD (16x2 LCD modulis), 100uF kondensators (savienots ar barošanas bloku), poga, 10KΩ rezistors, 100nF kondensators, LED (divi gabali), EM-18 (RFID lasītāja modulis), L293D motora draivera IC, 5V līdzstrāvas motors.
Programmatūra: Atmel studio 6.1, progisp vai flash magic.
Shēmas shēma un darba skaidrojums
Iepriekš parādītajā RFID nodevu iekasēšanas sistēmas ķēdē ATMEGA32 PORTA ir savienota ar LCD datu portu. Šeit mums vajadzētu atcerēties atspējot JTAG komunikāciju PORTC uz ATMEGA, mainot drošinātāju baitus, ja mēs vēlamies izmantot PORTC kā parastu sakaru portu. 16x2 LCD ekrānā ir 16 tapas, ja ir aizmugures apgaismojums, ja nav aizmugures apgaismojuma, būs 14 tapas. Mēs varam darbināt vai atstāt aizmugures gaismas tapas. Tagad 14 tapas ir 8 datu tapas (7-14 vai D0-D7), 2 el piegādes tapas (1 un 2 vai VSS un VDD vai GND & + 5v), 3 rd tapa kontrasta kontroles (Vee-kontrolēm, cik biezu jāparāda rakstzīmes), 3 vadības tapas (RS & RW & E).
Ķēdē jūs varat novērot, ka esmu paņēmis tikai divus vadības tapas. Tas dod iespēju labāk izprast. Kontrasta bits un READ / WRITE netiek bieži lietoti, tāpēc tos var saīsināt. Tas nodrošina LCD kontrasta un lasīšanas režīmu. Mums vienkārši jākontrolē ENABLE un RS tapas, lai atbilstoši nosūtītu rakstzīmes un datus.
LCD savienojumi ir izveidoti zemāk:
PIN1 vai VSS uz zemi
PIN2 vai VDD vai VCC līdz + 5v jaudai
PIN3 vai VEE uz zemes (iesācējam vislabāk nodrošina maksimālu kontrastu)
PIN4 vai RS (Reģistrēt atlasi) uz MCU PD6
PIN5 vai RW (lasīšana / rakstīšana) uz zemi (LCD nodošana lasīšanas režīmā atvieglo saziņu lietotājam)
PIN6 vai E (iespējot) līdz mikrokontrollera PD5
PIN7 vai D0 līdz PA0
PIN8 vai D1 līdz PA1
PIN9 vai D2 - PA2
PIN10 vai D3 - PA3
PIN11 vai D4 - PA4
PIN12 vai D5 - PA5
PIN13 vai D6 līdz PA6
PIN14 vai D7 līdz PA7
Ķēdē var redzēt, ka esam izmantojuši 8 bitu sakarus (D0-D7). Tomēr tas nav obligāti, un mēs varam izmantot 4 bitu sakarus (D4-D7), bet ar 4 bitu sakaru programma kļūst mazliet sarežģīta, tāpēc es izvēlējos 8 bitu komunikāciju.
Tātad, tikai novērojot iepriekšminēto tabulu, mēs savienojam 10 LCD tapas ar kontrolieri, kurā 8 tapas ir datu tapas un 2 tapas kontrolei.
Pirms virzīties uz priekšu, mums ir jāsaprot sērijveida sakari. RFID modulis šeit nosūta datus kontrolierim sērijveidā. Tam ir cits saziņas veids, taču ērtai saziņai mēs izvēlamies RS232. Moduļa RS232 tapa ir savienota ar ATMEGA RXD tapu.
RFID moduļa sūtītie dati notiek šādi:
Tagad RFID moduļa saskarnei ir nepieciešamas šādas funkcijas:
1. Jāaktivizē kontrollera RXD tapa (datu saņemšanas funkcija).
2. Tā kā saziņa ir sērijveida, mums jāzina ikreiz, kad tiek saņemts datu atvadīšanās, lai mēs varētu pārtraukt programmu, līdz tiek saņemts pilnīgs baits. Tas tiek darīts, ļaujot datiem saņemt pilnīgu pārtraukumu.
3. RFID nosūta datus kontrolierim 8 bitu režīmā. Tātad kontrolierim vienlaikus tiks nosūtītas divas rakstzīmes. Tas parādīts augšējā attēlā.
4. No augšējā attēla moduļa sūtītajos datos nav paritātes bitu, viena pieturas bita.
Iepriekš minētās funkcijas ir iestatītas kontrolieru reģistros; mēs tos īsi apspriedīsim,
RED (RXEN): Šis bits apzīmē datu saņemšanas funkciju. Šis bits ir jāiestata, lai dati no moduļa tiktu saņemti kontrolierim. Tas arī ļauj kontroliera RXD tapu.
BROWN (RXCIE): Šis bits ir jāiestata, lai pēc veiksmīgas datu saņemšanas tiktu pārtraukts. Iespējojot šo bitu, mēs uzzinām uzreiz pēc 8 bitu datu saņemšanas.
PINK (URSEL): Šis bits ir jāiestata pirms citu bitu iespējošanas UCSRC. Pēc iestatīšanas citi nepieciešamie biti UCSRC, URSEL ir jāatspējo vai jānovieto uz nulli.
DZELTENS (UCSZ0, UCSZ1, UCSZ2): Šie trīs biti tiek izmantoti, lai atlasītu saņemamo vai nosūtīto datu bitu skaitu vienā piegājienā.
Tā kā RFID moduļa sūtītie dati ir 8 bitu datu tipi, mums UCSZ0, UCSZ1 ir jāiestata uz vienu un UCSZ2 uz nulli.
ORANGE (UMSEL): Šis bits tiek iestatīts atkarībā no tā, vai sistēma sazinās asinhroni (abi izmanto atšķirīgu pulksteni) vai sinhroni (abi izmanto vienu un to pašu pulksteni).
Tā kā modulis un kontrolieris izmanto atšķirīgu pulksteni, šis bits ir jāiestata uz nulli vai jāatstāj atsevišķi, jo pēc noklusējuma tie visi ir iestatīti uz nulli.
ZAĻŠ (UPM1, UPM0): Šie divi biti tiek pielāgoti, pamatojoties uz bitu paritāti, kuru izmantojam saziņā.
Tā kā RFID modulis sūta datus bez paritātes, mēs esam iestatījuši gan UPM1, gan UPM0 uz nulli, vai arī tos var atstāt atsevišķi, jo visi biti visos reģistros pēc noklusējuma ir iestatīti uz nulli.
ZILA (USBS): Šis bits tiek izmantots, lai izvēlētos pieturas bitu skaitu, ko izmantojam saziņas laikā.
Tā kā RFID modulis sūta datus ar vienu pieturas bitu, mums vienkārši jāatstāj USBS bits atsevišķi.
Tagad beidzot mums jāiestata datu pārraides ātrums, no iepriekš redzamā attēla ir skaidrs, ka RFID modulis kontrolierim nosūta datus ar 9600 bitu (bitu sekundē) datu pārraides ātrumu.
Pārraides ātrums tiek iestatīts kontrolierī, izvēloties atbilstošo UBRRH.
UBRRH vērtību izvēlas, savstarpēji atsaucoties uz datu pārraides ātrumu un procesora kristāla frekvenci. Tātad, izmantojot savstarpēju atsauci, UBRR vērtība tiek uzskatīta par “6”, un tāpēc tiek iestatīts pārraides ātrums.
Kā parādīts attēlā, divas kontroliera tapas nonāk L293D, kas ir H-TILTS, ko izmanto, lai kontrolētu mazjaudas līdzstrāvas motoru ātrumu un rotācijas virzienu.
L293D ir H-BRIDGE IC, kas paredzēts mazjaudas līdzstrāvas motoru vadīšanai, un parādīts attēlā. Šis IC sastāv no diviem h tiltiem, un tādējādi tas var vadīt divus līdzstrāvas motorus. Tātad šo IC var izmantot, lai vadītu robotu motorus no mikrokontrolleru signāliem.
Kā jau iepriekš tika apspriests, šai IC ir iespēja mainīt līdzstrāvas motora rotācijas virzienu. To panāk, kontrolējot sprieguma līmeņus INPUT1 un INPUT2.
Iespējot piespraudi |
1. ievades tapa |
2. ievades tapa |
Motora virziens |
Augsts |
Zems |
Augsts |
Nogriezieties pa labi |
Augsts |
Augsts |
Zems |
Pagriezies pa kreisi |
Augsts |
Zems |
Zems |
Apstājies |
Augsts |
Augsts |
Augsts |
Apstājies |
Tātad, kā parādīts iepriekšējā tabulā, pulksteņa gudrai rotācijai 2A jābūt augstai un 1A zemai. Līdzīgi pretēji pulksteņrādītāja virzienam 1A jābūt augstam un 2A zemam.
Ikreiz, kad moduļa tuvumā tiek nogādāta autorizēta karte, motors tiek ieprogrammēts uz sekundi kustēties pulksteņrādītāja kustības virzienā, lai parādītu, ka nodevas vārti pēc sekundes tiek atvērti, sakot, ka maksas vārti ir aizvērti. Nodevas laukuma darbību vislabāk var izskaidrot zemāk norādītā C koda soli pa solim.
Programmēšanas skaidrojums
Zemāk ir RFID Toll Collection sistēmas koda skaidrojums no rindas līdz rindai. Jūs varat saprast šī projekta koncepciju un darbību, izlasot zemāk esošo kodu. Lai lejupielādētu vai kopētu, pilnu kodu varat atrast lapas apakšdaļā.
#include // header, lai iespējotu datu plūsmas kontroli pār tapām
#define F_CPU 1000000 // pievienota stāsta kontroliera kristāla frekvence
# iekļaut
#define E 5 // norādot vārdu "ļauj" 5 th pin PORTD, jo tas ir saistīts ar LCD ļautu pin
#define RS 6 // piešķirot nosaukumu "registerselection", 6 th pin PORTD, jo tas ir saistīts ar LCD RS pin
void send_a_command (neparakstīta char komanda);
void send_a_character (neparakstīta rakstzīme);
void send_a_string (char * string_of_characters);
int main (anulēts)
{
DDRA = 0xFF; // porta ievietošana kā izvades tapas
DDRD = 0b11111110;
_delay_ms (50); // dodot 50ms kavēšanos
DDRB = 0b11110000; // Paņemot dažus portB tapas kā ievades.
UCSRB - = (1 <
UCSRC - = (1 <
UCSRC & = ~ (1 <
UBRRH & = ~ (1 <
UBRRL = 6; // datu pārraides ātruma iestatīšana // Tālāk ir tagu ID, tie ir jāmaina dažādiem tagiem. Tie jāatjaunina, lai projekts darbotos
/ * Pēc programmas izmetšanas kontrolierī ir jāņem kartes, kurām jābūt autorizētām, un jāiegūst tagu ID. Tos iegūst, ievietojot tagu pie RFID moduļa, un ekrānā tiks parādīts ID. Pēc ID iegūšanas programma jāatjaunina, zemāk minētos ID numurus aizstājot ar jauniem ID numuriem.
char ADMIT = {{(0x97), (0xa1), (0x90), (0x92)}, {(0x97), (0xa1), (0x90), (0x93)}, {(0x97), (0xa1), (0x90), (0x94)}, {(0x97), (0xa1), (0x90), (0x95)}, {(0x97), (0xa1), (0x90), (0x96)}}; |
Tagad augšpusē mēs autorizējam tikai piecas kartes, kuras var mainīt uz jebkuru numuru.
Piemēram, ņemiet vērā, ka noklusējuma programma tiek izmesta kontrolierī, iegūstiet kartes, kurām vajadzētu būt autorizētām. Novietojiet moduļa tuvumā vienu pēc otra, un katram no tiem iegūsiet ID kā xxxxxxxx (907a4F87), Ja mums ir 7 tagi, mums būs 7 astoņu bitu ID. * /
// tagad septiņām kartēm tas iet kā // char ADMIT = {{(0x90), (0x7a), (0x4F), (0x87)},; // piešķirot atmiņu ID sūtīšanai pa moduli int i = 0; int balsojums = 0; int k = 0; send_a_komanda (0x01); // Notīrīt ekrānu 0x01 = 00000001 _kavējums_ms (50); send_a_command (0x38); // stāsta LCD, ka mēs izmantojam 8 bitu komandu / datu režīmu _kavējums_ms (50); send_a_command (0b00001111); // LCD ekrāns ir ieslēgts un kursors mirgo char MEM; // atmiņas piešķiršana, lai saglabātu pilnīgu taga ID send_a_string ("RFID NUMURS"); // sūtīšanas virkne send_a_command (0x80 + 0x40 + 0); // kursora pārvietošana uz otro rindu kamēr (1) { kamēr (! (UCSRA & (1 <
{ } COUNTA = UDR; // UDR glabā saņemtos astoņu bitu datus un tiek ņemts vesels skaitlis. MEM = COUNTA; // pirmās divas rakstzīmes tiek atjauninātas atmiņā itoa (COUNTA, SHOWA, 16); // komanda mainīgā skaitļa ievietošanai LCD (mainīgais skaitlis, kurā rakstā aizstāt, kura bāze ir mainīga (šeit ir desmit, jo skaitām skaitli base10)) send_a_string (SHOWA); // liekot displejam parādīt otrās personas rakstzīmi (aizstātu ar mainīgu numuru) pēc kurzera novietošanas uz LCD kamēr (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // trešā un ceturtā rakstzīme tiek atjaunināta atmiņā kamēr (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // piektās un sestās rakstzīmes tiek atjauninātas atmiņā kamēr (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // septītā un astoņas rakstzīmes tiek atjauninātas atmiņā send_a_string (""); send_a_command (0x80 + 0x40 + 0); UCSRB & = ~ (1 <
par (i = 0; i <5; i ++) { ja ((MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT) {// pārbaudot autorizāciju, pērciet salīdzinot divas rakstzīmes vienlaikus ar atmiņā esošajām rakstzīmēm PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); // kavēšanās _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 (neparakstīta char komanda) { PORTA = komanda; PORTD & = ~ (1 <
PORTD - = 1 <
_kavējums_ms (50); PORTD & = ~ 1 <
PORTA = 0; } void send_a_character (neparakstīta rakstzīme) { PORTA = raksturs; PORTD - = 1 <
PORTD - = 1 <
_kavējums_ms (50); PORTD & = ~ 1 <
PORTA = 0; } void send_a_string (char * string_of_characters) { while (* rakstzīmju virkne> 0) { send_a_character (* rakstzīmju virkne ++); } } |