Table of Contents

Sistem de door-lock cu RFID

Autor

Vlad Marcu

Introducere

Sistem de blocare si deblocare a unui lock cu ajutorul tehnologiei RFID.Ecranul LCD va afisa mesaje in functie de validitatea semnalului introdus. De asemenea ledurile si buzzerul vor avea efecte in functie de semnal. In plus, voi adauga un buton care sa deblocheze lockul care va activa de altfel efectele de LCD buzzer si leduri.

Prezentarea pe scurt a proiectului vostru:

  • ce face
  • care este scopul lui
  • care a fost ideea de la care aţi pornit
  • de ce credeţi că este util pentru alţii şi pentru voi

Descriere generală

Schema bloc:

O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.

Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html

Hardware Design

Componente necesare:

  • Arduino Nano
  • Ecran LCD I2C
  • Senzor RFID
  • Relay Module
  • 2 rezistente de 220 ohm
  • Rezitenta de 1000ohm
  • Buzzer
  • Buton
  • Yala electrica de 12V
  • Modul conector DC 5.5 x 2.1mm pentru alimentare

In plus, yala electrica are nevoie de alimentare de la o priza.Pe schema am folosit o baterie pentru a reprezenta asta.

Software Design

Descrierea codului aplicaţiei (firmware):

  • mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR)
  • librării şi surse 3rd-party (e.g. Procyon AVRlib)
  • algoritmi şi structuri pe care plănuiţi să le implementaţi
  • (etapa 3) surse şi funcţii implementate

Pentru partea de RFID, am folosit libraria: https://github.com/miguelbalboa/rfid, iar pentru LCD-ul I2C libraria: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library. Putem activa lock-ul in doua moduri. Fie putem apasa pe buton, fie cu ajutorul cartelelor RFID. Cautam continuu semnale RFID si in cazul in care gasim semnalul setat de mine ca fiind cel corect deschidem lock-ul.In cazul in care semnalul este gresit vom afisa un mesaj sugestiv pe LCD si buzzer-ul va scoate un sunet specific unei erori.Pentru a porni propriu-zis lock-ul am folosit un relay module, iar pentru alimentarea sa in conector DC 5.5 x 2.1mm pentru a-l baga in priza.

 
#include <Wire.h>
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h> 
LiquidCrystal_I2C lcd(0x3F, 16, 2);
 
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 4 //led-ul verde
#define LED_R 5 //led-ul rosu
#define BUZZER 2 //buzzer-ul
#define lock 3 //pinul de la relay module
MFRC522 mfrc522(SS_PIN, RST_PIN);  
int btn = 6;
 
void setup() 
{
  Serial.begin(9600);   // Pornim comunicarea cu serialul
  SPI.begin();      
  mfrc522.PCD_Init();   // Initiem modulul MRFC522 pentru RFID
  pinMode(LED_G, OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  noTone(BUZZER);
  pinMode(btn,INPUT);
  pinMode(lock,OUTPUT);
  Serial.println("Place your card on reader...");
  Serial.println();
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0,0); // Punem cursorul la inceputul ecranului
  lcd.print(" Scan Your RFID "); 
  lcd.setCursor(0,1); 
  lcd.print("   Door Locked   ");
 
 }
void loop() 
{
//Aici deschidem lock-ul la apasarea butonului
if(digitalRead(btn) == HIGH){
 
    Serial.println("Access Granted");
    Serial.println();
    delay(500);
    digitalWrite(LED_G, HIGH);
    lcd.setCursor(0,1); 
    lcd.print(" Door Un-Locked ");
    tone(BUZZER, 2000);
    delay(100);
    noTone(BUZZER);
    delay(50);
    tone(BUZZER, 2000);
    delay(100);
    noTone(BUZZER);
    digitalWrite(lock,HIGH);
    delay(3000);
    digitalWrite(lock,LOW);
    delay(100);
    digitalWrite(LED_G, LOW);
    lcd.setCursor(0,1); 
    lcd.print("   Door Locked   ");
    tone(BUZZER, 2000);
    delay(100);
    noTone(BUZZER);
    delay(50);
  }
 
//Cautam mereu semnale RFID
 
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
 
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  //Afisam tag-ul cartelei RFID pe seriala
  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();
 
 
 //Daca semnalul RFID este corect, deschidem lock-ul 
 if (content.substring(1) == "3C 82 07 49") 
  {
    Serial.println("Access Granted");
    Serial.println();
    delay(500);
    digitalWrite(LED_G, HIGH);
    lcd.setCursor(0,1); // column, row
    lcd.print(" Door Un-Locked ");
    tone(BUZZER, 2000);
    delay(100);
    noTone(BUZZER);
    delay(50);
    tone(BUZZER, 2000);
    delay(100);
    noTone(BUZZER);
    digitalWrite(lock,HIGH);
    delay(3000);
    digitalWrite(lock,LOW);
    delay(100);
    digitalWrite(LED_G, LOW);
    lcd.setCursor(0,1); 
    lcd.print("   Door Locked   ");
    tone(BUZZER, 2000);
    delay(100);
    noTone(BUZZER);
    delay(50);
  }
 
else
{
    lcd.setCursor(0,1); 
    lcd.print("Invalid RFID Tag");
    Serial.println(" Access denied");
    digitalWrite(LED_R, HIGH);
    tone(BUZZER, 1500);
    delay(500);
    digitalWrite(LED_R, LOW);
    noTone(BUZZER);
    delay(100);
    digitalWrite(LED_R, HIGH);
    tone(BUZZER, 1500);
    delay(500);
    digitalWrite(LED_R, LOW);
    noTone(BUZZER);
    delay(100);
    digitalWrite(LED_R, HIGH);
    tone(BUZZER, 1500);
    delay(500);
    digitalWrite(LED_R, LOW);
    noTone(BUZZER);
    lcd.setCursor(0,1);
    lcd.print("   Door Locked   ");
 }
 }

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Cazul de inceput:

Cazul in care cartela RFID este gresita (cea mov):

Cazul in care cartela RFID este corecta (cea albastra):

Concluzii

Mi se pare un proiect util deoarece simuleaza un fel de interfon. Prima data voiam sa alimentez yala cu o baterie dar nu am gasit una de 12V, asa ca am preferat sa adaug un modul conector DC 5.5 x 2.1mm pentru a o alimenta direct de la priza. Am avut o problema cu modulul conector cand era legat aproape de modulul RFID, asa ca i-am schimbat pozitia si nu am mai avut probleme dupa. Ma gandesc ca se crease un fel de bruiaj.

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

sistemdoorlock.zip - Arhiva cu codul si librariile necesare pentru RFID si LCD I2C

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF