Differences

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

Link to this comparison view

pm:prj2026:ciprian.popescu0411:andrei.chiscaru [2026/05/06 13:23]
andrei.chiscaru [Hardware Design]
pm:prj2026:ciprian.popescu0411:andrei.chiscaru [2026/05/23 12:20] (current)
andrei.chiscaru [Bibliografie/Resurse]
Line 25: Line 25:
 ===== Hardware Design ===== ===== Hardware Design =====
  
-<note tip> 
-Aici puneţi tot ce ţine de hardware design: 
-  * listă de piese 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) 
-  * diagrame de semnal ​ 
-  * rezultatele simulării 
- 
-</​note>​ 
  
 Lista de componente hardware Lista de componente hardware
Line 50: Line 42:
  
  
 +Schema electrică și conexiuni
 +
 +{{ :​pm:​prj2026:​ciprian.popescu0411:​screenshot_2026-05-15_103910.png?​300 |}}
 +
 +
 +{{ :​pm:​prj2026:​ciprian.popescu0411:​whatsapp_image_2026-05-15_at_10.42.46.jpeg?​300 |}}
 +
 +
 +Circuitul a fost proiectat pentru a minimiza latența și a asigura o citire precisă a senzorilor. Conexiunile principale sunt structurate astfel:
 +
 +Sistemul de achiziție (Corzile optice): Este format din 4 fotorezistoare conectate în configurație de divizor de tensiune cu 4 rezistoare de 10kΩ. Punctul median al fiecărui divizor este conectat la pinii analogici ai microcontrolerului (PC0 - PC3 corespunzători A0 - A3). La acoperirea senzorului, valoarea rezistenței LDR crește, determinând o scădere a tensiunii citite de modulul ADC.
 +
 +Interfața de control (Butoanele):​ Cele 3 butoane tactile sunt conectate la pinii digitali PD2, PD3 și PD4. Acestea au fost configurate folosind rezistențele interne de tragere la pozitiv (pull-up) ale microcontrolerului (INPUT_PULLUP),​ circuitul închizându-se la masă (GND) în momentul apăsării (logic LOW).
 +
 +Feedback-ul vizual (Display ST7735): Ecranul TFT comunică prin protocolul hardware SPI pentru a asigura un refresh rapid al meniului. Au fost utilizați pinii dedicați: PB5 (SCK), PB3 (MOSI), PB2 (CS), PB1 (RES) și PB0 (DC).
 +
 +Feedback-ul auditiv (Buzzer): Modulul buzzer este conectat la pinul PD5. Sunetul este generat strict hardware, controlând frecvența prin modularea lățimii impulsurilor (PWM) via Timer intern.
 +
 +Validare și simulare
 +
 +Validarea funcționării componentelor și calibrarea pragurilor ADC (sensibilitatea la lumină) au fost realizate empiric, direct pe breadboard, prin testare succesivă și monitorizarea valorilor via UART / Ecran. Această metodă a permis o ajustare fină a răspunsului senzorilor în condiții reale de iluminare ambientală,​ eliminând necesitatea unei simulări software preliminare (precum Proteus) pentru calibrarea divizoarelor de tensiune.
 ===== Software Design ===== ===== Software Design =====
  
 +Acest capitol detaliază arhitectura firmware-ului dezvoltat pentru proiectul „Harpa Optică”, incluzând mediul de dezvoltare, librăriile externe utilizate, precum și descrierea algoritmilor și a funcțiilor implementate pentru controlul componentelor hardware.
 +
 +Mediul de dezvoltare
 +
 +Proiectul a fost dezvoltat și compilat folosind:
 +
 +IDE: Visual Studio Code cu extensia PlatformIO. Acest mediu oferă un control mai precis asupra procesului de compilare (toolchain-ul avr-gcc) și a gestionării dependențelor comparativ cu Arduino IDE.
 +
 +Framework: Arduino Core pentru AVR, facilitând abstractizarea de bază a unor pini, deși pentru funcțiile critice de timp s-a apelat la manipularea directă a regiștrilor.
 +
 +Upload Protocol: Programarea microcontrolerului ATmega328P de pe placa Xplained Mini s-a realizat direct prin interfața USB folosind utilitarul integrat (upload_flags = -Pusb).
 +
 +
 +Integrarea cunoștințelor din laboratoare
 +
 +Dezvoltarea aplicației se bazează puternic pe conceptele studiate pe parcursul semestrului. În mod specific, au fost aplicate cunoștințele din următoarele 3 laboratoare majore:
 +
 +Laboratorul 3: Timere. PWM - Folosit pentru generarea semnalului audio. S-a renunțat la funcțiile blocante de software în favoarea configurării directe a Timer-ului 2 în modul Fast PWM, generând semnalul direct pe pinul hardware OC2B.
 +
 +Laboratorul 4: ADC - Utilizat pentru preluarea datelor de la senzorii optici (LDR). Citirea celor 4 corzi se face într-o buclă, utilizând multiplexorul intern al modulului ADC pentru a scana secvențial pinii PC0-PC3 cu o latență minimă.
 +
 +Laboratorul 5: SPI - Aplicat pentru comunicarea cu ecranul TFT ST7735. S-a folosit interfața SPI hardware a microcontrolerului (pinii MOSI, SCK, CS) pentru a asigura o lățime de bandă suficientă pentru redesenarea rapidă a meniului și a graficelor.
 +
 +
 +Librării și surse 3rd-party
 +
 +Pentru a eficientiza dezvoltarea părții grafice și a comunicării SPI, au fost integrate următoarele librării open-source,​ gestionate prin fișierul platformio.ini:​
 +
 +Adafruit_GFX (de la Adafruit): O librărie grafică de bază, independentă de hardware, folosită pentru trasarea primitivelor geometrice (linii, dreptunghiuri) și randarea textului pe ecran.
 +
 +Adafruit_ST7735 (de la Adafruit): Driver-ul specific pentru controller-ul ecranului TFT. Acesta preia comenzile din librăria GFX și le traduce în pachete de date SPI înțelese de display-ul fizic.
 +
 +SPI.h (Standard Arduino): Inclusă pentru a inițializa bus-ul hardware SPI necesar librăriilor Adafruit.
 +
 +
 +Algoritmi și structuri de date implementate
 +
 +Logica programului nu se bazează pe sisteme de operare în timp real (RTOS), ci pe o arhitectură de tip Super-Loop combinată cu un Automat cu Stări Finite (FSM - Finite State Machine):
 +
 +State Machine pentru Meniu: Navigarea se face printr-o mașină de stări controlată de variabila paginaMeniu (cu valori de la 0 la 4). Aceasta dictează ce informații sunt randate pe ecran de funcția updateEcran() și cum sunt interpretate apăsările butoanelor.
 +
 +Algoritm de calcul pentru Hardware PWM: Pentru funcția customTone, s-a implementat un algoritm care primește frecvența dorită (în Hz) și calculează dinamic valoarea TOP pentru registrul OCR2A folosind formula modului Fast PWM, ținând cont de frecvența procesorului ($16 MHz$) și de un prescaler de $256$. Factorul de umplere este menținut automat la $50\%$ prin setarea OCR2B = OCR2A / 2.
 +
 +Debouncing Software: Apăsarea butoanelor este filtrată prin întârzieri scurte, prevenind înregistrările multiple false cauzate de imperfecțiunile mecanice ale contactelor.
 +
 +
 +Surse și funcții implementate
 +
 +Aplicația principală (main.cpp) este modularizată în următoarele funcții cheie:
 +
 +setup(): Rulează o singură dată la pornire. Inițializează comunicarea serială pentru debug, configurează pinii butoanelor cu rezistențe interne de pull-up și inițializează ecranul TFT (rotație, fundal, prim-plan).
 +
 +loop(): Bucla principală de execuție. Pollează continuu starea butoanelor pentru modificarea stărilor, scanează array-ul de senzori ADC și verifică dacă vreunul a depășit pragul (umbră). În funcție de rezultat, declanșează sunetul și actualizează interfața grafică.
 +
 +updateEcran():​ Funcție responsabilă de desenarea meniului text. Evaluează starea curentă a variabilei paginaMeniu și randează elementele corespunzătoare (selecție gamă, setare prag sensibilitate,​ mute).
 +
 +drawBars(int values[]): O funcție de nivel avansat grafic ce ia ca argument vectorul cu valorile brute ale senzorilor și randează un osciloscop/​histogramă simplificată pe ecran. Înălțimea și culoarea barelor se modifică dinamic pentru a oferi un feedback vizual al atingerii corzilor.
 +
 +customTone(float freq): Funcție proprie de generare a sunetului. Oprește Timer-ul 2, îl configurează în modul Mode 7 (Fast PWM cu TOP pe OCR2A), conectează pinul OC2B, setează regiștrii de frecvență și repornește timer-ul cu prescaler-ul adecvat.
 +
 +customNoTone():​ Oprește redarea notei deconectând fizic ieșirea Timer-ului 2 de pinul asociat buzzer-ului și forțând pinul în starea logică LOW pentru a preveni zgomotul rezidual.
  
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +În urma asamblării hardware și a dezvoltării firmware-ului,​ proiectul „Harpa Optică” a fost finalizat cu succes, rezultând un instrument muzical embedded autonom, complet funcțional,​ care nu mai depinde de un PC pentru configurare sau procesare. 
-Care au fost rezultatele obţinute ​în urma realizării proiectului vostru+ 
-</note>+Rezultatele finale pot fi împărțite pe următoarele direcții principale:​ 
 + 
 +Răspunsul Senzorilor (Latență minimă): Datorită utilizării citirii ADC în mod multiplexat și a implementării algoritmului de tip Super-Loop fără funcții blocante (fără delay-uri majore), sistemul reacționează instantaneu la interacțiunea utilizatorului. Detecția umbrei peste fotorezistoare declanșează nota muzicală corespunzătoare fără o întârziere perceptibilă auditiv
 + 
 +Generarea Sunetului (Hardware PWM): Înlocuirea funcțiilor software standard cu manipularea directă a Timer-ului 2 (modul Fast PWM) s-a dovedit un succes. Buzzer-ul pasiv redă clar frecvențele notelor muzicale din cele două game configurate (Do Major și La Minor), având un factor de umplere (Duty Cycle) stabil de 50%, ceea ce asigură o calitate optimă a sunetului fără a încărca procesorul. 
 + 
 +Interfața Om-Mașină (HMI): Integrarea ecranului TFT ST7735 pe interfața hardware SPI a permis crearea unui meniu de configurare fluid. Utilizatorul poate modifica în timp real parametri critici ai sistemului, precum: 
 +Gama muzicală activă. 
 +Sensibilitatea (pragul ADC) fotorezistoarelor,​ permițând calibrarea instantanee a harpei indiferent de lumina ambientală din cameră. 
 +Activarea/dezactivarea sunetului (Mute). 
 + 
 +Feedback Vizual Dinamic: Pe lângă meniul text, sistemul este capabil să redea pe ecran un grafic tip histogramă (bare verticale) care ilustrează în timp real valoarea analogică citită de pe fiecare coardă. Această vizualizare a fost obținută fără a compromite viteza de generare a sunetului. 
  
 ===== Concluzii ===== ===== Concluzii =====
  
 +Proiectul își atinge pe deplin scopul propus, demonstrând capabilitățile microcontrolerului ATmega328P de a gestiona simultan achiziție de date analogice, semnale de control digital (butoane), generare de semnale PWM și comunicare SPI rapidă, toate orchestrate de un firmware stabil și modular.
 ===== Download ===== ===== 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**. 
