Ho sabem en oficines, centres comercials i en molts altres llocs on només es permet l’entrada a la sala de la persona amb targeta d’autorització. Aquests sistemes utilitzen un sistema de comunicació RFID. L’RFID s’utilitza en centres comercials per aturar el robatori ja que els productes s’etiqueten amb xip RFID i quan una persona surt de l’edifici amb el xip RFID s’alça automàticament una alarma. L'etiqueta RFID està dissenyada tan petita com a part de sorra. Els sistemes d’autenticació RFID són fàcils de dissenyar i tenen un cost econòmic. Actualment, algunes escoles i col·legis utilitzen sistemes d'assistència basats en RFID.
En aquest projecte dissenyarem un sistema de cobrament de peatges basat en RFID per motius de seguretat. Per tant, aquest sistema obre portes i permet als usuaris només amb les etiquetes RFID autoritzades. Els identificadors de titulars d’etiquetes autoritzats estan programats al microcontrolador ATMEGA i només els titulars poden sortir o entrar al recinte.
Components necessaris
Maquinari: microcontrolador ATmega32, font d'alimentació (5v), programador AVR-ISP, JHD_162ALCD (mòdul LCD 16x2), condensador 100uF (connectat a través de la font d'alimentació), botó, resistència 10KΩ, condensador 100nF, LED (dues peces), EM-18 (Mòdul lector RFID), controlador IC del motor L293D, motor de 5V CC.
Programari: Atmel studio 6.1, progisp o flash magic.
Diagrama de circuits i explicació de treball

