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:03]
anastasia.smarandi [Software Design]
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.
  
  
 ===== Hardware Design ===== ===== Hardware Design =====
 {{:​pm:​prj2022:​amocanu:​schema-electrica-guitar-tuner.png?​700|}} {{:​pm:​prj2022:​amocanu:​schema-electrica-guitar-tuner.png?​700|}}
 +
 +Modulele de Amplificator și de DC Offset au rolul de a aduce semnalul primit de la chitară între 0 și 5V și a-l centra în 2.5V pentru a putea fi citit de pinul A0 al plăcuței Arduino.
  
 Listă de piese: ​ Listă de piese: ​
Line 35: 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 58: Line 64:
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-[[https://www.youtube.com/watch?​v=G30w93ghCLI&​ab_channel=AnastasiaSmarandi|Video prezentare (versiune beta)]]+{{:​pm:​prj2022:​amocanu:​poza2-guitar-tuner.jpeg?​600|}} 
 + 
 +{{:​pm:​prj2022:​amocanu:​poza1-guitar-tuner.jpeg?​600|}} 
 + 
 +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 =====
  
 +Am învățat foarte multe lucrând la acest proiect. Nu mă așteptam ca detectarea frecvenței de intrare să fie o provocare așa de mare, dar acum simt că stăpânesc teoria din spate. Am plecat cu o altă idee inițial, aceea de a acorda chitara automat prin intermediul unui stepper sau servo motor care să acționeze cheițele. Din păcate, nu am anticipat la timp nevoia unor piese pentru motor, așa că am reconfigurat proiectul și am ales să adaug un ecran LCD pentru afișare și un al doilea mod de acordare. În final, sunt mulțumită de rezultat și de timpul petrecut lucrând la proiect. Mi-aș dori să îl îmbunătățesc,​ să lipesc toate componentele care sunt momentan pe breadboard și poate să îl folosesc de acum când îmi acordez chitara.
 ===== Download ===== ===== Download =====
  
-<note warning>​ +{{:pm:prj2022:amocanu:guitar_tuner.zip|}}
-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**. +
-</​note>​+
  
  
Line 77: 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.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