Nel precedente articolo abbiamo ripercorso il funzionamento del progetto, abbiamo fatto una panoramica della scheda di sviluppo Arduino UNO e realizzato il prototipo. In questo articolo, creeremo lo sketch con il codice del progetto di cui spiegheremo le principali funzioni.
Il progetto
Riproponiamo la descrizione del progetto per chi non ha potuto seguire i precedenti articoli. Il controllo accessi RFID di questo progetto è costituito da un lettore RFID e relativa scheda tag RFID, un sensore ad effetto Hall magnetico, un magnete, un relè, una elettro-serratura, un alimentatore e il microcontrollore Arduino UNO. In Figura 1 è riportato lo schema elettrico del dispositivo di controllo di un accesso di sicurezza con RFID.
Nella condizione iniziale, la serratura della porta è bloccata e la porta di accesso è chiusa in sicurezza. Il lettore RFID1, dopo la scansione della scheda tag, trasmette i dati della lettura al microcontrollore Arduino U1 mediante la comunicazione seriale SPI. Se l’utente è autorizzato ad accedere all’area riservata, il sistema RFID riconosce e autentica l’utente. Di conseguenza, Arduino, tramite l’uscita digitale D2 di livello alto, attiva il relè RL1 che chiude il contatto COM-NO. La chiusura del contatto COM-NO consente la chiusura del circuito dell’alimentazione fornita dal Power Supply a 12 V PS1, attivando così lo sblocco della serratura SER1. Diversamente, se l’utente non è autorizzato, il sistema RFID non lo riconoscerà, il relè riceverà dal microcontrollore un livello basso e aprirà il contatto COM-NO interrompendo l’alimentazione della serratura. La serratura, non più alimentata, tornerà nella condizione iniziale di blocco e la porta sarà chiusa in sicurezza. Durante queste fasi, riveste un ruolo importante il sensore magnetico ad effetto Hall HM1. Il sensore HM1 e un magnete, installati rispettivamente nel telaio della porta e sulla porta stessa, vengono utilizzati per rilevare la posizione della porta e dare il consenso di blocco/sblocco della serratura.
Installazione del software
Installazione dell’IDE di Arduino
Installate nel computer l’IDE di Arduino scaricandolo dal sito ufficiale www.arduino.cc (in questo articolo si fa riferimento alla versione software Arduino 1.8.15).
Installazione delle librerie
Per il funzionamento del codice di Arduino è necessario installare la libreria SPI.h per la comunicazione seriale fra Arduino e il lettore RFID-RC522. Inoltre, per gestire il lettore RFID, Arduino necessita della libreria MFRC522.h. Per installare la libreria SPI.h aprite il sito https://github.com/PaulStoffregen/SPI, cliccate sul pulsante “Code” e selezionate “Download ZIP” per scaricare il file “SPI-master.zip”. Ora aprite il sito https://www.arduinolibraries.info/libraries/mfrc522 e nell’elenco “Download” delle release cliccate su “MFRC522-1.4.10.zip” per scaricare questa libreria.
Creazione dello sketch
Scaricati e salvati in una cartella i file ZIP delle librerie SPI.h e MFRC522.h, aprite l’IDE di Arduino e in un nuovo sketch copiate il codice seguente:
#include <SPI.h> #include <MFRC522.h> int hall_sensor = 3; int state,lockread; int Buzzer = 4; const int LockPin = 2; #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. void setup() { Serial.begin(9600); // Initiate a serial communication pinMode(LockPin, OUTPUT); pinMode(Buzzer, OUTPUT); pinMode(hall_sensor, INPUT); SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 Serial.println("Avvicina la scheda al lettore..."); // Serial.println(); digitalWrite(LockPin, LOW); } void readsensor() { lockread = digitalRead(LockPin); state = digitalRead(hall_sensor); //Serial.print(lockread); //Serial.print(state); // delay(2000); } void loop() { readsensor(); sensor(); // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor Serial.print("UID tag :"); String content= ""; byte letter; for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } Serial.println(); //Serial.print("Message : "); content.toUpperCase(); if (content.substring(1) == "E3 C5 21 15" ) //change here the UID of the card/cards that you want to give access { digitalWrite(LockPin, HIGH); Serial.println("Porta sbloccata"); digitalWrite(Buzzer, HIGH); delay(2000); digitalWrite(Buzzer, LOW); sensor(); } else { Serial.println("Non sei autorizzato"); digitalWrite(Buzzer, HIGH); delay(2000); digitalWrite(Buzzer, LOW); } } void sensor() { readsensor(); if (lockread == HIGH){ readsensor(); if(state==LOW){ digitalWrite(LockPin, LOW); Serial.println("Porta chiusa"); digitalWrite(Buzzer, HIGH); delay(2000); digitalWrite(Buzzer, LOW); } } } [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 1758 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.