Hei kaverit, viime viikkojen aikana olen työskennellyt uudelleen rakkauteni kitaraa kohtaan. Laatikkakitaran soittaminen oli miten rentoutun muutama vuosi sitten ennen kuin saksofoni otti haltuunsa. Palatakseni kitaralle, löysin kolmen vuoden ajan harvoin sointua, muun muassa, että en enää tiennyt, kuinka jokaisen jousen tulisi kuulostaa, sanoen ystäväni sanoin: "Kuuloni ei enää viritty" ja Tämän seurauksena en voinut virittää kitaraa ilman näppäimistöä tai myöhemmin ladattua mobiilisovellusta. Viikot menivät muutama päivä sitten, kun tekijä minussa motivoitui ja päätin rakentaa Arduino-pohjaisen kitaravirittimen. Tämänpäiväisessä opetusohjelmassa jaan kuinka rakentaa oma DIY Arduino -kitaraviritin.
Kuinka kitaraviritin toimii
Ennen kuin siirrymme elektroniikkaan, on tärkeää ymmärtää rakentamisen taustalla oleva periaate. Aakkosilla on 7 merkittävää nuottia; A, B, C, D, E, F, G ja päättyvät yleensä toisella A: lla, joka on aina oktaavilla korkeampi kuin ensimmäinen A. Musiikissa on olemassa useita näiden nuottien versioita, kuten ensimmäinen A ja viimeinen A. erotetaan kukin vaihteluistaan ja toisistaan äänen ominaisuuksilla, jotka tunnetaan sävelkorkeudena. Piki määritellään äänenvoimakkuuden tai mataluutta äänen ja sen on osoitettu taajuus, että ääni. Koska näiden nuottien taajuus on tiedossa, meidän on vain vertailtava tietyn jousen nuotin taajuutta merkkijonon todelliseen taajuuteen, jotta voimme määrittää, onko kitara viritetty.
Seitsemän nuotin taajuudet ovat:
A = 27,50 Hz
B = 30,87 Hz
C = 16,35 Hz
D = 18,35 Hz
E = 20,60 Hz
F = 21,83 Hz
G = 24,50 Hz
Näiden nuottien kukin muunnos on aina sävelkorkeudella, joka on yhtä suuri kuin FxM, jossa F on taajuus ja M on nollasta poikkeava kokonaisluku. Siten viimeisen A: n, joka on kuvattu aiemmin, oktaavilla korkeampi kuin ensimmäinen A, taajuus on;
27,50 x 2 = 55 Hz.
Kitarassa (lyijy / laatikkokitara) on yleensä 6 jousea, jotka on merkitty nuotteilla E, A, D, G, B, E avoimella kielellä. Kuten tavallista, viimeinen E on oktaavilla korkeampi kuin ensimmäinen E. Suunnittelemme kitaravirittimemme auttamaan virittämään kitaraa näiden nuottien taajuuksilla.
Kitaran virityksen mukaan jokaisen kielen nuotti ja sitä vastaava taajuus on esitetty alla olevassa taulukossa.
Jouset |
Taajuus |
Merkintä |
1 (E) |
329,63 Hz |
E4 |
2 (B) |
246,94 Hz |
B3 |
3 (G) |
196,00 Hz |
G3 |
4 (D) |
146,83 Hz |
D3 |
5 (A) |
110,00 Hz |
A2 |
6 (E) |
82,41 Hz |
E2 |
Hankevirta on hyvin yksinkertainen; muunnamme kitaran tuottaman äänisignaalin taajuudeksi ja verrataan sitten viritettävän kielen tarkkaan taajuusarvoon. Kitaristille ilmoitetaan LED-valolla, kun arvo korreloi.
Taajuuden havaitseminen / muuntaminen käsittää 3 päävaihetta;
- Vahvistava
- Kuittaus
- Analogisesta digitaalimuunnokseen (näytteenotto)
Tuotettava äänisignaali on liian heikko Arduinon ADC: n tunnistamiseksi, joten meidän on vahvistettava signaalia. Vahvistuksen jälkeen kompensoimme signaalin jännitteen, jotta signaali pysyy Arduinon ADC: n tunnistaman alueen sisällä signaalin leikkaamisen estämiseksi. Siirtymisen jälkeen signaali siirretään Arduino ADC: lle, josta se näytteistetään ja tämän äänen taajuus saadaan.
Vaaditut komponentit
Seuraavat komponentit vaaditaan tämän projektin rakentamiseen;
- Arduino Uno x1
- LM386 x1
- Lauhdutinmikrofoni x1
- Mikrofoni- / ääniliitäntä x1
- 10k potentiometri x1
- O.1uf-kondensaattori x2
- 100 ohmin vastus x4
- 10 ohmin vastus x1
- 10uf kondensaattori x3
- 5 mm keltainen LED x2
- 5 mm vihreä LED x1
- Normaalisti auki olevat painikkeet x6
- Hyppääjän johdot
- Leipälauta
Kaaviot
Liitä komponentit alla olevan kitaravirittimen kytkentäkaavion mukaisesti.
Painikkeet on kytketty ilman ylös / alas vastuksia, koska käytetään Arduinon sisäänrakennettuja vastusvastuksia. Tämä varmistaa, että piiri on mahdollisimman yksinkertainen.
Arduino-koodi kitaravirittimelle
Tämän Guitar Tuner Project -koodin takana oleva algoritmi on yksinkertainen. Tietyn merkkijonon virittämiseksi kitaristi valitsee merkkijonon painamalla vastaavaa näppäintä ja lyö soittamalla avointa merkkijonoa. Ääni kerätään vahvistusvaiheessa ja siirretään Arduino ADC: lle. Taajuus dekoodataan ja verrataan. Kun merkkijonon tulotaajuus on pienempi kuin määritetty taajuus, sille merkkijonolle syttyy yksi keltaisista LEDeistä, jotka osoittavat, että merkkijono on kiristettävä. Kun mitattu taajuus on suurempi kuin merkkijonolle määrätty taajuus, toinen LED syttyy. Kun taajuus on kyseisen kielen määrätyllä alueella, vihreä LED syttyy ohjaamaan kitaristia.
Täydellinen Arduino-koodi annetaan lopussa, tässä olemme selittäneet lyhyesti koodin tärkeät osat.
Aloitetaan luomalla taulukko kytkimien pitämiseksi.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Seuraavaksi luomme taulukon pitämään vastaava taajuus jokaiselle merkkijonolle.
kelluva taajuusalue = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // kaikki Hz: ssä
Kun tämä on tehty, ilmoitamme sitten nastat, joihin LEDit on kytketty, ja muut muuttujat, joita käytetään taajuuden saamiseen ADC: ltä.
int alempiLed = 7; int suurempiLed = 6; int justRight = 5; #define PITUUS 512 tavua rawData; int-määrä;
Seuraava on void setup () -toiminto.
Aloitamme sallimalla Arduinon sisäinen veto jokaiselle nastalle, johon kytkimet on kytketty. Tämän jälkeen asetamme nastat, joihin LEDit on kytketty, lähtöinä ja käynnistämme sarjamonitorin tietojen näyttämiseksi.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (painike, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (korkeampiLED, OUTPUT); pinMode (justRight, OUTPUT); Sarjan alku (115200); }
Seuraavaksi on tyhjä silmukka -toiminto, toteutamme taajuuden havaitsemisen ja vertailun.
void loop () { if (määrä <LENGTH) { count ++; rawData = analoginen luku (A0) >> 2; } muu { summa = 0; pd_state = 0; int-jakso = 0; for (i = 0; i <len; i ++) { // Autokorrelaatio summa_vanha = summa; summa = 0; varten (k = 0; k <len-i; k ++) summa + = (rawData-128) * (rawData-128) / 256; // Sarja.println (summa); // Huipputunnistuskone, jos (pd_state == 2 && ((summa-summa_vanha) <= 0) { jakso = i; pd_state = 3; } if (pd_state == 1 && (summa> thresh) && (summa-sum_old)> 0) pd_state = 2; jos (! i) { kynnys = summa * 0,5; pd_state = 1; } } // Taajuus tunnistettu Hz: ssä, jos ( kynnys > 100) { taajuus_per = näytteen_taajuus / jakso; Serial.println (taajuus_per); for (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == KORKEA) { if (freq_per - freqarray <0) { digitalWrite (lowerLed, HIGH); } else if (taajuus_taajuus - taajuusalue> 10) { digitalWrite (ylempiLed, KORKEA); } else { digitalWrite (justRight, HIGH); } } } } määrä = 0; } }
Täydellinen koodia esittelyvideo on alla. Lataa koodi Arduino-levyllesi ja lähde pois.