-</​note>​ 
  
 +{{:​pm:​prj2026:​ciprian.popescu0411:​chiscaru_andrei_332cb_proiect.zip|}}
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +Faza de cercetare ​și achiziție componente
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
  
 +Stabilirea temei „Harpa Optică” și validarea ideii cu asistentul de laborator.
 +
 +Achiziționarea componentelor (Placa Xplained Mini, 4x LDR, display ST7735, buzzer, butoane).
 +
 +Realizarea primului montaj de test pe breadboard pentru divizoarele de tensiune aferente fotorezistoarelor.
 +
 +Implementarea citirii ADC și a sunetului de bază
 +
 +Scrierea codului pentru citirea multiplexată a pinilor analogici (A0-A3).
 +
 +Conectarea buzzer-ului pasiv și testarea inițială folosind funcția standard tone().
 +
 +Problemă întâmpinată:​ Latență la schimbarea notelor. Soluție: Trecerea de la delay-uri software la o citire rapidă în buclă (Super-Loop).
 +
 +Integrarea display-ului ST7735 (SPI)
 +
 +Conectarea ecranului TFT la pinii SPI hardware (PB2-PB5).
 +
 +Problemă întâmpinată:​ Ecranul rămânea alb sau pâlpâia.
 +
 +Soluție: Analiza schemei electrice a ecranului a relevat prezența unui regulator LDO (U4), permițând alimentarea sigură la 5V. S-au reverificat lipiturile firelor de semnal pentru a asigura un contact ferm, rezolvând blocajul de inițializare.
 +
 +Adăugarea interfeței de control (Butoane)
 +
 +Montarea celor 3 butoane tactile pe pinii PD2, PD3, PD4 folosind rezistențele interne de pull-up.
 +
 +Problemă întâmpinată:​ Butoanele citeau constant LOW sau HIGH fără a schimba starea la apăsare.
 +
 +Soluție: Reconfigurarea hardware a butoanelor folosind „regula diagonalei” pe breadboard pentru a asigura închiderea corectă a circuitului către GND.
 +
 +Dezvoltarea mașinii de stări (FSM) pentru meniul grafic (Schimbare Gamă, Setare Sensibilitate,​ Mute, Vizualizare bare analogice).
 +
 +Optimizare avansată (Hardware PWM) și finalizare
 +
 +La recomandarea laborantului,​ funcția blocantă tone() a fost complet eliminată.
 +
 +Implementarea funcției customTone() prin configurarea directă a Timer-ului 2 în modul Fast PWM (Mode 7) pe pinul OC2B (D3).
 +
 +Testarea finală a întregului sistem, calibrarea valorilor de sensibilitate la lumina ambientală,​ redactarea documentației hardware/​software și generarea arhivei finale.
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +Pentru ​proiectarea hardware-ului ​și dezvoltarea firmware-ului la nivel de regiștriau fost consultate ​următoarele ​documentații tehnice ​oficiale ​și manuale de utilizare: 
-Pentru ​a respecta cerințele stricte legate de plagiat ​și surseadaugă ​următoarele ​link-uri ​oficiale: ​+ 
 +Microchip Technology, ATmega328P Datasheet 
 + 
 +Scop: Înțelegerea arhitecturii interne, configurarea regiștrilor ADC pentru citirea multiplexată,​ setarea interfeței hardware SPI și manipularea Timer-ului 2 pentru generarea semnalului Fast PWM (Hardware PWM). 
 + 
 +Sitronix, ST7735 Color TFT Controller Datasheet
  
