Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:ciprian.popescu0411:alexandru.dabija04 [2026/05/09 15:15]
alexandru.dabija04 created
pm:prj2026:ciprian.popescu0411:alexandru.dabija04 [2026/05/24 20:33] (current)
alexandru.dabija04
Line 1: Line 1:
-====== ​Touring Car ======+====== ​Voting ​======
 ===== Introducere ===== ===== Introducere =====
  
-<note tip> +Acest proiect reprezinta un sistem electronic de vot creat pentru a simplifica si securiza procesul de autentificare si exprimare a votului. Sistemul permite verificarea utilizatorilor ​pe baza unor carduri individuale si ofera posibilitatea de vota rapid intre doua optiuni disponibile,​ centralizand automat rezultatele finale. 
-Prezentarea ​pe scurt proiectului vostru: + 
-  * ce face +Scopul proiectului ​este de a demonstra modul in care un proces de vot poate fi realizat intr-un mod eficient, organizat si usor de utilizat, reducand posibilitatea erorilor si voturilor multiple. Ideea de la care am pornit ​a fost necesitatea unui sistem accesibil care sa poata valida identitatea alegatorilor si sa ofere un raspuns imediat privind dreptul ​de acces la vot.
-  * care este scopul lui +
-  * care a fost ideea de la care aţi pornit +
-  * de ce credeţi că este util pentru alţii şi pentru voi +
-</​note>​+
 ===== Descriere generală ===== ===== Descriere generală =====
 +{{:​pm:​prj2026:​ciprian.popescu0411:​dabija_alexandru_catalin_334cd_block_schema.png?​500|}}
  
-<note tip> +  * Sistemul implementat reprezinta o platforma electronica de vot care permite autentificarea utilizatorilor si exprimarea votului intr-un mod rapid si securizat. Fiecare utilizator utilizeaza un card RFID/NFC pentru identificare,​ iar sistemul verifica automat daca acesta exista in lista de votanti eligibili incarcata anterior de pe calculator. 
-O schemă bloc cu toate modulele proiectului vostruatât software cât şi hardware ​însoţită ​de o descriere a acestora precum şi a modului în care interacţionează.+ 
 +  * Dupa validare, utilizatorul primeste un raspuns vizual si sonor care indica daca accesul la vot este permis sau respins. In cazul autentificarii ​cu succesalegatorul poate selecta una dintre cele doua optiuni disponibile folosind butoanele fizice. 
 + 
 +  * Sistemul gestioneaza automat procesul de validare, prevenirea votului multiplu, inregistrarea voturilor si afisarea rezultatelor finale pe display. Interactiunea dintre componentele ​hardware ​si software este coordonata ​de microcontroller, ​care controleaza citirea datelor, logica de votare si semnalele de feedback.
  
