This shows you the differences between two versions of the page.
pm:prj2025:atoader:elisa.diaconita [2025/05/28 01:53] elisa.diaconita [Software Design] |
pm:prj2025:atoader:elisa.diaconita [2025/05/28 02:15] (current) elisa.diaconita [Bibliografie/Resurse] |
||
---|---|---|---|
Line 53: | Line 53: | ||
===== Software Design ===== | ===== Software Design ===== | ||
- | **Mediu de dezvoltare:** - Proiectul a fost dezvoltat în **Arduino IDE**, un mediu open-source popular pentru programarea plăcilor Arduino. | + | == Mediu de dezvoltare == |
- | Librării utilizate (3rd-party): | + | * Arduino IDE |
- | Wire.h – pentru comunicarea I2C între Arduino și LCD | + | == Biblioteci folosite == |
- | LiquidCrystal_I2C.h – pentru controlul afișajului LCD 16x2 cu interfață I2C | + | * Wire.h – pentru comunicarea I2C între Arduino și LCD |
- | MFRC522.h – pentru interacțiunea cu modulul RFID RC522 | + | * LiquidCrystal_I2C.h – pentru controlul afișajului LCD 16x2 cu interfață I2C |
- | Servo.h – pentru controlul servomotorului | + | * MFRC522.h – pentru interacțiunea cu modulul RFID RC522 |
- | Keypad.h – pentru gestionarea tastaturii matriciale 4x4 | + | * Servo.h – pentru controlul servomotorului |
- | Algoritmi și structuri implementate: | + | * Keypad.h – pentru gestionarea tastaturii 4x4 |
- | Verificare UID RFID: cardurile sunt identificate pe baza unui cod unic (UID), care este comparat cu un UID predefinit. | + | == Flow-ul programului == |
- | Introducere parolă: utilizatorul poate introduce un cod PIN de la tastatură. Caracterele introduse sunt mascate pe ecranul LCD. | + | * Verificare UID RFID: cardurile sunt identificate pe baza unui cod unic (UID), care este comparat cu un UID predefinit. |
- | Verificare și autentificare: dacă UID-ul sau parola este corectă, accesul este permis, iar servomotorul deschide ușa. | + | * Introducere parolă: utilizatorul poate introduce un cod PIN de la tastatură. Caracterele introduse sunt mascate pe ecranul LCD. |
- | Afișare mesaje LCD: sistemul oferă feedback vizual pe LCD (e.g. „Access Granted”, „Incorrect Pass”, „Scan Card or Enter Password”). | + | * Verificare și autentificare: dacă UID-ul sau parola este corectă, accesul este permis, iar servomotorul deschide ușa. |
- | ===== Rezultate Obţinute ===== | + | * Afișare mesaje LCD: sistemul oferă feedback vizual pe LCD (e.g. „Access Granted”, „Incorrect Pass”, „Scan Card or Enter Password”). |
- | <note tip> | + | setup() |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Inițializare componente hardware și comunicații |
- | </note> | + | Configurare LCD pentru afișaj |
+ | Setare poziție servo inițială (ușă închisă) | ||
+ | <code> | ||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | SPI.begin(); | ||
+ | rfid.PCD_Init(); | ||
- | ===== Concluzii ===== | + | doorServo.attach(9); |
+ | doorServo.write(0); | ||
- | ===== Download ===== | + | lcd.begin(16, 2); |
+ | lcd.backlight(); | ||
+ | lcd.setCursor(0, 0); | ||
+ | lcd.print("Door Lock System"); | ||
- | <note warning> | + | delay(2000); |
- | 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ă ;-). | + | lcd.clear(); |
+ | lcd.print("Scan Card or"); | ||
+ | lcd.setCursor(0, 1); | ||
+ | lcd.print("Enter Password"); | ||
+ | } | ||
+ | </code> | ||
- | 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**. | + | loop() |
- | </note> | + | Citire date de la RFID |
+ | Verificare UID | ||
+ | Citire taste de la keypad și verificare parolă | ||
+ | <code> | ||
+ | void loop() { | ||
+ | if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { | ||
+ | String uid = ""; | ||
+ | for (byte i = 0; i < rfid.uid.size; i++) { | ||
+ | uid += String(rfid.uid.uidByte[i], HEX); | ||
+ | } | ||
+ | uid.toUpperCase(); | ||
+ | Serial.print("Card UID: "); | ||
+ | Serial.println(uid); | ||
- | ===== Jurnal ===== | + | if (uid == correctUID) { |
+ | openDoor(); | ||
+ | } else { | ||
+ | lcd.clear(); | ||
+ | lcd.print("Access Denied!"); | ||
+ | delay(2000); | ||
+ | lcd.clear(); | ||
+ | lcd.print("Scan Card or"); | ||
+ | lcd.setCursor(0, 1); | ||
+ | lcd.print("Enter Password"); | ||
+ | } | ||
+ | rfid.PICC_HaltA(); | ||
+ | } | ||
+ | </code> | ||
+ | Funcția openDoor() | ||
+ | Deschide ușa dacă accesul este permis | ||
+ | După 2 secunde închide ușa | ||
+ | Reafișează ecranul de start | ||
+ | <code> | ||
+ | void openDoor() { | ||
+ | lcd.clear(); | ||
+ | lcd.print("Access Granted!"); | ||
+ | doorServo.write(90); | ||
+ | delay(2000); | ||
+ | doorServo.write(0); | ||
+ | lcd.clear(); | ||
+ | lcd.print("Door Locked"); | ||
+ | delay(1000); | ||
+ | lcd.clear(); | ||
+ | lcd.print("Scan Card or"); | ||
+ | lcd.setCursor(0, 1); | ||
+ | lcd.print("Enter Password"); | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | ===== Rezultate obținute ===== | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | <note tip> |
+ | * Sistemul permite autentificarea atât prin card RFID, cât și prin cod PIN introdus de la tastatură. | ||
+ | * LCD-ul 16x2 cu interfață I2C afișează corect mesajele de status pentru utilizator (ex: „Access Granted”, „Incorrect Password” etc.). | ||
+ | * Servomotorul reacționează rapid la autentificarea validă, simulând deschiderea unei uși. | ||
+ | * Sistemul revine automat în starea inițială după fiecare acces. | ||
+ | * Timpul de răspuns este mic (sub 1 secundă) pentru ambele metode de autentificare. | ||
+ | * Sistemul este funcțional și poate fi folosit ca prototip pentru aplicații de control acces reale. | ||
</note> | </note> | ||
+ | ===== Concluzii ===== | ||
- | ===== Bibliografie/Resurse ===== | + | Mi-a placut acest proiect pentru că a fost pentru prima dată când am avut ocazia să implementez un proiect în Arduino. Pe parcursul dezvoltării proiectului: |
+ | * am folosit protocoale de comunicație precum SPI (pentru RFID) și I2C (pentru LCD), | ||
+ | * am folosit tehnici de citire și validare a datelor de intrare (UID RFID, cod tastatură), | ||
+ | * am exersat generarea semnalelor PWM pentru controlul servomotorului. | ||
+ | ===== Download ===== | ||
+ | |||
+ | Arhiva contine: | ||
+ | Codul sursă, schema electrică, imaginea proiectului | ||
+ | {{:pm:prj2025:atoader:proiect_pm_elisa.zip|}} | ||
- | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
- | </note> | ||
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||