giovedì 3 maggio 2018

Rfid

- Macchina Identificatrice - 

- 02-05-2018-

   Progetto richiesto dalla mia nipotina.

Scherzando un poco si scoprono segreti!!






Materiale occorrente:

_ Arduino UNO
_ RFID-RC522
_ Alcune schede o tag
_ LCD 16X2 I2C
_ Tastierino numerico 4x4

(fili per collegamenti, batteria, interruttore)

Il progetto nasce dalla richiesta della mia nipotina, che mi ha portato il disegno della "macchina identificatrice", nel disegno si vede un'antenna, un display, e varie manopoline.




Il gioco che ho realizzato "bara un poco" ma non credo che si possa fare di più.


La macchina da me realizzata non è altro che un lettore di tag Rfid, con la possibilità di essere istruito a riconoscere i tag assegnando loro un nome.

Ho posto alcune limitazioni ( ma si possono superare con poche modifiche).

Numero di Tag utilizzati 11 + il tag speciale (Tessera speciale).
Nomi max 16 caratteri.

Lo sketch è molto semplice ( ma fa uso di alcune librerie).

Questo il loop del programma:


//********************************************
void loop()
{

 pronto();

 int tesseraNum = leggischeda();

if (tesseraNum == tSpecial){apprendeNome();} // aggiorna i nomi
    else mostraNome(tesseraNum); // mostra i nomi 

}
//********************************************
//  end loop


Descrizione funzionamento.


Dopo il setup si predispone su pronto in attesa che venga premuto un tasto

alla pressione del tasto la funzione leggischeda() inserisce il numero della tessera o tag letto
( uso un numero decimale per semplificare )

Se il tag risponde  (tag speciale ) si esegue l'aggiornamento nomi delle schede.

Altrimenti esegue la funzione mostraNome()  che visualizza il nome in memoria.

Per poter aggiornare od inserire i nomi associati alle schede occorre prima passare sul Tag speciale,  in questo modo si passa alla funzione apprendeNome()

In questo caso si posiziona l'antenna sulla scheda da nominare o aggiornare e si preme un tasto, ora si inserisce da tastiera il nome,  si ripete per aggiornare altre schede alla domanda  se finito? OK. Si premo OK e le stringhe delle  schede vengono memorizzate nella eeprom .

Si torna al pronto del loop.

Anche se spenta rimangono in memoria le schede aggiornate, è comunque possibile cambiare nome ad una o più schede.

 In dettaglio.

Per prima cosa realizzare il circuito ( anche su bred-board ).



Collegamenti nel mio prototipo

COLLEGAMENTI AL MODULO RC522
PINOUT:
RC522 MODULE    Uno/Nano 
SDA             D10
SCK             D13
MOSI            D11
MISO            D12
IRQ             N/A
GND             GND
RST             D9
3.3V            3.3V

//----------------------------------------------------------
//                   pin assegnati al tastierino
//----------------------------------------------------------
byte pinrighe[righe] = {7,6,5,4};
byte pincolonne[colonne] = {14,15,16,17};

Come potete vedere ho utilizzato anche 4 pin analog come digitali chiamandoli 14,15,16,17.
Ho fatto questa scelta per avere la seriale libera  e anche altri pin digitali per altri usi, ma nulla vieta di fare scelte diverse apportando le opportune modifiche allo sketch.



Caricare lo sketch in fondo al post, e quindi passate le schede, logicamente non avrete nessun riconoscimento, ma prendete nota del numero in basso sulla destra che appare sul display,

// aggiorna la variabile tesseraNum con il codice letto
int leggischeda()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Lettura in corso");
  int tessera = leggiRfid(); // si scrive il numero tessera
  lcd.setCursor(0,1);
  lcd.print(tessera);
  delay(500);
  return tessera;
}

eventualmente nella funzione qui sopra
aumentate il delay a 1000 o più, per poter prendere nota dei valori delle schede più facilmente.

Fatto questo sostituite i valori letti nelle costanti dello sketch

//   costanti da cambiare con quelle delle 
//   schede in uso.

const int tSpecial = 540; // tessera speciale

// tessere o tag
const int s0 = 384;
const int s1 = 372;
const int s2 = 498;
const int s3 = 424;
const int s4 = 490;
const int s5 = 520;
const int s6 = 704;
const int s7 = 746;
const int s8 = 574;
const int s9 = 706;
const int s10 = 738;
//--------------------------------------------
Sostituire i Vostri valori e scegliere la scheda speciale  il valore di questa 
va inserito alla const int tSpecial = .....;  // tessera speciale

Caricate lo sketch modificato ed e siete pronti per giocare.

La prima volta occorre passare la scheda speciale, ed entrare nel ciclo di scrittura nomi, quando avete scritto le vostre schede (non importa tutte, ma non più di quelle previste).
Alla fine apprendimento la macchina identificatrice sarà in grado di riconoscere e mostrare il nome di ogni scheda.

Anche con Arduino spento i nomi rimangono in memoria per cancellarli occorre sovrascriverli.

Lo sketch è commentato e descritto non dovrebbe essere difficile integrarlo o modificarlo,
eventualmente fatemi sapere.

Lavorando a questo gioco ho potuto scoprire alcuni aspetti del mondo Rfid che non conoscevo, quanto riportato in questo post è la parte più semplice per l'uso di questa tecnologia.
La libreria utilizzata è la prima versione e la potrete trovare nel sito  progettiarduino.com
nell'articolo scritto dall'  Autore Fancello Salvatore.

Questo lo sketch della macchina identificatrice

Scaricate lo sketch  aggiungete le librerie richieste all'IDE.

Buon divertimento!!

Sergio.


Nessun commento:

Posta un commento

Vi ringrazio per la lettura e vi invito al prossimo post.
Se il post vi è stato utile, vi è piaciuto oppure no, scrivete un commento.

Un saluto a tutti.
Sergio

Copyright - Condizioni d’uso - Disclaimer
http://avventurarduino.blogspot.it/2012/10/inizia-lavventura-arduino-12-settembre.html