Differences

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

Link to this comparison view

pm:prj2026:andrei.batasev:ciprian.munteanu04 [2026/05/03 23:20]
ciprian.munteanu04 created
pm:prj2026:andrei.batasev:ciprian.munteanu04 [2026/05/18 23:33] (current)
ciprian.munteanu04
Line 1: Line 1:
-====== ​Nume proiect ​======+====== ​Vocal Coach ====== 
 +Ciprian-Marian Munteanu, 332CB 
 ===== Introducere ===== ===== Introducere =====
  
-<note tip> +Vocal Coach este un dispozitiv embedded care ajuta utilizatorul 
-Prezentarea pe scurt a proiectului vostru: +sa exerseze intonatia vocala. Dispozitivul reda o nota muzicala de 
-  * ce face +referinta folosind un buzzer pasiv, capteaza vocea utilizatorului 
-  * care este scopul lui +printr-un microfon analogic cu amplificare,​ analizeaza semnalul audio 
-  * care a fost ideea de la care aţi pornit +folosind algoritmul Goertzel si ofera feedback in timp real: nota 
-  * de ce credeţi că este util pentru alţii şi pentru voi +cantata ​este prea joasa (LOW), corecta (OK) sau prea inalta (HIGH).
-</​note>​ +
-===== Descriere generală =====+
  
-<note tip> +Ideea a pornit de la nevoia unui instrument simplu si accesibil pentru 
-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ă.+incepatorii in muzica, care sa permita exersarea intonatiei fara a 
 +depinde de un smartphone sau conexiune la internet. Spre deosebire de 
 +aplicatiile generale de tuning, acest dispozitiv este construit special 
 +pentru antrenament vocal pe un set restrans de note (A2-A3), ceea ce il 
 +face fezabil pe hardware cu resurse limitate.
  