Al circuit del sistema de cobrament de peatges RFID que es mostra més amunt, PORTA d'ATMEGA32 està connectat al port de dades de la pantalla LCD. Aquí hem de recordar desactivar la comunicació JTAG en PORTC a ATMEGA canviant els bytes del fusible, si volem utilitzar el PORTC com a port de comunicació normal. A la pantalla LCD de 16x2, hi ha 16 pins sobre tot si hi ha llum de fons, si no hi ha llum de fons hi haurà 14 pins. Podem alimentar o deixar els passadors de llum de fons. Ara en els 14 pins hi ha 8 pins de dades (7-14 o D0-D7), 2 clavilles d'alimentació d'alimentació (1 i 2 o VSS i VDD o GND i + 5V), 3 rd PIN per al control de contrast (VEE-controla el gruix de la s'han de mostrar els caràcters), 3 pins de control (RS & RW & E).
Al circuit, podeu observar que només he pres dos pins de control. Això proporciona la flexibilitat d’una millor comprensió. El bit de contrast i READ / WRITE no s’utilitzen sovint, de manera que es poden reduir a terra. D’aquesta manera, la pantalla LCD té un contrast i un mode de lectura més alts. Només hem de controlar els pins ENABLE i RS per enviar caràcters i dades en conseqüència.
Les connexions que es fan per a LCD es donen a continuació:
PIN1 o VSS a terra
PIN2 o VDD o VCC a una potència de + 5v
PIN3 o VEE a terra (proporciona el màxim contrast possible per a principiants)
PIN4 o RS (Selecció de registre) a PD6 de MCU
PIN5 o RW (lectura / escriptura) a terra (posa la pantalla LCD en mode lectura facilita la comunicació per a l'usuari)
PIN6 o E (Habilita) a PD5 del microcontrolador
PIN7 o D0 a PA0
PIN8 o D1 a PA1
PIN9 o D2 a PA2
PIN10 o D3 a PA3
PIN11 o D4 a PA4
PIN12 o D5 a PA5
PIN13 o D6 a PA6
PIN14 o D7 a PA7
Al circuit, podeu veure que hem utilitzat la comunicació de 8 bits (D0-D7). Tanmateix, això no és obligatori i podem utilitzar la comunicació de 4 bits (D4-D7), però amb un programa de comunicació de 4 bits es torna una mica complex, així que he preferit la comunicació de 8 bits.
Per tant, a partir de la simple observació de la taula anterior, estem connectant 10 pins de LCD al controlador en què 8 pins són pins de dades i 2 pins per al control.
Abans d’avançar, hem d’entendre sobre la comunicació en sèrie. El mòdul RFID aquí envia les dades al controlador en sèrie. Té un altre mode de comunicació, però per facilitar la comunicació estem escollint RS232. El pin RS232 del mòdul està connectat al pin RXD d'ATMEGA.
Les dades enviades pel mòdul RFID són les següents:

Ara, per a la interfície del mòdul RFID, es requereixen les funcions següents:
1. El pin RXD (funció de recepció de dades) del controlador ha d'estar habilitat.
2. Com que la comunicació és en sèrie, hem de saber cada vegada que es reben les dades de comiat, de manera que podem aturar el programa fins que es rep un byte complet. Això es fa activant una interrupció completa de les dades.
3. La RFID envia dades al controlador en mode de 8 bits. Per tant, s’enviaran dos caràcters al controlador alhora. Això es mostra a la figura anterior.
4. A la figura anterior, no hi ha bits de paritat, un bit de parada a les dades enviades pel mòdul.
Les funcions anteriors es defineixen als registres del controlador; els parlarem breument,


VERMELL (RXEN): aquest bit representa la funció de rebre dades. Aquest bit s’ha d’establir perquè les dades del mòdul les rebi el controlador. També habilita el pin RXD del controlador.
MARRÓ (RXCIE): aquest bit s'ha de configurar per obtenir una interrupció després de la recepció de dades amb èxit. En habilitar aquest bit, ho coneixem just després de rebre dades de 8 bits.
ROSA (URSEL): aquest bit s’ha d’establir abans d’habilitar altres bits a UCSRC. Després de configurar, els altres bits necessaris a UCSRC, URSEL s'han de desactivar o posar a zero.
GROC (UCSZ0, UCSZ1, UCSZ2): aquests tres bits s’utilitzen per seleccionar el nombre de bits de dades que estem rebent o enviant en un sol cop.

Com que les dades enviades pel mòdul RFID són de tipus de dades de 8 bits, hem d’establir UCSZ0, UCSZ1 a un i UCSZ2 a zero.
TARONJA (UMSEL): aquest bit es defineix en funció de si el sistema es comunica de manera asíncrona (tots dos utilitzen un rellotge diferent) o síncronament (tots dos utilitzen el mateix rellotge).

Com que el mòdul i el controlador fan servir un rellotge diferent, aquest bit s'ha de posar a zero o deixar-lo sol, ja que tots estan definits a zero per defecte.
VERD (UPM1, UPM0): aquests dos bits s’ajusten en funció de la paritat de bits que estem utilitzant en la comunicació.

Com que el mòdul RFID envia dades sense paritat, hem establert UPM1, UPM0 a zero o es poden deixar sols, ja que tots els bits de qualsevol registre es defineixen a zero per defecte.
BLAU (USBS): aquest bit s’utilitza per triar el nombre de bits de parada que estem utilitzant durant la comunicació.

Com que el mòdul RFID envia dades amb un bit de parada, només hem de deixar el bit USBS sol.
Ara, per fi, hem d’establir la velocitat de transmissió, de la figura superior queda clar que el mòdul RFID envia dades al controlador amb una velocitat de transmissió de 9600bps (bits per segon).
La velocitat en bauds s’estableix al controlador escollint la UBRRH adequada.

El valor UBRRH és escollit per la velocitat de transmissió de referència creuada i la freqüència de cristall de la CPU, de manera que per valor creuat de referència UBRR es veu com '6' i, per tant, s'estableix la velocitat de transmissió.

Ara, tal com es mostra a la figura, dos pins del controlador passen a L293D, que és un H-BRIDGE que s’utilitza per controlar la velocitat i la direcció de rotació dels motors de CC de baixa potència.

L293D és un CI H-BRIDGE dissenyat per a la conducció de motors CC de baixa potència i es mostra a la figura, aquest IC consta de dos ponts h i, per tant, pot accionar dos motors CC. Per tant, aquest CI es pot utilitzar per conduir motors de robots des dels senyals del microcontrolador.
Ara, com s'ha comentat abans, aquest CI té la capacitat de canviar el sentit de rotació del motor de corrent continu. Això s’aconsegueix controlant els nivells de tensió a INPUT1 i INPUT2.
|
Activa Pin |
Pin d'entrada 1 |
Pin d'entrada 2 |
Direcció del motor |
|
Alt |
baix |
Alt |
Giri a la dreta |
|
Alt |
Alt |
baix |
Giri a l'esquerra |
|
Alt |
baix |
baix |
Atura |
|
Alt |
Alt |
Alt |
Atura |
Per tant, tal com es mostra a la taula anterior, per a la rotació del rellotge 2A ha de ser alta i 1A ha de ser baixa. De manera similar, en sentit antihorari, 1A ha de ser alt i 2A ha de ser baix.
Sempre que s'apropa una targeta autoritzada a prop del mòdul, el motor està programat per moure's en sentit horari durant un segon, per mostrar que la porta de peatge s'obre després d'un segon que torna, indicant que la porta de peatge està tancada. El funcionament de la plaça de peatge s’explica millor pas a pas del codi C que es mostra a continuació.
Explicació de la programació
A continuació es mostra l'explicació de línia a línia per al codi del sistema de cobrament de peatges RFID. Podeu entendre el concepte i el funcionament d’aquest projecte llegint el codi següent. Per descarregar o copiar, podeu trobar el codi complet a la part inferior de la pàgina.
#include // header per habilitar el control del flux de dades sobre pins
#define F_CPU 1000000 // indicant la freqüència de cristall del controlador connectada
#incloure
#define I 5 // donant el nom "activar" a 5 º pin de PORTD, ja que està connectat a la pantalla LCD permet pin
#define RS 6 // donant el nom "registerselection" a 6 º pin de PORTD, ja que està connectat a el pin LCD RS
void send_a_command (ordre de caràcter sense signar);
void send_a_character (caràcter de caràcter sense signar);
void send_a_string (char * string_of_characters);
int main (buit)
{
DDRA = 0xFF; // posant porta com a pins de sortida
DDRD = 0b11111110;
_delay_ms (50); // donant un retard de 50ms
DDRB = 0b11110000; // Prenent alguns pins portB com a entrada.
UCSRB - = (1 <
UCSRC - = (1 <
UCSRC & = ~ (1 <
UBRRH & = ~ (1 <
UBRRL = 6; // configuració de la velocitat de transmissió // El següent conté l’identificador d’etiquetes, s’han de canviar per a diferents etiquetes. S’han d’actualitzar perquè el projecte funcioni
/ * Després de llançar el programa al controlador, cal agafar les targetes que s'han d'autoritzar i obtenir l'identificador de les etiquetes. Aquests s’obtenen col·locant l’etiqueta a prop del mòdul RFID i l’identificador es mostrarà a la pantalla. Després d’obtenir els identificadors, el programa s’ha d’actualitzar substituint els números d’identificació següents per nous.
|
char ADMIT = {{(0x97), (0xa1), (0x90), (0x92)}, {(0x97), (0xa1), (0x90), (0x93)}, {(0x97), (0xa1), (0x90), (0x94)}, {(0x97), (0xa1), (0x90), (0x95)}, {(0x97), (0xa1), (0x90), (0x96)}}; |
Ara, a la part superior, només autoritzem cinc cartes, que es poden canviar a qualsevol número.
Per exemple, tingueu en compte que el programa per defecte es troba al controlador, obteniu les targetes que haurien d’estar autoritzades. Col·loqueu un darrere l’altre a prop del mòdul i obtindreu l’identificador de cadascun com xxxxxxxx (907a4F87), Si hi ha set etiquetes, tindrem 7 identificadors de vuit bits. * /
|
// ara per set cartes va com // char ADMIT = {{(0x90), (0x7a), (0x4F), (0x87)},; // assignació de memòria per mostrar l’identificació enviada per mòdul int i = 0; int vote = 0; int k = 0; enviar_a_comanda (0x01); // Esborra la pantalla 0x01 = 00000001 _delay_ms (50); enviar_a_comanda (0x38); // dient a lcd que estem utilitzant el mode de comandament / dades de 8 bits _delay_ms (50); send_a_command (0b00001111); // PANTALLA LCD ACTIVADA i parpelleig del cursor char MEM; // assignació de memòria per emmagatzemar l'identificador complet de l'etiqueta send_a_string ("NÚMERO RFID"); // enviament de cadenes enviar_a_comanda (0x80 + 0x40 + 0); // passant cursor a segona línia mentre que (1) { mentre que (! (UCSRA & (1 <
{ } COUNTA = UDR; // UDR emmagatzema les dades de vuit bits rebudes i es pren en un enter. MEM = COUNTA; // els dos primers caràcters s’actualitzen a la memòria itoa (COUNTA, SHOWA, 16); // ordre per posar un número variable a la pantalla LCD (nombre variable, en quin caràcter substituir, quina base és variable (deu aquí, ja que comptem el número a la base10)) send_a_string (SHOWA); // indicant a la pantalla que mostri el caràcter (substituït per un nombre variable) de segona persona després de col·locar el cursor a la pantalla LCD mentre que (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // el tercer i el quart caràcter s’actualitzen a la memòria mentre que (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // els caràcters cinquè i sisè s’actualitzen a la memòria mentre que (! (UCSRA & (1 <
{ } COUNTA = UDR; itoa (COUNTA, SHOWA, 16); send_a_string (SHOWA); MEM = COUNTA; // el setè i vuit caràcters s’actualitzen a la memòria send_a_string (""); enviar_a_comanda (0x80 + 0x40 + 0); UCSRB & = ~ (1 <
per a (i = 0; i <5; i ++) { if ((MEM == ADMET) & (MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT)) {// comprovació de l'autorització per comparar dos caràcters alhora amb els caràcters de la memòria PORTB - = (1 <
PORTB & = ~ (1 <
_delay_ms (220); // demora _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 (ordre de caràcter sense signar) { PORTA = ordre; PORTD & = ~ (1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
PORTA = 0; } void send_a_character (caràcter de caràcter sense signar) { PORTA = personatge; PORTD - = 1 <
PORTD - = 1 <
_delay_ms (50); PORTD & = ~ 1 <
PORTA = 0; } void send_a_string (char * string_of_characters) { while (* string_of_characters> 0) { send_a_character (* string_of_characters ++); } } |
