Здравейте, момчета, през последните няколко седмици работя върху повторното свързване с любовта си към китарата. Свиренето на бокс китара беше начинът, по който се отпускам преди няколко години, преди саксофонът да поеме. Връщайки се към китарата, след 3 години рядко свирене на акорд, открих, наред с други неща, че вече не знаех как трябва да звучи всяка от струните, за да се изразя по думите на моя приятел, „Слухът ми вече не беше настроен“ и в резултат на това не успях да настроя китарата без помощта на клавиатура или мобилно приложение, което по-късно изтеглих. Седмиците минаха до преди няколко дни, когато производителят в мен се мотивира и реших да създам Arduino Guitar Tuner. В днешния урок ще споделя как да създадете свой собствен тунер за китара „Направи си сам“ Arduino.
Как работи тунерът за китара
Преди да преминем към електрониката, важно е да разберем принципа, който стои зад компилацията. Има 7 основни музикални ноти, обозначени с азбуките; A, B, C, D, E, F, G и обикновено завършват с друга A, която винаги е с октава по-висока от първата А. В музиката съществуват няколко версии на тези ноти като първата A и последната A. Тези ноти се различават всеки от тяхната вариация и един от друг по една от характеристиките на звука, известна като височина. Височината на звука се определя като силата или ниското ниво на звука и се посочва от честотата на този звук. Тъй като честотата на тези ноти е известна, за да определим дали китарата е настроена или не, трябва само да сравним честотата на нотата на определен низ със действителната честота на нотата, която струната представлява.
Честотите на 7-те музикални ноти са:
A = 27.50Hz
B = 30,87Hz
C = 16.35Hz
D = 18,35Hz
E = 20.60Hz
F = 21,83Hz
G = 24,50 Hz
Всяка вариация на тези ноти винаги е със стъпка, равна на FxM, където F е честотата, а M е ненулево цяло число. По този начин за последното А, което, както е описано по-рано, е с октава по-високо от първото А, честотата е;
27.50 x 2 = 55Hz.
Китарата (Lead / box guitar) обикновено има 6 струни, обозначени с нотите E, A, D, G, B, E на отворена струна. Както обикновено, последното E ще бъде с октава по-високо от първото E. Ние ще проектираме нашия тунер за китара, за да помогнем да настроим китарата, използвайки честотите на тези ноти.
Според стандартната настройка на китарата, нотата и съответната честота на всеки низ са показани в таблицата по-долу.
Струни |
Честота |
Нотация |
1 (Д) |
329,63 Hz |
Е4 |
2 (Б) |
246,94 Hz |
B3 |
3 (G) |
196,00 Hz |
G3 |
4 (D) |
146,83 Hz |
D3 |
5 (А) |
110,00 Hz |
А2 |
6 (Д) |
82,41 Hz |
Е2 |
В потока на проекта е съвсем проста; преобразуваме звуковия сигнал, генериран от китарата, в честота, след което сравняваме с точната стойност на честотата на струната, която се настройва. Китаристът се уведомява с помощта на светодиод, когато стойността съответства.
Откриването / преобразуването на честотата включва 3 основни етапа;
- Усилващо
- Компенсиране
- Аналогово-цифрово преобразуване (вземане на проби)
Произвежданият звуков сигнал ще бъде твърде слаб, за да може ADC на Arduino да разпознае, така че трябва да усилим сигнала. След усилване, за да поддържаме сигнала в диапазона, разпознаваем от ADC на Arduino, за да предотвратим изрязване на сигнала, компенсираме напрежението на сигнала. След компенсиране, сигналът след това се предава на Arduino ADC, където се взема проба и се получава честотата на този звук.
Необходими компоненти
Следните компоненти са необходими за изграждането на този проект;
- Arduino Uno x1
- LM386 x1
- Кондензаторен микрофон x1
- Микрофон / аудио жак x1
- 10k потенциометър x1
- O.1uf кондензатор x2
- 100ohms резистор x4
- 10ohms резистор x1
- 10uf кондензатор x3
- 5мм жълт светодиод x2
- 5 мм зелен LED x1
- Нормално отворени бутони x6
- Джъмперни проводници
- Макет
Схеми
Свържете компонентите, както е показано в схемата на тунера за китара по-долу.
Бутоните са свързани без издърпващи нагоре / надолу резистори, тъй като ще се използват вградените в Arluino вградени резистори. Това е, за да се гарантира, че веригата е възможно най-проста.
Код на Arduino за тунер за китара
Алгоритъмът зад кода за този проект за тунер на китара е прост. За да настроите конкретна струна, китаристът избира струната, като натиска съответния бутон и свири на пиесите на отворен низ. Звукът се събира от усилващия етап и се предава на Arduino ADC. Честотата се декодира и сравнява. Когато входната честота от низа е по-малка от определената честота, за този низ се включва един от жълтите светодиоди, указващ, че низът трябва да бъде затегнат. Когато измерената честота е по-голяма от предвидената честота за този низ, се включва друг светодиод. Когато честотата е в рамките на определения диапазон за този низ, зеленият светодиод светва, за да насочва китариста.
Пълният код на Arduino е даден в края, тук накратко обяснихме важните части на кода.
Започваме със създаването на масив, който да държи превключвателите.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
След това създаваме масив, който да съхранява съответната честота за всеки от низовете.
float freqarray = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // всички в Hz
След това декларираме щифтовете, към които са свързани светодиодите, и други променливи, които ще бъдат използвани за получаване на честотата от ADC.
int lowerLed = 7; int higherLed = 6; int justRight = 5; #define LENGTH 512 байта rawData; int count;
Следва функцията void setup () .
Тук започваме, като активираме вътрешното изтегляне на Arduino за всеки от щифтовете, към които са свързани комутаторите. След това задаваме щифтовете, към които са свързани светодиодите като изходи и стартираме серийния монитор за показване на данните.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (по-висок LED, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
На следващо място е функцията за празен цикъл , ние прилагаме откриването и сравнението на честотата.
цикъл void () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } else { сума = 0; pd_state = 0; int период = 0; за (i = 0; i <len; i ++) { // Автокорелация sum_old = sum; сума = 0; за (k = 0; k <len-i; k ++) сума + = (rawData-128) * (rawData-128) / 256; // Serial.println (сума); // Peak Detect State Machine if (pd_state == 2 && (sum-sum_old) <= 0) { period = i; pd_state = 3; } if (pd_state == 1 && (sum> thresh) && (sum-sum_old)> 0) pd_state = 2; ако (! i) { вършит = сума * 0,5; pd_state = 1; } } // Честота, идентифицирана в Hz, ако (праг> 100) { freq_per = sample_freq / период; Serial.println (freq_per); за (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == HIGH) { if (freq_per - freqarray <0) { digitalWrite (lowerLed, HIGH); } else if (freq_per - freqarray> 10) { digitalWrite (higherLed, HIGH); } else { digitalWrite (justRight, HIGH); } } } } брой = 0; } }
В пълния код с демонстрационен видеоклип е дадена по-долу. Качете кода на дъската на Arduino и тръгнете.