Differences

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

Link to this comparison view

pm:prj2025:aluca:vlad_andrei.muntean [2025/05/07 12:40]
vlad_andrei.muntean created
pm:prj2025:aluca:vlad_andrei.muntean [2025/05/24 18:16] (current)
vlad_andrei.muntean
Line 1: Line 1:
 ====== Acordor pentru chitara acustica ====== ====== Acordor pentru chitara acustica ======
 ===== Introducere ===== ===== Introducere =====
 +Un acordor de chitara acustica pe baza de senzor piezoelectric. Acesta va da feedback pentru fiecare coarda prin intermediul unui display LCD ce comunica prin I2C cu un microcontroller ESP32 C6. Acest acordor va citi informatia cu senzorul direct de pe suprafata instrumentului si va fi configurat pentru acordajul standard (Standard E tuning). Conectivitate bluetooth va fi incorporata pentru a trimite datele primite la un terminal pe telefon/​calculator.
 <note tip> <note tip>
-Prezentarea pe scurt a proiectului vostru+Functionalitati cheie
-  * ce face +  * Acordaj prin tensiuni piezoelectrice (ADC) 
-  * care este scopul lui +  * Feedback prin LCD (I2C) 
-  * care a fost ideea de la care aţi pornit +  * Comunicare prin terminal Bluetooth (Serial)
-  * de ce credeţi că este util pentru alţii şi pentru voi+
 </​note>​ </​note>​
 ===== Descriere generală ===== ===== Descriere generală =====
  
 <note tip> <note tip>
