Nota

Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 con altri appassionati.

Perché unirsi?

  • Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.

  • Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni l’accesso anticipato agli annunci di nuovi prodotti e anteprime esclusive.

  • Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e Concorsi Festivi: Partecipa a concorsi e promozioni festive.

👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!

Sistema di Controllo Accessi

La funzione principale di questo codice è eseguire l’autenticazione dell’utente utilizzando un modulo RFID. Se l’autenticazione ha successo, controlla un motore passo-passo per aprire la porta ed emette un suono tramite un buzzer per indicare il risultato dell’autenticazione. Se l’autenticazione fallisce, la porta non si aprirà.

Puoi aprire il monitor seriale per visualizzare l’ID della tua carta RFID e riconfigurare la password in questo codice.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Elite Explorer Kit

300+

Elite Explorer Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTI

LINK ACQUISTO

Arduino Uno R4 WiFi

-

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Modulo MFRC522

ACQUISTA

Motore Passo-Passo

ACQUISTA

Cicalino

-

Modulo di Alimentazione

-

Collegamenti

Nota

Per proteggere il Power Pack del Modulo di Alimentazione, caricalo completamente prima di utilizzarlo per la prima volta.

../_images/09_access_bb.png

Schema Elettrico

../_images/09_access_schematic.png

Codice

Nota

  • Puoi aprire il file 09_access_control_system.ino nel percorso elite-explorer-kit-main\fun_project09_access_control_system direttamente.

  • Oppure copia questo codice nell’Arduino IDE.

Nota

  • La libreria RFID1 viene utilizzata qui. La libreria può essere trovata nella directory elite-explorer-kit-main/library/, oppure puoi cliccare qui RFID1.zip per scaricarla. Consulta Installazione Manuale per un tutorial su come installarla.

09_access_control_system.ino
  1/*
  2  The code is designed for an Arduino Uno R4 board and uses an MFRC522 RFID module, 
  3  a stepper motor, and a buzzer. The system serves as an RFID-based door lock. It 
  4  reads an RFID card and matches its ID with a pre-defined authenticated ID. If the 
  5  ID matches, the stepper motor turns to open the door, and a buzzer beeps to indicate 
  6  success. Otherwise, the buzzer beeps differently to indicate failure.
  7
  8  Board: Arduino Uno R4 
  9  Component: MFRC522 Module, Stepper Motor and Buzzer
 10*/
 11
 12
 13#include <rfid1.h>
 14#include <Stepper.h>
 15#include <Wire.h>
 16
 17#define ID_LEN 4
 18
 19/*Stepper Motor*/
 20const int stepsPerRevolution = 2048;  // Steps per revolution for stepper motor
 21const int rolePerMinute = 16;         // Motor speed in RPM
 22const int IN1 = 11;
 23const int IN2 = 10;
 24const int IN3 = 9;
 25const int IN4 = 8;
 26
 27/*Buzzer*/
 28const int buzPin = 12;
 29
 30/*Authentication Parameters*/
 31uchar userIdRead[ID_LEN] = { "" };
 32uchar userId[ID_LEN] = { 0x36, 0xE2, 0xC4, 0xF7 };  // Authenticated ID
 33bool approved = 0;
 34
 35RFID1 rfid;  //create a variable type of RFID1
 36Stepper stepper(stepsPerRevolution, IN1, IN3, IN2, IN4);
 37
 38void setup() {
 39  Serial.begin(9600);
 40  stepper.setSpeed(rolePerMinute);
 41  pinMode(buzPin, OUTPUT);
 42  rfid.begin(7, 5, 4, 3, 6, 2);
 43  rfid.init();  //initialize the RFID
 44  Serial.println("start");
 45}
 46
 47void loop() {
 48  // If not approved, try to read RFID
 49  if (approved == 0) {
 50    approved = rfidRead();
 51    for (int i = 0; i < ID_LEN; i++) {
 52      userIdRead[i] = NULL;  // Clear read ID
 53    }
 54  }
 55  // If approved, open the door
 56  if (approved == 1) {
 57    openDoor();
 58    approved = 0;  // Reset approval flag
 59  }
 60}
 61
 62void beep(int duration, int frequency) {
 63  for (int i = 0; i < frequency; i++) {
 64    digitalWrite(buzPin, HIGH);
 65    delay(duration);
 66    digitalWrite(buzPin, LOW);
 67    delay(100);
 68  }
 69}
 70
 71void verifyPrint(bool result) {
 72  if (result == true) {
 73    beep(100, 3);
 74    delay(400);
 75  } else {
 76    beep(500, 1);
 77    delay(400);
 78  }
 79}
 80
 81void openDoor() {
 82  int doorStep = 512;  //This means the door will open to 90 degrees
 83  stepper.step(doorStep);
 84  for (int i = 0; i < 5; i++) {
 85    delay(1000);
 86  }
 87  stepper.step(-doorStep);
 88}
 89
 90bool rfidRead() {
 91  getId();
 92  if (userIdRead[0] != NULL) {
 93    return idVerify();
 94  }
 95  return 0;
 96}
 97
 98void getId() {
 99  uchar status;
100  uchar str[MAX_LEN];
101  status = rfid.request(PICC_REQIDL, str);
102  if (status != MI_OK) {
103    return;
104  } else {
105    status = rfid.anticoll(str);
106    Serial.println("");
107    Serial.print("Reading Card ID: ");
108    if (status == MI_OK) {
109      for (int i = 0; i < ID_LEN; i++) {
110        userIdRead[i] = str[i];
111        Serial.print("0x");
112        Serial.print(userIdRead[i], HEX);
113        Serial.print(", ");
114      }
115    }
116    delay(500);
117    rfid.halt();
118    beep(150, 1);
119  }
120}
121
122bool idVerify() {
123  for (int i = 0; i < ID_LEN; i++) {
124    if (userIdRead[i] != userId[i]) {
125      verifyPrint(0);
126      return 0;
127    }
128  }
129  verifyPrint(1);
130  return 1;
131}

