This shows you the differences between two versions of the page.
pm:prj2025:atoader:elisa.diaconita [2025/05/28 01:36] elisa.diaconita [Hardware Design] |
pm:prj2025:atoader:elisa.diaconita [2025/05/28 02:15] (current) elisa.diaconita [Bibliografie/Resurse] |
||
---|---|---|---|
Line 21: | Line 21: | ||
== Componente == | == Componente == | ||
^ Nume ^ Cantitate ^ Link ^ | ^ Nume ^ Cantitate ^ Link ^ | ||
- | | Arduino Mega | 1 | [[http://www.optimusdigital.ro/|Arduino Mega]] | | + | | Arduino Mega | 1 | [[https://www.optimusdigital.ro/ro/compatibile-cu-arduino-mega/471-placa-de-dezvoltare-compatibila-cu-arduino-mega-2560-atmega2560-ch340.html?search_query=arduino+mega&results=107|Arduino Mega]] | |
- | | Modul RFID RC522 | 1 | [[http://www.optimusdigital.ro/|Modul RFID RC522]] | | + | | Modul RFID RC522 | 1 | [[https://www.optimusdigital.ro/ro/wireless-rfid/67-modul-cititor-rfid-mfrc522.html?search_query=modul+rfid&results=13|Modul RFID RC522]] | |
- | | Keypad 4×4 | 1 | [[http://www.optimusdigital.ro/|Keypad 4x4]] | | + | | Keypad 4×4 | 1 | [[https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/470-tastatura-matriceala-4x4-cu-conector-pin-de-tip-mama.html?search_query=keypad&results=5|Keypad 4x4]] | |
- | | Servo Motor | 1 | [[http://www.optimusdigital.ro/|Servo Motor]] | | + | | Servo Motor | 1 | [[https://www.optimusdigital.ro/ro/motoare-servomotoare/26-micro-servomotor-sg90.html?search_query=servo+motor&results=145|Servo Motor]] | |
- | | LCD 16×2 + I2C | 1 | [[http://www.optimusdigital.ro/|LCD 16x2 cu I2C]] | | + | | LCD 16×2 + I2C | 1 | [[https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/2894-lcd-cu-interfata-i2c-si-backlight-albastru.html?search_query=lcd+i2c&results=17|LCD 16x2 cu I2C]] | |
| Breadboard | 1 | [[http://www.optimusdigital.ro/|Breadboard]] | | | Breadboard | 1 | [[http://www.optimusdigital.ro/|Breadboard]] | | ||
- | <note tip> | + | == Conexiuni esențiale == |
- | Aici puneţi tot ce ţine de hardware design: | + | ^ Componentă ^ Pin Arduino MEGA ^ Motiv conectare ^ |
- | * listă de piese | + | | RFID-RC522 - SDA | 53 | Pin SPI pentru selecția dispozitivului RFID | |
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | + | | RFID-RC522 - SCK | 52 | Pin SPI pentru semnalul de ceas (clock) | |
- | * diagrame de semnal | + | | RFID-RC522 - MOSI | 51 | Pin SPI pentru transmisia datelor de la Arduino | |
- | * rezultatele simulării | + | | RFID-RC522 - MISO | 50 | Pin SPI pentru recepția datelor spre Arduino | |
- | </note> | + | | RFID-RC522 - RST | 49 | Reset hardware pentru modul RFID | |
+ | | RFID-RC522 - GND | GND | Împământare comună | | ||
+ | | RFID-RC522 - 3.3V | 3.3V | Alimentare modul RFID (funcționează la 3.3V) | | ||
+ | | Keypad - ROW1–4 | 33, 35, 37, 39 | Citire rânduri de la tastatură | | ||
+ | | Keypad - COL1–4 | 31, 29, 27, 25 | Citire coloane de la tastatură | | ||
+ | | LCD I2C - SDA | 20 | Comunicare I2C – date | | ||
+ | | LCD I2C - SCL | 21 | Comunicare I2C – ceas | | ||
+ | | LCD I2C - VCC | 5V | Alimentare pentru display | | ||
+ | | LCD I2C - GND | GND | Împământare comună | | ||
+ | | Servomotor - Signal | 9 | Semnal PWM pentru controlul poziției | | ||
+ | | Servomotor - VCC | 5V | Alimentare servo | | ||
+ | | Servomotor - GND | GND | Împământare comună | | ||
+ | {{:pm:prj2025:atoader:proiect_elisa.png?300 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | == Mediu de dezvoltare == | ||
+ | * Arduino IDE | ||
- | <note tip> | + | == Biblioteci folosite == |
- | Descrierea codului aplicaţiei (firmware): | + | * Wire.h – pentru comunicarea I2C între Arduino și LCD |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * LiquidCrystal_I2C.h – pentru controlul afișajului LCD 16x2 cu interfață I2C |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * MFRC522.h – pentru interacțiunea cu modulul RFID RC522 |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * Servo.h – pentru controlul servomotorului |
- | * (etapa 3) surse şi funcţii implementate | + | * Keypad.h – pentru gestionarea tastaturii 4x4 |
- | </note> | + | |
- | ===== 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); | ||
+ | |||
+ | 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> | ||
- | ===== Jurnal ===== | + | 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> | ||