Differences

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

Link to this comparison view

pm:prj2022:amocanu:anastasia.smarandi [2022/06/02 05:29]
anastasia.smarandi [Download]
pm:prj2022:amocanu:anastasia.smarandi [2022/06/02 06:20] (current)
anastasia.smarandi [Bibliografie/Resurse]
Line 10: Line 10:
  
 {{:​pm:​prj2022:​amocanu:​schema-bloc-guitar-tuner.png?​600|}} {{:​pm:​prj2022:​amocanu:​schema-bloc-guitar-tuner.png?​600|}}
 +
 +Inputul de la chitara electrică trece printr-un modul de amplificare și unul de DC offset care modifică semnalul astfel încât să poată fi citit de pinul analog A0 al Arduino. Se compară frecvența corzii chitării cu frecvența de referință corespunzătoare acesteia și se afișează rezultatul pe un ecran LCD printr-un grafic ce indică dacă trebuie tensionată sau detensionată coarda. ​
 +
 +Pe lângă modul de acordare standard, se poate opta și pentru acordarea Drop D, folosită în mai multe melodii, în care cea mai joasă coardă (E) este adusă cu un ton mai jos. Schimbul între modurile de acordare se realizează prin apăsarea unui buton.
  
  
Line 37: Line 41:
 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/​. 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.+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 stocat ​această valoare ​într-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ță. ​+Frecvența obținută 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:  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: 
Line 64: Line 68:
 {{:​pm:​prj2022:​amocanu:​poza1-guitar-tuner.jpeg?​600|}} {{:​pm:​prj2022:​amocanu:​poza1-guitar-tuner.jpeg?​600|}}
  
-Tuner-ul are o acuratețe foarte ridicată, însă ​datorită ​zgomotului și a metodei alese pentru a-l evita (atingerea unei amplitudini minime pentru ca semnalul să fie procesat), corzile mai subțiri trebuie lovite mai tare pentru a fi interceptate.+Tuner-ul are o acuratețe foarte ridicată, însă ​din cauza zgomotului și a metodei alese pentru a-l evita (atingerea unei amplitudini minime pentru ca semnalul să fie procesat), corzile mai subțiri trebuie lovite mai tare pentru a fi interceptate. 
 + 
 +  * Link Youtube: [[https://​youtu.be/​8S3QeHoNdAY]]
  
 ===== Concluzii ===== ===== Concluzii =====
Line 80: Line 86:
   * https://​stanford.edu/​~mmhou/​Guitar_tuner_instructable.pdf   * https://​stanford.edu/​~mmhou/​Guitar_tuner_instructable.pdf
   * https://​www.ti.com/​lit/​ds/​symlink/​tl082-n.pdf?​ts=1653306138055&​ref_url=https%253A%252F%252Fwww.google.com%252F   * https://​www.ti.com/​lit/​ds/​symlink/​tl082-n.pdf?​ts=1653306138055&​ref_url=https%253A%252F%252Fwww.google.com%252F
 +  * https://​docs.arduino.cc/​learn/​electronics/​lcd-displays
 +  * https://​riptutorial.com/​arduino/​example/​9856/​interrupt-on-button-press
 +  * https://​www.renesas.com/​us/​en/​support/​engineer-school/​mcu-programming-peripherals-04-interrupts
  
 <​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/prj2022/amocanu/anastasia.smarandi.1654136999.txt.gz · Last modified: 2022/06/02 05:29 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