-Exemplu de schemă bloc: http://​www.robs-projects.com/​mp3proj/​newplayer.html 
-</​note>​ 
  
 ===== Hardware Design ===== ===== Hardware Design =====
 +Lista de piese:
 +
 +  * Placa de dezvoltare ATmega328P Xplained Mini: Microcontrollerul principal care gestioneaza logica votarii, validarea ID-urilor si controlul perifericelor.
 +
 +  * Modul LCD 1602 cu Backlight Albastru de 3.3 V cu interfata I2C: Ecran utilizat pentru afisarea intrebarilor,​ instructiunilor de vot si a rezultatelor finale.
 +
 +  * Modul RFID RC522 13.56MHz cu card si tag prin SPI: Cititor utilizat pentru scanarea cardurilor de identitate si autentificarea nominala a alegatorilor.
 +
 +  * Carduri sau Tag-uri RFID/NFC: Suporturi de date individuale folosite de alegatori pentru a se identifica in mod unic in sistem.
 +
 +  * 2 Butoane Fizice: Componente pentru input utilizate de alegatori pentru a-si exprima optiunea de vot prin apasare.
 +
 +  * Modul buzzer pasiv KY-006: Utilizat pentru confirmarea sonora a scanarii cardului sau semnalizarea incercarilor de vot multiplu.
 +
 +  * LED-uri (Verde si Rosu): Indicatori vizuali pentru starea procesului (acces permis, respectiv acces respins sau eroare).
 +
 +  * Rezistente de Pull-down/​Pull-up:​ Componente pasive folosite pentru a asigura citirea corecta a starilor butoanelor fizice.
 +
 +  * Breadboard 400 puncte: Suport pentru realizarea conexiunilor hardware si prototiparea rapida a circuitului fara lipire.
 +
 +  * Fire Dupont Tata-Tata si Tata-Mama: Conductori utilizati pentru legaturile electrice intre placa, senzori, butoane si afisaj.
 +
 +  * Cablu de date (USB): Cablu utilizat pentru programarea microcontrolerului si comunicarea UART cu PC-ul pentru configurarea listei de votanti.
 +
 +
 +Placa este alimentată direct prin cablul USB.
 +Pinul GND al plăcuței este conectat la șina de GND a breadboard-ului,​ iar pinul de 5V este conectat la șina de VCC a breadboard-ului.
 +
 +Butoanele sunt configurate hardware în mod pull-down, utilizând rezistoare externe de 10 kΩ conectate între pinul de semnal și masă (GND). Astfel, în stare de repaus, microcontroller-ul citește un nivel logic LOW stabil, iar la apăsarea butonului circuitul se închide, generând un semnal HIGH pe pinii PC0 și PC1.
 +
 +LED-urile sunt configurate astfel încât un nivel logic HIGH le aprinde, iar LOW le stinge. Între VCC și LED-uri este conectată o rezistență de limitare a curentului, utilizată pentru protecție.
 +
 +Modulul RFID RC522 este conectat direct la placă, fără a utiliza breadboard-ul. Acesta funcționează la 3.3V, nu la 5V.
 +
 +Pentru LCD, deoarece nu a fost utilizat un potențiometru,​ am facut un divizor de tensiune (foloseam pwm dar acesta dadea un puls instabil si uneori aparea gibberish pe lcd)
 +Modul LCD 1602
 +
 +^ Pin componenta ^ Legatura ^
 +| VSS | GND breadboard |
 +| VDD | VCC breadboard |
 +| V0 | div tenisiunde format din 1 rez 1k 2 rez 380 si o rez 10k|
 +| RS | PD7 microcontroller |
 +| RW | GND breadboard |
 +| E | PB0 microcontroller |
 +| D4 | PD2 microcontroller |
 +| D5 | PD3 microcontroller |
 +| D6 | PD4 microcontroller |
 +| D7 | PD5 microcontroller |
 +| A | 23b breadboard |
 +| K | GND breadboard |
 +| rez 380 ohm | 23a - VCC breadboard |
 +
 +RFID-RC522
 +
 +^ Pin componenta ^ Legatura ^
 +| SDA | PB2 microcontroller |
 +| SCK | PB5 microcontroller |
 +| MOSI | PB3 microcontroller |
 +| MISO | PB4 microcontroller |
 +| GND | GND microcontroller |
 +| RST | PB1 microcontroller |
 +| 3V3 | 3V3 microcontroller |
 +
 +buzzer pasiv KY-006
 +
 +^ Pin componenta ^ Legatura ^
 +| minus (-) | GND breadboard |
 +| VCC | VCC breadboard |
 +| S | PC5 microcontroller |
 +
 +BTN1
 +
 +^ Pin componenta ^ Legatura ^
 +| leg 1 | PC0 microcontroller |
 +| leg 2 | GND breadboard |
 +| rezistenta 10k ohm | leg1 - VCC breadboard |
 +
 +BTN2
 +
 +^ Pin componenta ^ Legatura ^
 +| leg 1 | PC1 microcontroller |
 +| leg 2 | GND breadboard |
 +| rezistenta 10k ohm | leg1 - VCC breadboard |
 +
 +LED VERDE
 +
 +^ Pin componenta ^ Legatura ^
 +| minus (-) | GND breadboard |
 +| plus (+) | j14 |
 +| rez 380 ohm | f14 - PC3 breadboard |
 +
 +LED ROSU
 +
 +^ Pin componenta ^ Legatura ^
 +| minus (-) | GND breadboard |
 +| plus (+) | j20 |
 +| rez 380 ohm | f20 - PC2 breadboard |
 +
 +
 +
 +
 +
 +{{:​pm:​prj2026:​ciprian.popescu0411:​dabija_alexandru_catalin_hw.jpeg?​500|}}
 +
 +
 +
 +====== Software Design ======
 +
 +      * Demo: https://​youtube.com/​shorts/​VWpsEvxI2Nw
 +      * github: https://​github.com/​dabijaAlex/​Voting
 +
 +Proiectul a fost dezvoltat in PlatformIO, folosind framework-ul Arduino pentru microcontrolerul ATmega328P. Codul este scris in C++ si este complet modularizat pentru a asigura o structura curata si o mentenanta usoara. ​
 +
 +Sistemul utilizeaza intrari si iesiri digitale (GPIO) pentru controlul LED-urilor de stare, butoanelor de vot (YES/NO) si al buzzerului. De asemenea, firmware-ul integreaza comunicatia hardware pe magistrala SPI pentru cititorul de carduri RFID, bit-banging software pe 4 biti pentru ecranul LCD paralel si comunicatia UART (USART0) prin Serial Monitor pentru configurare,​ control si logarea cardurilor neautorizate.
  
