Acordor pentru chitara acustica

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.

Functionalitati cheie:

  • Acordaj prin tensiuni piezoelectrice (ADC)
  • Feedback prin LCD (I2C)
  • Comunicare prin terminal Bluetooth (Serial)

Descriere generală

Proiectul are la baza folosirea protocoalelor studiate la laborator (ADC, I2C, Serial) pentru a oferi o solutie pentru acordarea chitarelor acustice care, de obiciei, nu au metode incorporate pentru acordaj sa de conectare la o unitate de procesare audio. In cazul acesta, o doza piezoelectrica poate fi lipita de suprafata instrumentului si sa preia semnalul mecanic, trimitandu-l la microcontroller. Prin software, ideea de baza este descompunerea semnalului in frecventa si compararea frecventei dominante cu una de referinta, precizata de acordajul standard.

Schema bloc a proiectului este urmatoarea:

Hardware Design

Lista de piese:

  • ESP32 C6
  • Ecran LCD I2C
  • Senzor Piezo
  • Breadboard

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:

Schema electrica:

Bill of materials:

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:

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.

Aceasta etapa a fost implementata folosind urmatoarele biblioteci si resurse:

Demo-ul proiectului:

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/aluca/vlad_andrei.muntean.txt · Last modified: 2025/05/24 18:16 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