This is an old revision of the document!


Guitar Tuner

Introducere

Proiectul constă într-un tuner pentru chitara electrică care detectează frecvența sunetelor produse de fiecare coardă a chitării și afișează pe un ecran LCD poziția acesteia față de valoarea dorită prin intermediul unui grafic intuitiv. Tuner-ul are două moduri de acordare: Standard Tuning și Drop D Tuning.

Descriere generală

Schema bloc:

Hardware Design

Listă de piese:

  • Arduino Uno
  • 2x breadboard
  • audio jack mono
  • TL082 Dual JFET Input Operational Amplifier
  • condensator electrolitic 10uF
  • condesator ceramic 100nF
  • Ecran LCD
  • Buton tactil 6x6x5mm
  • Potențiometru 10kΩ
  • rezistori (3x100kΩ, 1x22kΩ, 1x10kΩ, 1×220Ω)
  • 2x baterii 9V
  • fire jumper

Software Design

Am folosit mediul de dezvoltare Arduino IDE. Pentru afișarea pe ecranul LCD, am folosit biblioteca <LiquidCrystal.h>.

Pentru a calcula frecvența corzilor chitării, am folosit o întrerupere ADC: de fiecare dată când portul A0 al plăcuței Arduino primește o nouă valoare analog, se produce o întrerupere după algoritmul descris aici: https://www.instructables.com/Arduino-Frequency-Detection/.

Astfel, în rutina de întrerupere ADC, am ales o tensiune în limitele semnalului meu (2,5 V). Am contorizat evenimentele de prag în care unda a traversat acest nivel cu o pantă ascendentă. Dacă acest lucru s-a întâmplat de mai multe ori într-un ciclu, am ales ca evenimentul de prag cu cea mai mare pantă să fie începutul ciclului. Am folosit o variabilă numită „time” (incrementată la o rată de 38,5 kHz) pentru a măsura timpul dintre evenimentele de prag și am stocat valorile acesteia într-un array numit timer[]. De asemenea, am înregistrat panta la fiecare dintre evenimentele de prag într-un array numit slope[]. Apoi am comparat elementele timer[] și slope[] pentru a afla unde a fost o potrivire. Odată ce a fost găsită o potrivire, am adunat elementele timer[] pentru a determina durata ciclului și am trimis această valoare la o variabilă globală numită „period”. În funcția principală loop() folosesc valoarea perioadei pentru a calcula frecvența.

Această valoare este comparată apoi cu valorile de referință ale corzilor (în funcție de modul de acordare) pentru a determina ce coardă a fost atinsă și care este diferența de frecvență.

Printr-o altă întrerupere declanșată de apăsarea unui buton, stabilesc modul de acordare: Standard sau Drop D. Valorile frecvențelor pentru Standard Tuning sunt:

Coardă Frecvență (Hz)
E 82.4
A 110
D 146.8
G 196
B 246.9
e 329.6

Diferența în Drop D Tuning constă în valoarea frecvenței corzii E, aceasta fiind de 73.4 Hz.

Pe ecranul LCD, se va afișa litera ce reprezintă coarda acordată (E, A, D, G, B sau e), litera ce reprezintă modul de acordare (S sau D) și un grafic ce va indica diferența față de frecvența de referință.

Rezultate Obţinute

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.

Bibliografie/Resurse

pm/prj2022/amocanu/anastasia.smarandi.1654135396.txt.gz · Last modified: 2022/06/02 05:03 by anastasia.smarandi
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