Serratura automatica con TAG
Questa risorsa è stata scritta dagli studenti dell'Istituto ITIS "Enrico Mattei" di Urbino, della classe 3B/EN nell'a.s. 2021/2022, all'interno del corso di Sistemi automatici per le superiori 1.
Per favore, prima di apportare modifiche, attendi sino alla fine dell'anno scolastico (termina il 30 giugno 2022) oppure contatta il docente di riferimento Giacomo Alessandroni nel caso venissero rilevati contenuti non in linea con le linee guida della comunità. Se leggi questo avviso ad anno scolastico concluso puoi rimuoverlo. |
Questa lezione descrive come realizza una Serratura automatica con TAG.
Descrizione del progetto
modificaQuando si avvicina un TAG al sensore RC-522 il modulo rileva il codice identificativo, che nel nostro caso è già memorizzato all'interno del TAG, lo compara con un codice esadecimale di una variabile di tipo "String", ed esegue delle istruzioni logiche che permettono o meno l'apertura della serratura(il movimento del servo motore in caso).
Sensori e attuatori
modificaUn modulo RFID è un sensore capace di rilevare un chip presente all'interno di un oggetto e leggerne il suo contenuto digitale. Ovviamente parliamo di chip particolari che vengono utilizzati proprio per questo scopo, e servono per memorizzare informazioni. Questo chip possono essere installati all'interno di portachiavi, anelli, schede o etichette adesive e vengono comunemente chiamati TAG. Non necessitano di alimentazione fissa, in quanto la prelevano all'antenna che serve loro anche per la trasmissione dei dati.
I componenti necessari sono:
Schema di montaggio
modificaRispettare rigorosamente i collegamenti dei pin segnati nello schema, perché il modulo utilizza il protocollo di comunicazione SPI. Se utilizzate una scheda diversa da Arduino Uno, verificare il suo pinout e correggete i collegamenti, Ricordate anche questa piccola scheda lavora con una tensione di 3,3V e non i classici 5V di Arduino.
Codice
modificaPrima di inizializzare il progetto, bisognerà includere le librerie utilizzate dal programma e più in particolare la libreria "rc522" da Arduino, che ci permetterà di includere "MFRC522.h".
//------------------------------------------------------------------------------------------------------------------------------------------------------------
//INCLUDIAMO LE LIBRERIE UTILIZZATE DAL PROGRAMMA
//---------------------------------------------------------------------------------
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
//DICHIARIAMO TUTTE LE VARIABILI E LE COSTANTI
#define SERVO_PIN 6
#define BUZZER_PIN 8
#define RST_PIN 9
#define SS_PIN 10
int Aperto = 0; //Movimento in gradi del servo
int Chiuso = 180; //Movimento in gradi del servo
int T_Attesa = 2500; //Regola il tempo di attesa tra la serratura aperta e poi chiusa.
String Chiave = "06 E6 2D 5B"; //Sostituire con il codice della vostra chiave d'accesso
String content= "";
MFRC522 RFID(SS_PIN, RST_PIN);
Servo Serratura;
void setup() {
Serial.begin(9600); //Inizializza la comunicazione Seriale
SPI.begin(); //Inizializzia il bus per la connessione SPI
RFID.PCD_Init(); //Inizializza Il modulo RFID
Serratura.attach(SERVO_PIN); //servo pin
Serratura.write(Chiuso);
pinMode(BUZZER_PIN, OUTPUT);
noTone(BUZZER_PIN);
Serial.println("Il sistema è pronto");
Serial.println();
}
void loop() {
//Tiene sotto controllo il modulo RFID-RC522 e verifica se ci sono nuove chiavi
if (!RFID.PICC_IsNewCardPresent()){
return;
}
//Selezione la carta letta
if (!RFID.PICC_ReadCardSerial()){
return;
}
//Stampa sul monitor seriale il codice esadecimale della chiave
Serial.print("Codice chiave: ");
content= "";
for (byte i = 0; i < RFID.uid.size; i++){
Serial.print(RFID.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(RFID.uid.uidByte[i], HEX);
content.concat(String(RFID.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(RFID.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Messaggio: ");
content.toUpperCase();
//Se la stringa letta dal modulo corrisponde a quella memorizzata esegue l'accesso altrimenti lo nega
if(content.substring(1) == Chiave){Accesso_Consentito();}
else{Accesso_Negato();}
}
//Funzione Accesso Consentito
void Accesso_Consentito(){
Serial.println("Accesso consentito");
tone(BUZZER_PIN, 800);
delay(100);
noTone(BUZZER_PIN);
delay(50);
tone(BUZZER_PIN, 800);
delay(150);
noTone(BUZZER_PIN);
Serratura.write(Aperto);
delay(T_Attesa);
Serratura.write(Chiuso);
}
//---------------------------------------------------------------------------------
//Funzione Accesso Negato
void Accesso_Negato(){
Serial.println("Accesso negato");
tone(BUZZER_PIN, 500);
delay(300);
noTone(BUZZER_PIN);
}
//---------------------------------------------------------------------------------
Quando proverete il codice per la prima volta nessuna delle vostre chiavi sarà in grado di azionare il servomotore. Dovrete prima di tutto scoprire il codice esadecimale del vostro TAG e sostituire il valore della variabile Chiave. Per conoscere il vostro codice basterà avvicinare il TAG al lettore, con l’Arduino collegato al PC e il terminale seriale dell’IDE aperto. Dopo aver sostituito la stringa esadecimale e ricaricato il codice sull’Arduino, il sistema funzionerà perfettamente.
String Chiave = "06 E6 2D 5B"; //Sostituire con il codice della vostra chiave d'accesso
Espansioni suggerite
modificaModificando il codice, potete sostituire il servo con un normalissimo relè per azionare una vera e propria elettro-serratura.