This shows you the differences between two versions of the page.
|
pm:prj2025:atoader:elisa.diaconita [2025/05/28 01:56] elisa.diaconita [Software Design] |
pm:prj2025:atoader:elisa.diaconita [2025/05/28 02:15] (current) elisa.diaconita [Bibliografie/Resurse] |
||
|---|---|---|---|
| Line 56: | Line 56: | ||
| * Arduino IDE | * Arduino IDE | ||
| - | == Librări == | + | == Biblioteci folosite == |
| * Wire.h – pentru comunicarea I2C între Arduino și LCD | * Wire.h – pentru comunicarea I2C între Arduino și LCD | ||
| * LiquidCrystal_I2C.h – pentru controlul afișajului LCD 16x2 cu interfață I2C | * LiquidCrystal_I2C.h – pentru controlul afișajului LCD 16x2 cu interfață I2C | ||
| Line 63: | Line 63: | ||
| * Keypad.h – pentru gestionarea tastaturii 4x4 | * Keypad.h – pentru gestionarea tastaturii 4x4 | ||
| - | ===== Rezultate Obţinute ===== | + | == Flow-ul programului == |
| + | * Verificare UID RFID: cardurile sunt identificate pe baza unui cod unic (UID), care este comparat cu un UID predefinit. | ||
| + | * Introducere parolă: utilizatorul poate introduce un cod PIN de la tastatură. Caracterele introduse sunt mascate pe ecranul LCD. | ||
| + | * Verificare și autentificare: dacă UID-ul sau parola este corectă, accesul este permis, iar servomotorul deschide ușa. | ||
| + | * 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 ===== | ||
| <note tip> | <note tip> | ||
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 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> | ||