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.
Schema bloc:
Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html
In plus, yala electrica are nevoie de alimentare de la o priza.Pe schema am folosit o baterie pentru a reprezenta asta.
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 "); } }
Cazul in care cartela RFID este gresita (cea mov):
Cazul in care cartela RFID este corecta (cea albastra):
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.
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