Electric Guitar Tuner

Calugaritoiu Ion-Victor 332CAa

Introducere

Proiectul consta in realizarea unui acordor pentru chitare electrice/electro-acustice.

Descriere Generala

Aparatul va avea o mufa jack de 1/4 inch ca input de la instrument si va folosi un ecran LCD pentru a indica daca coarda lovita trebuie stransa sau slabita. Frecventa semnalului de intrare va fi amplificata folosind un amplificator operational si prelucrata folosind un microcontroller Arduino Uno Rev3, rolul sau fiind si acela de a detecta care coarda a fost actionata. Proiectul necesita 2 baterii de 9V pentru alimentarea Op-Amp-ului si dispune de un intrerupator ON/OFF.

Corzile au urmatoarele frecvente atunci cand sunt acordate corect in acordajul E standard:

  • E - 82.4 Hz
  • A - 110 Hz
  • D - 146.8 Hz
  • G - 196 Hz
  • B - 246.9 Hz
  • E - 329.6 Hz

Aparatul va detecta frecventa de input si o va compara cu aceste valori de referinta.

Schema Bloc:

Mod de functionare:

  1. Se porneste aparatul folosind switch-urile on-off;
  2. Se conecteaza cu chitara folosind un cablu cu mufa jack de 1/4 inch;
  3. Se ciupeste o coarda si se urmareste afisajul LCD; se afiseaza fie:
    • ”[nume coarda] is b”: coarda trebuie stransa, (b = bemol);
    • ”[nume coarda] is #”: coarda trebuie slabita;
    • ”[nume coarda] is in tune”: coarda este acordata corect:

Hardware Design

Schema electrica

Lista Componente

  • Arduino Uno Rev3
  • TL082 Op Amp
  • 9V Battery
  • 2.1mm DC barrel jack
  • toggle switch
  • 1/4” Audio Jack
  • 100kOhm Resistor
  • 10kOhm Resistor
  • 10uF Capacitor
  • 100nF Capacitor
  • 16×2 I2C LCD

Explicatii

1. Amplificatorul este prima etapă a circuitului, care mărește amplitudinea semnalului de la aproximativ +/-200mV la +/-2.5V (ideal), pentru a putea fi detectata de catre microcontroller.

  • Pentru a regla gain-ul amplificatorului am folosit o rezistenta de 10kOhm, aceasta avand rolul de a limita cat de mult va fi amplificat semnalul. Planuiesc sa inlocuiesc rezistorul cu un potentiometru, astfel avand un gain reglabil.
  • Rezistenta de 100kOhm este o rezistenta de feedback, fiind montata intre output-ul amplificatorului si intrarea sa neinversoare.

2. A doua etapa a circuitului consta in partea de DC offset; acest offset de +2.5V face ca semnalul audio să oscileze în jurul valorii de 2.5V, astfel încât să rămână în intervalul acceptabil pentru intrările analogice ale lui Arduino Uno (0-5V). Offset-ul este obtinut din doua componente:

  • un divizor de tensiune: este realizat din două rezistențe de 100k conectate în serie de la alimentarea de 5V a Arduino la masă. Deoarece rezistențele au aceeași rezistență, tensiunea la joncțiunea dintre ele este egală cu 2.5V.
  • un condensator: jonctiunea de 2.5V este legată la ieșirea amplificatorului printr-un condensator de 10uF. Pe măsură ce tensiunea de pe partea de amplificator a condensatorului crește și scade, aceasta face ca sarcina să se acumuleze momentan și să descarce pe partea atașată la divizor. Acest lucru face ca tensiunea să oscileze în sus și în jos, centrată în jurul valorii de 2.5V.

3. A treia etapa consta in conectarea microcontroller-ului cu display-ul LCD I2C. Dupa ce frecventa este prelucrata in partea de software, output-ul este transmis display folosind protocolul I2C - pinii analogici A4 si A5 de pe arduino sunt conectati la pinii SDA si SCL de pe convertorul I2C lipit pe LCD.

Software Design

Pentru functionarea corecta a aparatului este necesara detectarea frecventei semnalului audio (pitch-ul sunetului). https://www.instructables.com/Arduino-Frequency-Detection/

Implementarea se bazeaza pe cea amintita anterior, fiind adaptata la cerintele pe care trebuie sa le indeplineasca acordorul: detectia corzii lovite, afisarea si compararea frecventei corzii pe LCD.

Pentru a citi si prelucra semnalul de pe pin-ul analogic A0, a fost nevoie sa gasesc o metoda pentru a mari sampling rate-ul microcontroller-ului. Daca as fi folosit functia de analogRead, sample rate ul ar fi fost limitat la 8000Hz, fiind insuficient pentru aplicatii audio high definition.

Metoda prezentata in link-ul de mai sus este foarte eficienta, marind sampling rate-ul la 38.5kHz (foarte aproape de standardul minim de 40Khz).

  • Practic, în funcția setup() am configurat Arduino-ul pentru a masura continuu pinul A0 și să uite de celelalte intrări analogice. Variabila numită “ADCH” este cea care actualizata cu noile valori de la A0.
  • Am setat contorul ADC la 500kHz deoarece ADC-ul are nevoie de 13 cicluri de ceas pentru a citi o nouă valoare analogică. 500/13 =~ 38,5kHz.
  • A trebuit să reduc puțin rezoluția măsurătorilor analogice pentru a mari sampling-rate-ul. analogRead() returneaza valori intre 0 și 1023, acum aceste valori vor fi întotdeauna între 0 și 255.
  • Folosesc si o rutina de intrerupere pentru a updata variabila in care memorez input-ul (“newData”); Rutina este apelata doar cand o valoare noua este citita.

Codul se gaseste in arhiva din sectiunea de descarcari.

Rezultate Obţinute

Prototipul functioneaza conform asteptarilor, avand o precizie de acordaj foarte buna - comparata cu un acordor profesionist. Cu toate acestea, exista cateva puncte slabe ale aparatului, fiind susceptibil la zgomot si interferente din mediul extern, distorsionand semnalul de la chitara. Acest factor este prezent si la acordoarele din comert si nu este o problema majora pentru functionarea aparatului - este destul ca fiecare coarda sa fie reverificata dupa acordaj, astfel asigurandu-se ca zgomotul nu a influentat negativ precizia reglajelor.

Concluzii

In concluzie, realizarea unui acordor de chitare electrice folosind Arduino UNO este relativ facila, dificultatea principala constand in partea de frequency detection - software.

Download

Arhiva care contine codul Arduino si schemele bloc/electrice. arduino_guitar_tuner.zip

Bibliografie/Resurse

pm/prj2023/vstoica/electric-guitar-tuner.txt · Last modified: 2023/05/28 18:34 by ion.calugaritoiu
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