-<note tip> +Arhitectura modulara a codului
-Aici puneţi tot ce ţine de hardware design+  * **config.h**:​ Centralizeaza toate definitiile ​de pini hardware (LED-uri, buzzer, butoane, pini SPI si LCD) si constantele globale (debounce, dimensiuni maxime). 
-  * listă de piese +  * **global_vars.global_vars.cpp**: Gestioneaza alocarea de memorie si partajarea sigura a variabilelor de stare, vectorilor de votanti si obiectelor prin directiva ''​extern''​. 
-  ​scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.ghttp://www.captain.at/electronic-atmega16-mmc-schematic.png) +  * **lcd.lcd.cpp**: Contine driverul grafic de control pentru ecranul paralel si algoritmul inteligent de wrapping al textului
-  * diagrame ​de semnal ​ +  * **audio.h / audio.cpp**:​ Gestioneaza semnalele acustice emise de buzzer pentru interactiunea cu utilizatorul. 
-  * rezultatele simulării +  * **utils.h ​utils.cpp**:​ Include logica de parsare a string-urilor Hex, verificarea semnaturilor UID si initializarea initiala a perifericelor. 
-</note>+  * **main.cpp**:​ Reprezinta orchestratorul principal ce contine rutinele de intrerupere si masina de stari.
  
-===== Software Design =====+Functii principale implementate:​
  
 +^ Functie ^ Rol ^
 +| main() | Punctul de intrare obligatoriu in aplicatia C++. Initializeaza timerele si registrii interni prin functia Arduino ''​init()''​ si ruleaza intr-o bucla infinita programul. |
 +| setup() | Configureaza starea initiala a perifericelor hardware, porneste comunicatia seriala, magistrala SPI, cititorul RFID si ecranul LCD, aducand sistemul intr-o stare stabila de functionare. |
 +| loop() | Reprezinta bucla principala a programului. Verifica asincron buffer-ul serial si ruteaza logica aplicatiei prin intermediul unui automat cu 9 stari logice distincte. |
 +| ISR(PCINT1_vect) | Rutina de intrerupere pe schimbarile de pin (Port C). Gestioneaza debouncing-ul software prin timestamp-uri ''​millis()''​ pentru a inregistra corect apasarile butoanelor de vot YES si NO. |
 +| lcd_init() | Initializeaza fizic ecranul LCD paralel in modul de lucru pe 4 biti, trimitand secventele de initializare si setand parametrii de afisare (cursor dezactivat, directia de scriere). |
 +| lcd_command(uint8_t cmd) | Trimite o comanda de control catre registrul de instructiuni al LCD-ului (ex: curatare ecran, deplasare cursor) utilizand o abordare sigura cu blocarea temporara a intreruperilor. |
 +| lcd_data(uint8_t data) | Transmite un octet de date catre registrul RAM (DDRAM) al LCD-ului pentru a afisa un caracter specific pe ecran la pozitia curenta a cursorului. |
 +| lcd_display_message() | Afiseaza mesaje pe ecranul LCD. Include un algoritm inteligent de wrapping care cauta ultimul spatiu (''​ ' ' ''​) din primele 16 caractere pentru a muta textul pe randul doi fara a rupe cuvintele. |
 +| sound_buzzer() | Genereaza o frecventa bruta pe pinul buzzerului, comutand starea logica HIGH/LOW la un interval specific de microsecunde pentru o durata determinata de milisecunde. |
 +| play_accept_sound() | Ruleaza o secventa acustica scurta si ascutita pentru a confirma vizual si auditiv ca un card valid a fost scanat si accesul la vot a fost permis. |
 +| play_denied_sound() | Genereaza un ton grav si prelungit pentru a semnala o eroare critica sau incercarea de utilizare a unui card neautorizat. |
 +| play_warning_sound() | Emite un semnal acustic intermitent de avertizare pentru a notifica utilizatorul ca un votant autorizat incearca sa introduca un buletin de vot duplicat. |
 +| check_uid_match() | Compara octet cu octet o semnatura UID scanata de la un card RFID cu baza de date locala a sesiunii pentru a determina validitatea acesteia. |
 +| clear_rfid_cache() | Curata complet structura interna de date a cititorului MFRC522 si buffer-ul UID pentru a pregati senzorul pentru o noua citire corecta. |
 +| parse_uid_string() | Convertecte string-ul ASCII de 8 caractere hexazecimale primit din Serial Monitor in octeti fizici de date pentru a putea fi stocati si comparati in memorie. |
 +| print_unauthorized_uid() | Formateaza si transmite prin USART0 catre Serial Monitor un mesaj de alerta ce contine ID-ul hexazecimal complet al unui card respins, permitand monitorizarea tentativelor de frauda. |
  