-Exemplu de schemă blochttp://www.robs-projects.com/mp3proj/newplayer.html +**Repository GitHub:** https://github.com/ciprianmunteanu1/vocal-coach 
-</note>+ 
 +===== Descriere generala ===== 
 + 
 +{{:​pm:​prj2026:​andrei.batasev:​diagrama_bloc.png?​600|}} 
 + 
 +Sistemul este organizat in urmatoarele module: 
 + 
 +**Module hardware:​** 
 +  * **Intrare audio** — microfon MAX4466 capteaza vocea utilizatorului,​ iesirea analogica conectata la ADC-ul Arduino 
 +  * **Iesire audio** — buzzer pasiv reda nota de referinta prin PWM 
 +  * **Feedback vizual** — modul LED semafor (rosu/galben/​verde) 
 +  * **Afisaj** — OLED 128x64 I2C afiseaza starea sistemului, nota tinta si rezultatul 
 +  * **Intrare utilizator** — 3 butoane (START/​NEXT/​BACK) si potentiometru pentru selectarea notei tinta 
 + 
 +**Module software:​** 
 +  * **Masina de stari** — IDLE -PLAY_NOTE -> LISTEN_ANALYZE -> RESULT 
 +  * **Esantionare ADC** — citire microfon pe ADC0 si potentiometru pe ADC1 
 +  * **Motor Goertzel contextual** — compara nota tinta cu vecinii sai inferior si superior 
 +  * **Validare semnal** — detectie amplitudine prea mica si clipping 
 +  * **Logica feedback** — decide LOW, OK, HIGH, NO SIG sau LOUD 
 + 
 +**Interactiunea modulelor:​** 
 +Utilizatorul selecteaza nota tinta cu potentiometrul. La apasarea START, 
 +Arduino reda nota pe buzzer, apoi intra intr-o fereastra de ascultare 
 +in care ADC-ul esantioneaza microfonul. Algoritmul Goertzel contextual 
 +proceseaza semnalul in mod streaming si compara energia pentru nota tinta, 
 +nota inferioara si nota superioara. Rezultatul este afisat pe OLED si prin 
 +modulul LED.
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
-<note tip> +==== Lista de componente ==== 
-Aici puneţi tot ce ţine de hardware design: + 
-  * listă ​de piese +^ Componenta ​                        ^ Cantitate ^ Rol                          ^ 
-  ​* scheme electrice (se pot lua şi de pe Internet şi din datasheet-urie.ghttp://www.captain.at/electronic-atmega16-mmc-schematic.png) +| Arduino Nano ATmega328P + CH340    | 1         | Microcontroller principal ​   | 
-  * diagrame ​de semnal ​ +| Modul microfon MAX4466 ajustabil ​  | 1         | Intrare audio                | 
-  * rezultatele simulării +| Afisaj OLED 128x64 I2C SSD1306 ​    | 1         | Afisare informatii ​          | 
-</​note>​+| Buzzer pasiv 5V                    | 1         | Redare nota de referinta ​    | 
 +| Modul LED semafor 3.3-5V ​          | 1         | Feedback vizual ​             | 
 +| Buton tactil 6x6x5mm ​              | 3         | Intrare utilizator ​          | 
 +| Potentiometru 10K WH148            | 1         | Selectare nota tinta         | 
 +| Tranzistor NPN 2N2222 / BC337      | 1         | Driver pentru buzzer ​        | 
 +| Rezistor 1K ohm                    | 1         | Limitare curent baza tranzistor | 
 +| Rezistor 220 ohm                   | 5         | Limitare curent LED-uri / rezerve | 
 +| Condensator electrolitic 10uF      | 2         | Filtrare alimentare ​         | 
 +| Condensator ceramic 100nF          | 1         | Decuplare locala microfon, optional | 
 +| Breadboard 830 puncte ​             | 1         | Platforma ​de prototipare ​    | 
 +| Fire Dupont tata-tata / mama-tata ​ | 40+40     | Interconectare ​              | 
 +| Cablu USB                          | 1         | Alimentare si programare ​    | 
 + 
 +==== Schema electrica ==== 
 + 
 +{{:​pm:​prj2026:​andrei.batasev:​cm_electrical_schematic.png?​600|}} 
 + 
 +Schema electrica prezinta conexiunile dintre Arduino Nano si modulele externe. Microfonul MAX4466 este conectat la intrarea analogica A0, potentiometrul la A1, OLED-ul foloseste magistrala I2C prin pinii A4/SDA si A5/SCL, iar buzzerul pasiv este controlat ​de pe pinul D9. 
 + 
 +In varianta finala, buzzerul este comandat printr-un tranzistor NPN pentru a evita solicitarea directa a pinului microcontrollerului. Pentru primele testebuzzerul poate fi conectat temporar direct intre D9 si GND, dar varianta cu tranzistor este preferata pentru montajul final. 
 + 
 +Butoanele sunt conectate intre pini digitali si GND, urmand sa fie citite in software folosind rezistentele interne de pull-up ale microcontrolleruluiModulul LED semafor este controlat prin trei pini digitali separati, cate unul pentru fiecare culoare. 
 + 
 +==== Tabel conexiuni ==== 
 + 
 +^ Semnal ​Componenta ^ Pin componenta ^ Pin Arduino Nano ^ Observatii ^ 
 +| MAX4466 | VCC | 5V | Alimentare modul microfon | 
 +| MAX4466 | GND | GND | Masa comuna | 
 +| MAX4466 | OUT | A0 | Semnal audio analogic catre ADC | 
 +| Potentiometru 10K | pin lateral 1 | 5V | Capat divizor de tensiune | 
 +| Potentiometru 10K | pin mijloc | A1 | Valoare analogica pentru selectarea notei | 
 +| Potentiometru 10K | pin lateral 2 | GND | Masa | 
 +| OLED SSD1306 | VCC | 5V | Alimentare display, daca modulul este compatibil 3V-5V | 
 +| OLED SSD1306 | GND | GND | Masa comuna | 
 +| OLED SSD1306 | SDA | A4 SDA | Magistrala I2C | 
 +| OLED SSD1306 | SCL | A5 SCL | Magistrala I2C | 
 +| Buzzer pasiv | + | 5V | Alimentare buzzer in varianta cu tranzistor | 
 +| Buzzer pasiv | | Colector tranzistor NPN | Comandat prin tranzistor | 
 +| Tranzistor NPN | Baza | D9 prin rezistor 1K | Semnal BUZZER_DRV | 
 +| Tranzistor NPN | Colector | Buzzer ​| Comutare buzzer catre GND | 
 +| Tranzistor NPN | Emitor | GND | Masa comuna | 
 +| LED semafor | R | D4 | LED rosu, feedback LOW | 
 +| LED semafor | Y | D5 | LED galben, redare nota / feedback HIGH | 
 +| LED semafor | G | D6 | LED verde, feedback OK | 
 +| LED semafor | GND | GND | Masa comuna | 
 +| Buton START | pin 1 | D2 | Configurat INPUT_PULLUP | 
 +| Buton START | pin 2 | GND | Apasat = LOW | 
 +| Buton NEXT | pin 1 | D3 | Configurat INPUT_PULLUP | 
 +| Buton NEXT | pin 2 | GND | Apasat = LOW | 
 +| Buton BACK | pin 1 | D7 | Configurat INPUT_PULLUP | 
 +| Buton BACK | pin 2 | GND | Apasat = LOW | 
 +| Condensator 10uF | + | 5V | Filtrare alimentare | 
 +| Condensator 10uF | | GND | Atentie la polaritate | 
 +| Condensator 100nF | intre VCC si GND | langa MAX4466 | Optional, decuplare locala | 
 + 
 +==== Alimentare ==== 
 + 
 +Dispozitivul este alimentat prin portul USB al placii Arduino Nano, de la laptop sau de la un power bank de 5V. Alimentarea prin USB este suficienta pentru versiunea curenta a proiectului,​ deoarece modulele folosite au consum redus: microfonul MAX4466, OLED-ul, buzzerul pasiv si modulul LED semafor
 + 
 +Toate modulele folosesc masa comuna (GND). Alimentarea ​de 5V este distribuita catre microfon, OLED, potentiometru,​ modul LED si buzzer. 
 + 
 +Pentru reducerea zgomotului pe alimentare, se folosesc condensatori de filtrare intre 5V si GND. Condensatorul electrolitic de 10uF ajuta la stabilizarea alimentarii,​ iar un condensator ceramic de 100nF poate fi adaugat langa microfon pentru decuplare locala.
  
 ===== Software Design ===== ===== Software Design =====
  
 +Implementarea finala este realizata in PlatformIO, in C bare-metal pentru
 +Arduino Nano cu ATmega328P la 16 MHz. Proiectul nu foloseste framework-ul
 +Arduino sau biblioteci externe pentru OLED/I2C, ci acceseaza direct registrele
 +microcontrollerului.
  
-<note tip> +Codul este impartit modular:
-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 =====+^ Fisier ^ Rol ^ 
 +| main.c | Initializare module, masina de stari, ecrane OLED si feedback LED | 
 +| gpio.c/h | Configurare butoane si LED-uri | 
 +| adc.c/h | Citire microfon pe ADC0 si potentiometru pe ADC1 | 
 +| timer.c/h | Tick de 1 ms pentru temporizari si debounce | 
 +| buzzer.c/h | Generare nota pe buzzer folosind Timer1 si OC1A / D9 | 
 +| goertzel.c/​h | Analiza audio si feedback LOW / OK / HIGH | 
 +| twi.c/h | Comunicare I2C/TWI cu OLED-ul | 
 +| ssd1306.c/h | Afisare text pe OLED SSD1306 | 
 +| uart.c/h | Debug prin USART0 |
  
-<note tip> +==== Masina de stari ==== 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+ 
-</note>+Aplicatia foloseste patru stari: 
 + 
 +^ Stare ^ Descriere ^ 
 +| IDLE | Utilizatorul selecteaza nota tinta cu potentiometrul| 
 +| PLAY_NOTE | Buzzerul reda nota de referinta timp de aproximativ 900 ms. | 
 +| LISTEN_ANALYZE | Microfonul este citit, iar semnalul este analizat. | 
 +| RESULT | Rezultatul este afisat pe OLED si prin LED-uri. | 
 + 
 +Butoanele controleaza aplicatia astfel: 
 +  * START porneste testul pentru nota selectata. 
 +  * NEXT alege o nota aleatoare diferita. 
 +  * BACK revine la nota redata anterior. 
 + 
 +==== Periferice folosite ==== 
 + 
 +  * **GPIO:** butoane si LED-uri prin DDRD, PORTD si PIND. 
 +  * **ADC:** microfon pe ADC0 A0 si potentiometru pe ADC1 / A1. 
 +  * **Timer0:** tick de 1 ms pentru temporizari. 
 +  * **Timer1:** semnal pentru buzzer pe D9 / PB1 / OC1A. 
 +  * **USART0:** mesaje de debug. 
 +  * **TWI/​I2C:​** comunicare cu OLED-ul SSD1306 pe A4/SDA si A5/SCL. 
 + 
 +==== Algoritmul Goertzel contextual ==== 
 + 
 +Pentru analiza audio se foloseste algoritmul Goertzel contextual. Pentru fiecare 
 +nota tinta sunt comparate doar trei frecvente:​ 
 + 
 +  * nota inferioara — LOW 
 +  * nota tinta — OK 
 +  * nota superioara — HIGH 
 + 
 +Gama folosita este A2-A3, adaptata pentru bass-bariton:​ 
 + 
 +  A2, B2, C3, D3, E3, F3, G3, A3 
 + 
 +Aceasta abordare este mai simpla decat o detectie completa de pitch si este 
 +potrivita pentru resursele limitate ale ATmega328P. Semnalul este analizat pe 
 +mai multe ferestre, iar rezultatul final este ales prin vot. 
 + 
 +==== Afisare OLED ==== 
 + 
 +OLED-ul SSD1306 este controlat printr-un driver text-only propriu. Nu se foloseste 
 +un framebuffer complet, pentru a economisi SRAM. OLED-ul afiseaza starea curenta, 
 +nota tinta si rezultatul, iar detaliile de debug sunt trimise prin USART. 
 + 
 +===== Rezultate Obtinute ===== 
 + 
 +Proiectul final este functional pe Arduino Nano cu ATmega328P, fara framework-ul 
 +Arduino. Au fost integrate butoanele, potentiometrul,​ microfonul MAX4466, 
 +buzzerul, LED-urile si OLED-ul SSD1306. 
 + 
 +Dispozitivul permite selectarea unei note tinta din gama A2-A3, reda nota de 
 +referinta si apoi analizeaza semnalul captat de microfon. Feedback-ul este afisat 
 +pe OLED si prin LED-uri: LOW, OK, HIGH, NO SIG sau LOUD. 
 + 
 +Proiectul a fost testat treptat: GPIO, ADC, buzzer, Goertzel, OLED si integrarea 
 +finala. Testarea finala a fost facuta cu voce. 
 + 
 +Utilizarea finala de resurse raportata de PlatformIO este: 
 + 
 +^ Resursa ^ Utilizat ^ Total ^ Procent ^ 
 +| Flash | 9964 bytes | 30720 bytes | 32.4% | 
 +| SRAM | 856 bytes | 2048 bytes | 41.8% |
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+Proiectul demonstreaza realizarea unui sistem embedded de antrenament vocal pe 
 +Arduino Nano, folosind programare bare-metal pentru ATmega328P.
  
-<note warning> +Algoritmul Goertzel contextual permite detectarea relatiei dintre nota cantata si 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisursescheme, etcUn fişier README, un ChangeLog, un script ​de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+nota tintaLOWOK sau HIGHDriverul OLED text-only si procesarea streaming au 
 +ajutat la mentinerea unui consum redus de memorie.
  
-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**. +Sistemul nu este un tuner vocal general, ci un antrenor pentru o gama restransa 
-</note>+de note. Pentru scopul proiectului,​ aceasta solutie ​este suficienta si eficienta. 
 + 
 +===== Download ===== 
 + 
 +**Repository GitHub:** https://github.com/ciprianmunteanu1/​vocal-coach
  
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +^ Data ^ Activitate ^ 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +| Etapa 1 | Documentatie initiala, lista componente, schema bloc | 
-</note>+| Etapa 2 | Realizare schema electrica in KiCad, validare conexiuni hardware pe breadboard | 
 +| Etapa 3 | Testare GPIO: butoane START/NEXT/BACK si LED-uri prin registre | 
 +| Etapa 4 | Testare ADC pentru potentiometru si microfon MAX4466 | 
 +| Etapa 5 | Implementare buzzer cu Timer1 pe OC1A / D9 | 
 +| Etapa 6 | Implementare si testare algoritm Goertzel contextual prin USART | 
 +| Etapa 7 | Implementare driver TWI/I2C si SSD1306 text-only | 
 +| Etapa 8 | Integrare finala: masina de stari, OLED, LED feedback, buzzer si analiza audio | 
 +| Etapa 9 | Testare finala cu voce |
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +**Resurse ​Hardware:** 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse ​Software** şi **Resurse Hardware**. + 
-</note>+  ​[[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|ATmega328P Datasheet]] — Microchip 
 +  ​[[https://​www.analog.com/​media/​en/​technical-documentation/​data-sheets/​MAX4465-MAX4469.pdf|MAX4465-MAX4469 Datasheet]] — Analog Devices / Maxim Integrated 
 +  ​[[https://​cdn-shop.adafruit.com/​datasheets/​SSD1306.pdf|SSD1306 Datasheet]] — Solomon Systech 
 +  * [[https://​docs.arduino.cc/​hardware/​nano/​|Arduino Nano Hardware Documentation]] — Arduino
  
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​+**Resurse Software:**
  
 +  * [[https://​en.wikipedia.org/​wiki/​Goertzel_algorithm|Goertzel Algorithm]]
pm/prj2026/andrei.batasev/ciprian.munteanu04.1777839608.txt.gz · Last modified: 2026/05/03 23:20 by ciprian.munteanu04
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