-1. Microchip Technology, ATmega328P Datasheet - pentru ​configurarea regiștrilor ADC, SPI, Timere ​și PWM.+Scop: Consultat ​pentru ​secvențele de inițializareformatul pachetelor de date pe magistrala ​SPI și înțelegerea setului de comenzi necesar pentru randarea grafică pe display.
  
-2. SitronixST7735 Color TFT Controller Datasheet - pentru secvențele de inițializare și comenzi SPI.+Microchip TechnologyATmega328P Xplained Mini Hardware User Guide
  
-3. Microchip Technology, ATmega328P Xplained Mini Hardware User Guide - pentru ​pinout-ul și capabilitățile plăcii de dezvoltare.+Scop: Identificarea corectă a pinout-ului fizic (porturile PB, PC, PD) și capabilităților de alimentare/​conectare ale plăcii de dezvoltare ​pentru integrarea componentelor externe.
  
-4. Documentație tehnică senzori fotorezistivi ​(LDR GL5528) ​- pentru curba de răspuns la lumină și calculul divizorului de tensiune.+Datasheet Senzori Fotorezistivi ​(LDR GL5528)
  
-</​note>​+Scop: Analiza curbei de răspuns la lumină (rezistență în funcție de lux) necesară pentru dimensionarea corectă a rezistoarelor fixe (10kΩ) și calculul matematic al divizoarelor de tensiune.
  
 <​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/andrei.chiscaru.1778063011.txt.gz · Last modified: 2026/05/06 13:23 by andrei.chiscaru
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