Come funziona?

Di seguito una spiegazione passo-passo del codice:

  1. Includere File di Libreria: Sono inclusi tre file di libreria: rfid1.h, Stepper.h e Wire.h. Queste librerie vengono utilizzate per comunicare con il modulo RFID, il motore passo-passo e per la comunicazione I2C.

  2. Definizioni di Costanti: Sono definite alcune costanti, tra cui ID_LEN (lunghezza dell’ID), stepsPerRevolution (passi per rivoluzione per il motore passo-passo), rolePerMinute (velocità del motore passo-passo), così come i quattro pin del motore passo-passo (IN1, IN2, IN3, IN4), il pin del buzzer (buzPin) e le variabili relative all’autenticazione.

  3. Definizioni di Variabili: Sono definite variabili come un array per memorizzare l’ID utente letto (userIdRead), l’ID utente autenticato (userId) e una variabile booleana (approved) per indicare l’autenticazione avvenuta con successo.

  4. Istanze di Oggetti: Sono create istanze di due oggetti: RFID1 rfid e Stepper stepper per interagire rispettivamente con il modulo RFID e il motore passo-passo.

  5. setup(): Nella funzione setup(), si inizializza la velocità del motore passo-passo, si imposta il pin del buzzer come output e si inizializza il modulo RFID.

  6. loop(): Nella funzione loop(), il codice principale viene eseguito. Se approved è 0 (indicando che l’autenticazione non è ancora avvenuta), chiama la funzione rfidRead() per leggere i dati dal modulo RFID e poi svuota l’array userIdRead. Se approved è 1 (indicando l’autenticazione avvenuta con successo), chiama la funzione openDoor() per aprire la porta e resetta approved a 0.

  7. beep(): Questa funzione controlla il suono del buzzer in base ai parametri duration e frequency forniti.

  8. verifyPrint(): Questa funzione emette suoni differenti tramite il buzzer in base al parametro result per indicare se l’autenticazione è avvenuta con successo o meno.

  9. openDoor(): Questa funzione controlla il motore passo-passo per aprire la porta a un certo angolo (doorStep) e poi attende un periodo prima di chiudere la porta.

  10. rfidRead(): Questa funzione legge i dati dal modulo RFID, prima chiamando getId() per ottenere l’ID utente e poi idVerify() per verificare se l’ID utente corrisponde all’ID autenticato.

  11. getId(): Questa funzione recupera l’ID utente dal modulo RFID e lo memorizza nell’array userIdRead. Emette un beep se la lettura fallisce.

  12. idVerify(): Questa funzione verifica se l’ID utente corrisponde all’ID autenticato ed emette un suono indicando se l’autenticazione è avvenuta con successo o meno.