-O schemă bloc cu toate modulele proiectului vostruatât software cât şi hardware însoţită de o descriere a acestora precum şi modului în care interacţionează. +Proiectul are la baza folosirea protocoalelor studiate la laborator (ADCI2C, Serial) pentru ​oferi o solutie pentru acordarea chitarelor acustice ​carede obiciei, nu au metode incorporate pentru acordaj sa de conectare la o unitate de procesare audioIn cazul acesta, o doza piezoelectrica poate fi lipita de suprafata instrumentului si sa preia semnalul mecanic, trimitandu-l la microcontrollerPrin software, ideea de baza este descompunerea semnalului in frecventa si compararea frecventei dominante cu una de referinta, precizata de acordajul standard.
- +
-Exemplu ​de schemă bloc: http://www.robs-projects.com/​mp3proj/​newplayer.html+
 </​note>​ </​note>​
 +
 +Schema bloc a proiectului este urmatoarea:
 +
 +{{:​pm:​prj2025:​aluca:​schemabloc1.png?​600|}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
  
 <note tip> <note tip>
-Aici puneţi tot ce ţine de hardware design+Lista de piese
-  * listă de piese +  * ESP32 C6 
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +  * Ecran LCD I2C 
-  * diagrame de semnal ​ +  * Senzor Piezo 
-  * rezultatele simulării+  * Breadboard
 </​note>​ </​note>​
 +
 +Partea de hardware a acestui proiect se bazeaza intens pe functionalitatile microcontrollerului si a senzorului piezo electric. Prin intermediul pinului 0 (Analog 0), controllerul citeste o valoarea analogica de la iesirea tip signal a modulului de piezo. Rezultatul este printat pe ecranul LCD comunicand prin I2C. Pentru a evita proleme de conflict cu intrariile esp-ului (pin 8 shared pentru led builtin si pin 9 folosit pentru bootstrapping) am decis sa renunt la pinii default pentru I2C si sa folosesc pinii GPIO 14 si 15. Atat senzorul, cat si display-ul sunt alimentate prin intermediul placutei folosind pin-ul de 3V3. Configuratia bluetooth se va face prin intermediu software, deci nu este relevant sa mentionez comunicarea in aceasta sectiune. Nicio alta sursa nu este folosita de-a lungul proiectului.
 +
 +Configuratia functioneaza cum trebuie, senzorul piezo trebuie bine prins de pragusul chitarei si in momentul lovirii unei corzi citeste o frecventa aproximativa si o printeaza. Se poate vedea comunicarea intre senzor si display (in cazul de mai jos, nicio frecventa relevanta nu este citita) aici:
 +
 +{{:​pm:​prj2025:​aluca:​piezo_setup.jpg?​300|}}
 +
 +Schema electrica:
 +
 +
 +{{:​pm:​prj2025:​aluca:​piezo.png?​600|}}
 +
 +Bill of materials:
 +  * [[https://​ardushop.ro/​ro/​plci-de-dezvoltare/​2511-placa-de-dezvoltare-esp32-c6-super-mini-6427854038241.html?​gad_source=1&​gad_campaignid=22058879462&​gbraid=0AAAAADlKU-70EdchhEz-0EDDtvWV1XHs1&​gclid=CjwKCAjwuIbBBhBvEiwAsNypvTsdStOrgC1Sf6xmVZx0_i1hSfM51jZgqZ7t_R1lWeBkO5HtfFx9EBoCM6gQAvD_BwE|ESP32 C6 super mini]]
 +  * [[https://​ardushop.ro/​ro/​display-uri-si-led-uri/​2348-lcd-display-1602-verde-adaptor-i2c-6427854000996.html|LCD I2C]]
 +  * [[https://​ardushop.ro/​ro/​senzori/​816-senzor-vibratii-ceramic-6427854010612.html|Senzor piezo]]
 +  * [[https://​www.emag.ro/​kit-wireless-super-starter-cu-esp8266-programabil-cu-arduino-ide-x0012yt7g9/​pd/​DN82W2MBM/​|Breadboard 830 de puncte (inclus in kit plusivo)]]
  
 ===== Software Design ===== ===== Software Design =====
  
 +Codul din spatele acestui proiect are la baza citiri repetate de pe pin-ul analog al placii si procesarii intrarii. Fiind un acordor de chitara, nu este intuitiv sau util sa folosim valoarea returnata de analogRead (intreg 0-4095). Pentru a transforma tensiunea citita, este utilizat algoritmul de **Fast Fourier Transform**,​ cu care putem extrage o frecventa. Pentru a efectua aceasta transformare,​ la fiecare interval de timp se extrage un batch de sample-uri de tensiune (256 numarul optim) la o frecventa prestabilita (5 kHz), fiecare sample fiind salvat intr-o lista. Asupra listei se face descompunerea rezultata transformarii. Semnalul citit are un DC offset care este extras din fiecare componenta astfel:
 +
 +''​vReal[i] -= medie vReal / 256''​
 +
 +Rezultatul este supus transformarii Fourier, iar frecventa corzii este data de peak frequency.
 +
 +Pentru a interfata in mod placut frecventa, este folosit un vector de frecvente pentru fiecare coarda, alaturi de un vector cu numele corzilor. se va calcula minimul distantei intre frecventa gasita si toate elementele vectorului. Pozitia gasita ne va da coarda dorita. Daca o frecventa se regaseste la o distanta de -+ 3Hz este considerata acordata. Altfel, este indicata directia de acordare (higher/​lower). Frecventele sub 62Hz sau peste 440Hz sunt considerate zgomot si nu vor fi considerate in procesul de cautare.
 +
 +Rezultatul este afisat prin I2C catre un ecran LCD.
 +
 +In cazul in care dorim sa facem debugging pe tuner sau sa intelegem mai bine frecventele in joc, esp32 genereaza un server de BLE prin care utilizatorul se poate conecta remote prin telefon sau laptop. Cu ajutorul unui terminal fiecare frecventa va fi printata la momentul ciupirii unei corzi. Se poate observa comunicarea aici:
 +
 +{{:​pm:​prj2025:​aluca:​ble_freq.jpg?​300|}}
 +
 +Acest lucru se realizeaza prin generarea unui server folosind modulul incorporat din placa pentru a transmite datele in mod eficient si rezonabil din punct de vedere al consumului. Comunicarea este realizata prin UART, datele fiind transmise doar in cazul conexiunii unui utilizator. Comunicarea este unidirectionala,​ am restrictionat trimiterea de mesaje catre placuta din partea observatorilor.
  
 <note tip> <note tip>
-Descrierea codului aplicaţiei (firmware)+Aceasta etapa a fost implementata folosind urmatoarele biblioteci si resurse
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) +  * [[https://​github.com/​kosme/​arduinoFFT|ArduinoFFT Library]] 
-  * librării şi surse 3rd-party (e.gProcyon AVRlib) +  * [[https://​github.com/​johnrickman/​LiquidCrystal_I2C|I2C Liquid Crystal Display Library]] 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +  * [[https://​forum.arduino.cc/​t/​how-to-send-data-from-client-to-uart-ble-server/​1272255|ESP32 BLE UART Communication]]
-  * (etapa 3) surse şi funcţii implementate+
 </​note>​ </​note>​
 +
 +
 +Demo-ul proiectului:​
 +
 +<​html>​
 +    <iframe width="​560"​ height="​315" ​
 +            src="​https://​www.youtube.com/​embed/​EwQxJyeBTtw" ​
 +            title="​YouTube video player" ​
 +            frameborder="​0" ​
 +            allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share" ​
 +            allowfullscreen>​
 +    </​iframe>​
 +</​html>​
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
pm/prj2025/aluca/vlad_andrei.muntean.1746610813.txt.gz · Last modified: 2025/05/07 12:40 by vlad_andrei.muntean
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