Víme, že v kancelářích, nákupních centrech a na mnoha dalších místech může do místnosti vstoupit pouze osoba s autorizační kartou. Tyto systémy využívají komunikační systém RFID. RFID se používá v nákupních centrech k zastavení krádeží, protože výrobky jsou označeny RFID čipem a když osoba opustí budovu s RFID čipem, automaticky se aktivuje alarm. Štítek RFID je navržen jako malý jako součást písku. Systémy ověřování RFID se snadno navrhují a jsou levné za nízkou cenu. Některé školy a vysoké školy dnes používají docházkové systémy založené na RFID.
V tomto projektu navrhneme systém sběru mýtného založený na RFID z bezpečnostních důvodů. Tento systém tedy otevírá brány a umožňuje lidem pouze autorizované štítky RFID. ID držitele autorizovaného štítku jsou naprogramována v mikrokontroléru ATMEGA a pouze ti držitelé mohou opustit nebo vstoupit do areálu.
Požadované komponenty
Hardware: mikrokontrolér ATmega32, napájecí zdroj (5v), programátor AVR-ISP, JHD_162ALCD (16x2 LCD modul), kondenzátor 100uF (připojený přes napájecí zdroj), tlačítko, odpor 10KΩ, kondenzátor 100nF, LED (dva kusy), EM-18 (Modul čtečky RFID), integrovaný obvod ovladače L293D motoru, 5V DC motor.
Software: Atmel studio 6.1, progisp nebo flash magic.
Schéma zapojení a pracovní vysvětlení
Ve výše uvedeném obvodu systému výběru mýtného RFID je PORTA ATMEGA32 připojena k datovému portu LCD. Zde bychom měli pamatovat na deaktivaci komunikace JTAG v PORTC na ATMEGA změnou bajtů pojistky, pokud chceme použít PORTC jako normální komunikační port. Na 16x2 LCD je 16 kolíků, pokud existuje podsvícení, pokud není podsvícení, bude 14 kolíků. Můžeme napájet nebo nechat kolíky podsvícení. Nyní ve 14 kolíky jsou 8 datových kolíky (7-14 nebo D0-D7), 2 napájecí kolíky elektrárny (1 & 2 nebo VSS a VDD nebo GND a + 5 V), 3 rd kolík pro řízení kontrastu (VEE-řídí, jak hustá by měly být zobrazeny znaky), 3 ovládací piny (RS & RW & E).
V okruhu můžete pozorovat, že jsem vzal pouze dva kontrolní piny. To dává flexibilitu lepšího porozumění. Kontrastní bit a READ / WRITE se často nepoužívají, aby mohly být zkratovány na zem. LCD se tak dostane do režimu nejvyššího kontrastu a čtení. Abychom mohli odpovídajícím způsobem odesílat znaky a data, musíme pouze ovládat piny ENABLE a RS.
Připojení, která jsou vytvořena pro LCD, jsou uvedena níže:
PIN1 nebo VSS k zemi
PIN2 nebo VDD nebo VCC na + 5V napájení
PIN3 nebo VEE k zemi (poskytuje maximální kontrast nejlepší pro začátečníky)
PIN4 nebo RS (výběr registru) na PD6 MCU
PIN5 nebo RW (čtení / zápis) na zem (přepnutí LCD do režimu čtení usnadňuje uživateli komunikaci)
PIN6 nebo E (povolit) na PD5 mikrokontroléru
PIN7 nebo D0 až PA0
PIN8 nebo D1 až PA1
PIN9 nebo D2 až PA2
PIN10 nebo D3 až PA3
PIN11 nebo D4 až PA4
PIN12 nebo D5 až PA5
PIN13 nebo D6 až PA6
PIN14 nebo D7 až PA7
V obvodu můžete vidět, že jsme použili 8bitovou komunikaci (D0-D7). To však není povinné a můžeme použít 4bitovou komunikaci (D4-D7), ale se 4bitovým komunikačním programem se stává trochu složitější, proto jsem preferoval 8bitovou komunikaci.
Takže z pouhého pozorování výše uvedené tabulky připojujeme 10 pinů LCD k řadiči, ve kterém 8 pinů jsou datové piny a 2 piny pro ovládání.
Než budeme pokračovat, musíme porozumět sériové komunikaci. Zde modul RFID odesílá data do řadiče sériově. Má jiný způsob komunikace, ale pro snadnou komunikaci volíme RS232. Pin RS232 modulu je připojen k RXD pinu ATMEGA.
Data odeslaná modulem RFID jsou následující:
Nyní jsou pro rozhraní modulu RFID vyžadovány následující funkce:
1. Musí být povolen pin RXD (funkce přijímání dat) řadiče.
2. Protože je komunikace sériová, musíme vědět, kdykoli je datová bye přijata, abychom mohli program zastavit, dokud nedostaneme kompletní bajt. To se provádí povolením úplného přerušení přijímání dat.
3. RFID odesílá data do řadiče v 8bitovém režimu. Do řídicí jednotky budou tedy odeslány současně dva znaky. To je znázorněno na obrázku výše.
4. Z výše uvedeného obrázku nejsou žádné paritní bity, jeden stop bit v datech odeslaných modulem.
Výše uvedené funkce jsou nastaveny v registrech řadiče; budeme o nich krátce diskutovat,
ČERVENÁ (RXEN): Tento bit představuje funkci přijímání dat. Tento bit musí být nastaven, aby data z modulu přijímala řídicí jednotka. Umožňuje také pin RXD ovladače.
BROWN (RXCIE): Tento bit musí být nastaven pro získání přerušení po úspěšném příjmu dat. Povolením tohoto bitu se seznámíme hned po 8bitovém příjmu dat.
PINK (URSEL): Tento bit musí být nastaven před povolením dalších bitů v UCSRC. Po nastavení dalších potřebných bitů v UCSRC musí být URSEL deaktivován nebo vynulován.
ŽLUTÁ (UCSZ0, UCSZ1, UCSZ2): Tyto tři bity se používají k výběru počtu datových bitů, které přijímáme nebo odesíláme najednou.
Protože data odesílaná modulem RFID jsou 8bitový datový typ, musíme nastavit UCSZ0, UCSZ1 na jednu a UCSZ2 na nulu.
ORANGE (UMSEL): Tento bit je nastaven na základě toho, zda systém komunikuje asynchronně (oba používají různé hodiny) nebo synchronně (oba používají stejné hodiny).
Vzhledem k tomu, že modul a řadič používají různé hodiny, musí být tento bit nastaven na nulu nebo musí být ponechán sám, protože všechny jsou ve výchozím nastavení nastaveny na nulu.
ZELENÁ (UPM1, UPM0): Tyto dva bity jsou upraveny na základě bitové parity, kterou používáme při komunikaci.
Vzhledem k tomu, že RFID modul odesílá data bez parity, nastavili jsme oba UPM1, UPM0 na nulu nebo je lze ponechat osamocené, protože všechny bity v jakýchkoli registrech jsou standardně nastaveny na nulu.
MODRÁ (USBS): Tento bit se používá k výběru počtu stop bitů, které používáme během komunikace.
Vzhledem k tomu, že RFID modul odesílá data s jedním stop bitem, musíme bit USBS nechat na pokoji.
Nyní musíme konečně nastavit přenosovou rychlost, z obrázku výše je zřejmé, že modul RFID odesílá data do řídicí jednotky s přenosovou rychlostí 9600 b / s (bitů za sekundu).
Přenosová rychlost se nastavuje v ovladači výběrem vhodné UBRRH.
Hodnota UBRRH je vybrána křížovou přenosovou rychlostí a krystalovou frekvencí CPU, takže hodnota křížového odkazu UBRR je považována za „6“, a tak je nastavena přenosová rychlost.
Nyní, jak je znázorněno na obrázku, dva piny z ovladače přecházejí na L293D, což je H-BRIDGE používaný k řízení rychlosti a směru otáčení pro stejnosměrné motory s nízkým výkonem.
L293D je integrovaný obvod H-BRIDGE určený k pohonu stejnosměrných motorů s nízkým výkonem a je znázorněn na obrázku. Tento integrovaný obvod se skládá ze dvou h můstků, takže může řídit dva stejnosměrné motory. Tento IC lze tedy použít k pohonu robotických motorů ze signálů mikrokontroléru.
Jak již bylo diskutováno dříve, tento IC má schopnost měnit směr otáčení stejnosměrného motoru. Toho je dosaženo kontrolou úrovní napětí na INPUT1 a INPUT2.
Povolit PIN |
Vstupní kolík 1 |
Vstupní pin 2 |
Směr motoru |
Vysoký |
Nízký |
Vysoký |
Odbočit vpravo |
Vysoký |
Vysoký |
Nízký |
Odbočit vlevo |
Vysoký |
Nízký |
Nízký |
Stop |
Vysoký |
Vysoký |
Vysoký |
Stop |
Jak je uvedeno v tabulce výše, pro hodinové otáčení by měla být 2A vysoká a 1A nízká. Podobně pro proti směru hodinových ručiček by 1A měla být vysoká a 2A by měla být nízká.
Kdykoli je k modulu přivedena autorizovaná karta, je motor naprogramován tak, aby se na sekundu pohyboval ve směru hodinových ručiček, aby se mýtná brána otevřela po vteřině, kdy se vrátí, což znamená, že mýtná brána je zavřená. Fungování mýtného je nejlépe vysvětlit krok za krokem v C kódu uvedeném níže.
Vysvětlení programování
Níže je vysvětlení řádku k řádku pro kód systému pro výběr mýtného RFID. Koncept a fungování tohoto projektu můžete pochopit čtením níže uvedeného kódu. Chcete-li si stáhnout nebo zkopírovat, najdete kompletní kód v dolní části stránky.
#include // header to enable data flow control over pins
#define F_CPU 1000000 // připojená krystalová frekvence řadiče
#zahrnout
#define E 5 // dávat jméno „povolit“ na 5 th pin PORTD, protože je spojen s LCD umožnit pin
#define RS 6 // dávat jméno „registerselection“ až 6. ročník čep PORTD, protože je spojen s LCD RS pin
void send_a_command (nepodepsaný příkaz char);
void send_a_character (znakový znak bez znaménka);
void send_a_string (char * string_of_character);
int main (neplatný)
{
DDRA = 0xFF; // uvedení porta jako výstupních pinů
DDRD = 0b11111110;
_delay_ms (50); // dává zpoždění 50ms
DDRB = 0b11110000; // Převzetí některých pinů portB jako vstupu.
UCSRB - = (1 <
UCSRC - = (1 <
UCSRC & = ~ (1 <
UBRRH & = ~ (1 <
UBRRL = 6; // nastavení přenosové rychlosti // Následující obsahuje ID tagů, tyto je třeba pro různé tagy změnit, tyto musí být aktualizovány, aby projekt fungoval
/ * Po vyřazení programu v ovladači je třeba vzít karty, které musí být autorizovány, a získat ID tagů. Ty se získají umístěním štítku poblíž modulu RFID a ID se zobrazí na obrazovce. Po získání ID musí být program aktualizován nahrazením níže uvedených ID čísel novými ID čísly.
char ADMIT = {{(0x97), (0xa1), (0x90), (0x92)}, {(0x97), (0xa1), (0x90), (0x93)}, {(0x97), (0xa1), (0x90), (0x94)}, {(0x97), (0xa1), (0x90), (0x95)}, {(0x97), (0xa1), (0x90), (0x96)}}; |
Nyní výše autorizujeme pouze pět karet, které lze změnit na libovolné číslo.
Zvažte například, že výchozí program je uložen v řadiči, získejte karty, které by měly být autorizovány. Umístěte jeden po druhém blízko modulu, získáte ID každého z nich jako xxxxxxxx (907a4F87), Pokud máme 7 značek, máme 7 osmibitových ID. * /
// nyní pro sedm karet to jde jako // char ADMIT = {{(0x90), (0x7a), (0x4F), (0x87)},; // přidělení paměti pro zobrazení ID odeslaného modulem int i = 0; int hlasování = 0; int k = 0; send_a_command (0x01); // Vymazat obrazovku 0x01 = 00000001 _delay_ms (50); send_a_command (0x38); // říká lcd, že používáme 8bitový příkazový / datový režim _delay_ms (50); send_a_command (0b00001111); // LCD OBRAZOVKA ZAPNUTÁ a kurzor bliká char MEM; // přidělení paměti pro uložení úplného ID tagu send_a_string ("ČÍSLO RFID"); // odeslání řetězce send_a_command (0x80 + 0x40 + 0); // přesunutí kurzoru do druhého řádku zatímco (1) { while (! (UCSRA & (1 <
{ } COUNTA = UDR; // UDR ukládá přijatá osmibitová data a bere se na celé číslo. MEM = COUNTA; // první dva znaky jsou aktualizovány do paměti itoa (COUNTA, SHOWA, 16); // příkaz pro vložení variabilního čísla na LCD (variabilní číslo, ve kterém znaku se má nahradit, která základna je proměnná (deset zde, protože počítáme číslo v base10)) send_a_string (SHOWA); // sdělit displeji, aby zobrazil znak (nahrazený proměnným číslem) druhé osoby po umístění kurzoru na LCD while (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // třetí a čtvrtý znak jsou aktualizovány do paměti while (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // pátý a šestý znak jsou aktualizovány do paměti while (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // sedmý a osm znaků jsou aktualizovány do paměti send_a_string (""); send_a_command (0x80 + 0x40 + 0); UCSRB & = ~ (1 <
pro (i = 0; i <5; i ++) { if ((MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT)) {// kontrola povolení nákupu porovnáním dvou znaků najednou se znaky v paměti PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); // zpoždění _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 (nepodepsaný příkaz char) { PORTA = příkaz; PORTD & = ~ (1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
PORTA = 0; } void send_a_character (znakový znak bez znaménka) { 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 ++); } } |