venerdì 29 novembre 2013

Rilevazione presenze con Rfid - parte 2 - La postazione di rilevazione

Vediamo nel dettaglio le componenti della postazione di rilevazione:

a) un lettore rfid costituito da una scheda Mifare Rc522 che si trova facilmente su ebay in accoppiata a una card o tag rfid.


La scheda utilizza lo standard SPI per la comunicazione con arduino. il collegamento é quello classico delle periferiche Spi: 2 piedini di alimentazione 3.3V e Gnd, 5 pin per la comunicazione : miso, mosi, sck, sda e rst. In questa scheda esiste un ottavo piedino scollegato denominato NC.
Per il controllo non ci si deve preoccupare perché esistono in rete molte librerie di controllo giá pronte all'uso. Nel mio caso ho preferito prendere una libreria esistente ed includerla nel progetto, in modo da ripulirla dalle funzioni in eccesso.Tuttavia se preferite utilizzarne una fatta e finita cercate in google con le keyword 'MFRC522 library arduino'
b) una scheda real time clock, ovvero un vero e proprio orologio in grado di fornire l'ora e la data. Tale scheda è autonoma in quanto possiede una batteria tampone che gli permette di mantenere l'ora corrente anche in caso di mancanza di tensione. Io ho utilizzato una Shield basata sul chip DS1307. La comunicazione è basata sullo standard I2C.



c) un buzzer, ovvero un dispositivo in grado di emettere semplici segnali acustici


d) una scheda di rete lan, la più classica ovvero quella ufficiale Ethernet Shield per Arduino ((http://arduino.cc/en/Main/ArduinoEthernetShield), per permettere la comunicazione delle letture rfid al server, tramite delle chiamate http

e) un display Nokia 5110, altro componente assai comune. Esistono molte librerie per pilotare questo display. Le più semplici permettono di scrivere solo caratteri di testo organizzati in righe, altre lavorano in modalità grafica. La risoluzione in pixel è tuttavia abbastanza scarsa, pari a 84x48, ma comunque più che sufficiente per rappresentare 4-5 righe di testo.
Nel mio caso ho preferito utilizzare questa libreria, per via del ridotto utilizzo di memoria


f) una proto board, ovvero una scheda in formato shield per arduino sulla quale montare tutte le componenti necessarie. In questo caso la scelta è andata su una classica scheda della Microbot http://www.microbot.it/product/40/PCB-Proto-Shield-UNO-for-Arduino.html

Ed ora colleghiamo tutto:

RFID module RC522:
modulo rfidarduino
3.3V3.3V
RST  pin 9
GND  Gnd
IRQ  non collegato
MISO 12
MOSI pin 11
SCK  pin13
SDA  pin 8

RTC module
modulo rtcarduino
SCL 
A5
SDA A4
Vcc +5V
GndGnd

Lcd 
modulo LCDarduino
RSTpin 6
CEpin 7
DCpin 5
DINpin 4
CLKpin 3
Vcc+3.3V
Lightscollegato (collegare
a Gnd per
la retroilluminazione)
GndGnd

Ethernet shield

usa 10,11,12, e 13 ma è già mappata correttamente con i suoi connettori. Il pin 10 è SS, ovvero l'abilitazione della scheda

Buzzer

Colleghiamo il polo caldo al pin 2 di Arduino, e l'altro polo a massa attraverso una resistenza da 220 Ohm.

Assemblaggio

Per l'assemblaggio usiamo la proto board come base su cui montare gli altri pezzi. A me personalmente piaceva una configurazione "naked", con tutto a vista. L'ideale ovviamente sarebbe ospitare tutto dentro un contenitore, mostrando esternamente solo il display. Il lettore rfid non necessita di contatto fisico, ma però ho riscontrato che il suo raggio di azione è di 1-2cm al massimo, fuori da questo range è molto difficile "beeppare" al primo colpo.






Nel prossimo post: il codice del client


2 commenti:

  1. Ciao a tutti. Molto interessante il tuo progetto. Posso chiederti come mai invece di implementare il modulo real time non hai usato il trucco di aggiornare data e ora sempre chiedendola al server come hai fatto con la tag rfid "master" ?

    RispondiElimina
    Risposte
    1. perchè sul display viene mostrata l'ora aggiornata al secondo ed è essenziale avere questo riscontro visivo per chi "timbra" l'uscita dall'ufficio. Senza il real time clock avrei dovuto appesantire il codice con dei timer e gestire a mano gli eventuali errori di "deriva" del timing andando frequentemente a chiedere l'ora aggiornata al server. Così la soluzione è più leggera, anche se c'è un pezzo di hw in più.

      Elimina