Un’altra esercitazione con Cisco Packet Tracer e il mondo IoT. Questa volta facciamo interagire un servo motore e un tag RFID. Vediamo come.
Vediamo una applicazione interessante che permette di parlare anche di due tecnologie per applicazioni smart magari meno note. La prime più semplice è il servo motore. Un servomotore è un particolare tipo di motore, generalmente di piccola potenza, che si differenzia dai motori tradizionali in quanto le sue condizioni operative sono soggette ad ampie e, spesso, repentine variazioni sia di velocità che coppia motrice, variazioni con picchi e sollecitazioni di potenza. Il servomotore si deve adattare a queste variazioni con la massima rapidità e precisione. Anche in condizioni di arresto, ai servomotori è richiesta precisione ed affidabilità nel mantenere la posizione raggiunta, anche sotto sforzo. Nei nostri applicativi da maker sono motori elettrici, ma possono essere anche pneumatici ed idraulici in complesse applicazioni industriali. Caratteristiche viste rendono questi motori ottimi nei controlli di posizione, nelle macchine a controllo numerico, nei sistemi automatici di regolazione e nelle periferiche di sistema, come stampanti e plotter.
Lo RFID è invece una tecnologia wireless, già affrontata in queste pagine (link).
L’esperienza che facciamo va ad utilizzare un lettore RFID che nasce più come elemento Smart che per essere collegato ad una MCU simil Arduino. L’idea è quella di collegare il sistema RFID ad un server di registrazione o un home gataway che, magari, mostreremo in altra esercitazione. Ecco perché ci occorrono un paio di passaggi per rendere questo lettore adatto ai nostri scopi. Analoghi passaggi possono essere replicati per tanti altri oggetti iot simili. Per prima cosa quindi dobbiamo modificare il codice che gestisce il lettore RFID. Doppio click sul lettore RFID, quindi tasto Advanced in basso a destra, tab Programming, ancora click sul progetto RFID in Java Script, quindi doppio click sul main.js. Ci possiamo posizionare alla riga 63 mandando in basso il codice che rimane della funzione principale. L’idea è quello di inserire un codice che forzi il nostro lettore ad attivarsi con luce verde a fronte di un codice rfid prefissato e rifiuti gli altri segnalando in rosso l’errore, mentre se non ci sono rfid nelle vicinanze con un qualsiasi codice rimanga in attesa con lo status dei led verde/rosso entrambi spenti.
Invece nel tab //O Config, dobbiamo aumentare il numero di interfacce analogiche e portiamo quindi a 2 la voce Analog Slots. Questo ci crearà la porta A0 e A1 usata poi nel codice di default. Dobbiamo collegare la porta A1 del lettore alla porta A1 di Arduino, almeno per rispettare il codice predefinito.
Il frammento di codice da inserire alla fine della funzione loop sul lettore RFID:
/*
Codice per simulare il riconoscimento di una rfid con id 1001
*/
if (cardID == 1001)
{
state = 0;
}
if (cardID > 0 && cardID != 1001)
{
state = 1;
}
setState(state);
analogWrite(A1, state);
sendReport();
/*
FINE Codice per simulare il riconoscimento di una rfid con id 1001
*/
Non ci resta che provare il codice scritto e verificare con due RFID il comportamento. Per modifica il codice RFID, cliccare sul nostro RFID blu, tab Attributes, CardID in fondo. Di default, in genere, è sempre 1001 e possiamo lasciarne uno così, l’altro modificarlo a piacere, ad esempio 2000 come in foto.
Ok, il nostro RFID adesso deve essere interfacciato con Arduino per fornirgli l’esito del login con RFID. In questo caso il codice da mandare ad arduino non è un semplice vero/falso o 1/O. Se analizziamo la documentazione o il codice js del lettore, vediamo che manda il codice.
Il codice per muovere il servo è semplice. Basta usar la funzione customWrite passandogli il pin digitale a cui è collegato il servo, 0 per noi, e l’angolo di movimento espresso in gradi, positivo o negativo a secondo che un oggetto collegato, ad esempio una porta o un braccio robotico, si sposti e torni nella posizione di sicurezza.
Il codice da scrivere sulla basetta Arduino MCU
var pin = 0;
function setup()
{
pinMode(pin, OUTPUT);
pinMode(A1, INPUT);
Serial.println("Servo");
}
var angolo;
var rfid;
function loop()
{
rfid = analogRead(A1);
Serial.println(rfid);
if (rfid === 0)
{
customWrite(pin,40);
delay(1000);
}
else
{
customWrite(pin,-40);
}
delay(2000);
}
Ultima modifica 30 Aprile 2022