This shows you the differences between two versions of the page.
pm:prj2022:arosca:door-lock [2022/05/27 15:35] vlad_vasile.marcu [Hardware Design] |
pm:prj2022:arosca:door-lock [2022/05/27 23:57] (current) vlad_vasile.marcu [Software Design] |
||
---|---|---|---|
Line 60: | Line 60: | ||
</note> | </note> | ||
+ | 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. | ||
+ | |||
+ | <code java> | ||
+ | |||
+ | |||
+ | #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 "); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 65: | Line 228: | ||
Care au fost rezultatele obţinute în urma realizării proiectului vostru. | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
</note> | </note> | ||
+ | Cazul de inceput: | ||
- | ===== Concluzii ===== | + | {{:pm:prj2022:arosca:poza1.jpeg?800|}} |
+ | Cazul in care cartela RFID este gresita (cea mov): | ||
+ | |||
+ | {{:pm:prj2022:arosca:poza2.jpeg?800|}} | ||
+ | |||
+ | Cazul in care cartela RFID este corecta (cea albastra): | ||
+ | |||
+ | {{:pm:prj2022:arosca:poza3.jpeg?800|}} | ||
+ | ===== 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 ===== | ===== Download ===== | ||
Line 76: | Line 254: | ||
</note> | </note> | ||
+ | {{:pm:prj2022:arosca:SistemDoorLock.zip|}} - Arhiva cu codul si librariile necesare pentru RFID si LCD I2C | ||
===== Jurnal ===== | ===== Jurnal ===== | ||