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.

laboratorio
laboratorio
Serratura automatica con TAG
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 1
Avanzamento Avanzamento: laboratorio completa al 75%

Descrizione del progetto

modifica

Quando 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

modifica

Un 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

modifica

Rispettare 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.

 

Prima 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

modifica

Modificando il codice, potete sostituire il servo con un normalissimo relè per azionare una vera e propria elettro-serratura.