-<note tip> +Logica Automatului de Stari (State Machine): 
-Descrierea codului aplicaţiei ​(firmware): +Sistemul tranzitioneaza dinamic intre 9 stări: ''​STATE_SLEEPING'' ​(asteapta comanda "​start"​), ''​STATE_SETUP_QUESTION''​ (salveaza intrebarea), ''​STATE_SETUP_VOTERS''​ (configureaza numarul si UID-urile votantilor),​ ''​STATE_SHOW_WELCOME'' ​(solicita card), ''​STATE_WAIT_FOR_CARD'' ​(interogheaza RFID si blocheaza butoanele), ''​STATE_VOTING_PROMPT''​ (asteapta alegerea YES/NO), ''​STATE_ACCESS_DENIED''​ (card necunoscut),​ ''​STATE_ALREADY_VOTED''​ (vot duplicat) si ''​STATE_FINISHED''​ (afisare rezultate finale).
-  * mediu de dezvoltare ​(if any(e.g. AVR StudioCodeVisionAVR) +
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3surse şi funcţii implementate +
-</note>+
  
-===== Rezultate Obţinute =====+Interceptia Globala de Reset: 
 +La fiecare iteratie din ''​loop()'',​ sistemul verifica registrul hardware ''​UCSR0A''​. Daca se detecteaza cuvantul cheie **"​reset"​** primit prin terminal, logica normala a starii curente este suprascrisa instantaneu. Sistemul curata toate datele din buffer, reseteaza flag-urile (inclusiv variabila globala de printare seriala ''​printed_final''​) si aduce sistemul inapoi in starea initiala de veghe (''​STATE_SLEEPING''​).
  
-<note tip> +Biblioteci folosite:
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii =====+^ Biblioteca ^ Rol ^ 
 +| Arduino.h | Functii de baza pentru interactiunea cu hardware-ul ATmega328P: control GPIO, gestionare timere, delay, macro-uri de bit. | 
 +| SPI.h | Gestioneaza comunicatia pe magistrala hardware SPI (pinii MOSI, MISO, SCK) pentru transferul de date de mare viteza cu perifericele active. | 
 +| MFRC522.h | Asigura driverul software complet pentru controlul cipului RFID MFRC522, acoperind initializarea antenei, citirea si incarcarea UID-ului. | 
 +| usart.h | Modul extern dezvoltat in C dedicat interactiunii directe cu registrii USART0 (UBRR0, UCSR0B, UDR0) pentru transmisia si receptia pe interfata seriala. |
  
-===== Download ===== 
  
-<note warning> 
-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ă ;-). 
  
-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**. +===== Resurse Hardware =====
-</​note>​+
  
-===== Jurnal =====+  * **Placa de dezvoltare ATmega328P Xplained Mini**: https://​www.microchip.com/​en-us/​development-tool/​atmega328p-xmini 
 +  * **Documentatie Laborator PM (Xplained Mini)**: https://​ocw.cs.pub.ro/​courses/​pm/​proiect/​xplainedmini 
 +  * **Schema si Cablaj PM-Board**: https://​github.com/​dantudose/​PM-Board
  
-<note tip> 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. 
-</​note>​ 
  
-===== Bibliografie/​Resurse =====+===== Resurse ​Software ​=====
  
-<​note>​ +  * **MFRC522 Library**: https://​github.com/​miguelbalboa/​rfid 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +  * **SPI Library**: https://​github.com/​arduino/​ArduinoCore-avr/​tree/​master/​libraries/​SPI 
-</note>+  ​* **Arduino Core for AVR Framework**:​ https://​github.com/​arduino/​ArduinoCore-avr 
 +  * **AVR Libc (util/delay.h)**: https://​www.nongnu.org/​avr-libc/​user-manual/​group__util__delay.html
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2026/ciprian.popescu0411/alexandru.dabija04.1778328924.txt.gz · Last modified: 2026/05/09 15:15 by alexandru.dabija04
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0