- Потребни материјали:
- Кружни дијаграм:
- Шеме и објашњења:
- Разумевање
- Свирање клавирских тонова на Ардуину:
- Програмирање Ардуина:
- Репродукујте, снимите, поновите и поновите! :
Ардуино је благодат за људе који нису из електронике да лако граде ствари. То је био сјајан алат за израду прототипова или за испробавање нечег цоол, у овом пројекту ћемо направити мали, али забавни клавир користећи Ардуино. Овај клавир је прилично једноставан са само 8 тастера и зујалице. Користи функцију тоне () Ардуина за стварање различитих врста нота клавира на звучнику. Да бисмо га мало зачинили, у пројекат смо додали функцију снимања, ово нам омогућава да га пустимо и поново репродукујемо по потреби по потреби. Звучи занимљиво зар не !! Па хајде да градимо….
Потребни материјали:
- Ардуино Уно
- ЛЦД екран од 16 * 2
- Зујалица
- Тример 10к
- СПДТ прекидач
- Тастер (8 бр)
- Отпорници (10к, 560Р, 1,5к, 2,6к, 3,9, 5,6к, 6,8к, 8,2к, 10к)
- Бреадбоард
- Повезивање жица
Кружни дијаграм:
Комплетни пројекат Ардуино Пиано може се изградити на плочи са неким везним жицама. Дијаграм спојева направљен помоћу фритзинга који приказује табеларни приказ пројекта приказан је испод
Само следите дијаграм кола и повежите жице у складу с тим, тастере и зујалицу као што се користи са ПЦБ модулом, али у стварном хардверу користили смо само прекидач и зујалицу, то вас не би требало збунити јер имају исту врсту пин-а. Да бисте успоставили везе, можете се позвати и на доњу слику хардвера.
Вредност отпорника са леве стране је следећег реда: 10к, 560Р, 1,5к, 2,6к, 3,9, 5,6к, 6,8к, 8,2к и 10к. Ако немате исти ДПСТ прекидач, можете користити уобичајени прекидач попут оног приказаног на горњој шеми. Погледајмо сада шеме пројекта да бисмо разумели зашто смо направили следеће везе.
Шеме и објашњења:
Шеме за схему кола која је приказана горе су дате испод, такође је направљена помоћу Фритзинга.
Једна главна веза коју морамо да разумемо је то како смо повезали 8 тастера са Ардуином преко аналогног А0 пина. У основи нам је потребно 8 улазних пинова који се могу повезати са 8 улазних тастера, али за овакве пројекте не можемо користити 8 пинова микроконтролера само за тастере, јер ће нам можда требати за каснију употребу. У нашем случају имамо повезан ЛЦД екран.
Дакле, користимо аналогни пин Ардуина и формирамо потенцијални делилац са различитим вредностима отпорника да довршимо коло. На овај начин, када се притисне свако дугме, на аналогни пин се доводи различити аналогни напон. Пример кола са само два отпорника и два тастера приказан је испод.
У овом случају АДЦ пин добија + 5В када се не притисну тастери. Ако се притисне прво дугме, потенцијални разделник се довршава кроз отпорник 560Р, а ако се притисне друго дугме, потенцијални разделник се надмеће помоћу 1.5 к отпорник. На овај начин напон примљен од АДЦ пина варираће у зависности од формула делитеља потенцијала. Ако желите да сазнате више о томе како делује потенцијални делилац и како израчунати вредност напона примљеног АДЦ пином, онда можете да користите ову страницу калкулатора потенцијалних делилаца.
Осим овога, све везе су директне, ЛЦД је повезан на пинове 8, 9, 10, 11 и 12. Зујалица је повезана на пин 7, а СПДТ прекидач је повезан на пин 6 Ардуина. Комплетни пројекат се напаја преко УСБ порта на преносном рачунару. Такође можете повезати Ардуино са напајањем од 9 В или 12 В преко ДЦ прикључка и пројекат ће и даље радити исто.
Разумевање
Ардуино има практичну функцију тоне () која се може користити за генерисање сигнала различитих фреквенција који се могу користити за стварање различитих звукова помоћу зујалице. Дакле, хајде да схватимо како функција функционише и како се може користити са Ардуином.
Пре тога бисмо требали знати како Пиезо зујалица ради. О Пиезо кристалима смо можда научили у нашој школи, он је ништа друго до кристал који претвара механичке вибрације у електричну енергију или обрнуто. Овде примењујемо променљиву струју (фреквенцију) за коју кристал вибрира стварајући звук. Дакле, да би Пиезо зујалица произвела неку буку морамо да Пиезо електрични кристал вибрира, висина и тон буке зависе од брзине кристала. Отуда се тоном и тоном може управљати променом фреквенције струје.
Добро, како ћемо онда добити променљиву фреквенцију од Ардуина? Ту долази функција тоне (). Тон () може генерисати одређену фреквенцију на одређеном пину. Трајање времена се такође може поменути ако је потребно. Синтакса тона () је
Синтаксни тон (пин, фреквенција) тон (пин, фреквенција, трајање) Параметри пин: пин на којем се генерише фреквенција тона: фреквенција тона у херцима - непотписано инт дуратион: трајање тона у милисекундама (опционално1) - непотписано дуго
Вредности пин-а могу бити било које ваше дигиталне пин-ове. Овде сам користио пин број 8. Фреквенција која се може генерисати зависи од величине тајмера на вашој Ардуино плочи. За УНО и већину других уобичајених плоча минимална фреквенција која се може произвести је 31Хз, а максимална фреквенција која се може произвести је 65535Хз. Међутим, ми људи можемо чути само фреквенције између 2000Хз и 5000 Хз.
Свирање клавирских тонова на Ардуину:
Добро, пре него што уопште започнем с овом темом, дајте ми до знања да сам почетник са музичким нотама или клавиром, па вас молим да ми опростите ако је било шта поменуто под овим насловом бесмислице.
Сада знамо да можемо да користимо функцију тонова у Ардуину да произведемо неке звукове, али како можемо да репродукујемо тонове одређене ноте користећи исте. Срећом по нас постоји библиотека „питцхес.х“ коју је написао Бретт Хагман. Ова библиотека садржи све информације о томе која фреквенција је еквивалентна нотама на клавиру. Изненадио сам се колико је ова библиотека заиста могла да ради и свира скоро сваку ноту на клавиру, користио сам исту за свирање клавирских нота Пиратес оф Кариббеан, Црази Фрог, Марио, па чак и титаниц, и звучале су страшно. Упс! Овде помало одлазимо од теме, па ако сте заинтересовани за то, погледајте репродукцију мелодија помоћу Ардуино пројекта. Такође ћете пронаћи више објашњења о библиотеци питцхес.х у том пројекту.
Наш пројекат има само 8 тастера, тако да свако дугме може да свира само једну одређену музичку ноту и тако у потпуности можемо свирати само 8 нота. Изабрао сам најчешће коришћене ноте на клавиру, али можете ли одабрати било којих 8 или чак проширити пројекат са више тастера и додати још нота.
Ноте одабране у овом пројекту су ноте Ц4, Д4, Е4, Ф4, Г4, А4, Б4 и Ц5 које се могу репродуковати помоћу тастера 1 до 8 респективно.
Програмирање Ардуина:
Довољно теорије пређимо на забавни део програмирања Ардуина. Комплетан Ардуино програм је дат на крају ове странице можете скочити доле ако жељни или читајте даље о томе како разумети код ради.
У нашем Ардуино програму морамо очитати аналогни напон са пина А0, затим предвидети које је дугме притиснуто и пустити одговарајући тон за то дугме. Док то радимо, такође би требало да снимимо које дугме је корисник притиснуо и колико дуго је притискао, како бисмо могли поново створити тон који је корисник пуштао касније.
Пре него што пређемо на логички део, морамо да изјаснимо којих ћемо 8 нота свирати. Одговарајућа фреквенција за белешке се затим узима из библиотеке питцхес.х, а затим се формира низ као што је приказано доле. Овде је фреквенција репродукције ноте Ц4 262 и тако даље.
инт напомене = {262, 294, 330, 349, 392, 440, 494, 523}; // Подесимо фреквенцију за Ц4, Д4, Е4, Ф4, Г4, А4, Б4,
Даље морамо напоменути на које пинове је повезан ЛЦД екран. Ако следите потпуно исте шеме дане горе, овде не морате ништа да мењате.
цонст инт рс = 8, ен = 9, д4 = 10, д5 = 11, д6 = 12, д7 = 13; // Пинови на које је повезан ЛЦД ЛикуидЦристал лцд (рс, ен, д4, д5, д6, д7);
Даље, унутар наше функције подешавања само иницијализујемо ЛЦД модул и серијски монитор за отклањање грешака. Такође приказујемо уводну поруку само како бисмо били сигурни да ствари раде како је планирано. Даље , унутар функције главне петље имамо две вхиле петље.
Једнократна петља ће се изводити све док је СПДТ прекидач постављен за снимање више. У режиму снимања корисник може да плати потребне тонове, а истовремено ће се сачувати и тон који се репродукује. Дакле, вхиле петља изгледа овако у наставку
вхиле (дигиталРеад (6) == 0) // Ако је преклопни прекидач постављен у режиму снимања {лцд.сетЦурсор (0, 0); лцд.принт ("Снимање.."); лцд.сетЦурсор (0, 1); Детецт_буттон (); Плаи_тоне (); }
Као што сте могли приметити , имамо две функције унутар вхиле петље. Прва функција Детецт_буттон () користи се за проналажење тастера коју је корисник притиснуо, а друга функција Плаи_тоне () користи се за репродукцију одговарајућег тона. Поред ове функције, функција Детецт_буттон () такође бележи које се дугме притиска, а функција Плаи_тоне () бележи колико је дуго дугме притиснуто.
Унутар Детецт_буттон () функцију читамо аналогни напон од игле А0 и упоредити га са неким унапред дефинисане вредности да бисте сазнали који тастер је притиснут. Вредност се може одредити помоћу горњег калкулатора делитеља напона или помоћу серијског монитора да се провери која се аналогна вредност очитава за свако дугме.
воид Детецт_буттон () { аналогВал = аналогРеад (А0); // читање аналогног волтага на пин А0 пев_буттон = буттон; // сетимо се претходног дугмета које је корисник притиснуо иф (аналогВал <550) буттон = 8; ако је дугме (аналогВал <500) = 7; ако је дугме (аналогВал <450) = 6; ако је дугме (аналогВал <400) = 5; ако је дугме (аналогВал <300) = 4; ако је дугме (аналогВал <250) = 3; ако је дугме (аналогВал <150) = 2; ако је дугме (аналогВал <100) = 1; иф (аналогВал> 1000) дугме = 0; / **** Снимите притиснута дугмад у низ *** / иф (дугме! = дугме_прив & & дугме_пита! = 0) { снимљено_пруцето = дугме_врте; буттон_индек ++; дугме_снимљено = 0; буттон_индек ++; } / ** Крај програма за снимање ** / }
Као што је речено, унутар ове функције такође снимамо редослед притиска тастера. Снимљене вредности се чувају у пољу названом снимљено_ дугме. Прво проверавамо да ли је притиснуто ново дугме, ако је притиснуто, онда такође проверавамо да ли није дугме 0. Где дугме 0 није ништа, али није притиснуто ниједно дугме. Унутар петље иф чувамо вредност на месту индекса датој променљивом буттон_индек, а затим такође повећавамо ову вредност индекса тако да не преписујемо на истој локацији.
/ **** Снимите притиснута дугмад у низ *** / иф (буттон! = Пев_буттон && пев_буттон! = 0) { снимљени_буттон = пев_буттон; буттон_индек ++; дугме_снимљено = 0; буттон_индек ++; } / ** Крај програма за снимање ** /
Унутар Плаи_тоне () функцију ћемо играти одговарајући тон дугме притиснуто помоћу више ако условима. Такође ћемо користити низ назван снимљено време у којем ћемо сачувати време трајања притиснутог дугмета. Операција је слична снимању редоследа дугмади помоћу функције милис () да бисмо утврдили колико дуго је било које дугме притиснуто, такође ради смањења величине променљиве вредност делимо са 10. За дугме 0, што значи да корисник није притискајући било шта што свирамо без звука у истом трајању. Комплетни код унутар функције приказан је испод.
воид Плаи_тоне () { / **** Забележите временско кашњење између сваког притиска на дугме у низу *** / иф (буттон! = пев_буттон) { лцд.цлеар (); // Затим га очистите ноте_тиме = (миллис () - старт_тиме) / 10; снимљено_време = време_белешке; тиме_индек ++; старт_тиме = милис (); } / ** Крај програма за снимање ** / иф (дугме == 0) { ноТоне (7); лцд.принт ("0 -> Пауза.."); } иф (дугме == 1) { тон (7, белешке); лцд.принт ("1 -> НОТЕ_Ц4"); } иф (дугме == 2) { тон (7, белешке); лцд.принт ("2 -> НОТЕ_Д4"); } ако (дугме == 3) { тон (7, белешке); лцд.принт ("3 -> НОТЕ_Е4"); } иф (дугме == 4) { тон (7, белешке); лцд.принт ("4 -> НОТЕ_Ф4"); } иф (дугме == 5) { тон (7, белешке); лцд.принт ("5 -> НОТЕ_Г4"); } иф (дугме == 6) { тон (7, белешке); лцд.принт ("6 -> НОТЕ_А4"); } иф (дугме == 7) { тон (7, белешке); лцд.принт ("7 -> НОТЕ_Б4"); } иф (дугме == 8) { тон (7, белешке); лцд.принт ("8 -> НОТЕ_Ц5"); } }
Коначно, након снимања корисник мора да пребаци ДПСТ у други смер да би репродуковао снимљени тон. Када се то уради, програм прекида из претходне вхиле петље и улази у другу вхиле петљу где репродукујемо ноте у низу притиснутих тастера током претходно снимљеног времена. Код за исто је приказан испод.
вхиле (дигиталРеад (6) == 1) // Ако је преклопни прекидач постављен у режиму репродукције { лцд.цлеар (); лцд.сетЦурсор (0, 0); лцд.принт ("Нов Плаиинг.."); за (инт и = 0; и <величина (дугме_снимљено) / 2; и ++) { кашњење ((снимљено_време) * 10); // Сачекајте пре него што платите следећу мелодију ако ( Рецорд_буттон == 0) ноТоне (7); // корисник динт додирне било које дугме иначе тон (7, белешке - 1)]); // пуштамо звук који одговара дугмету који је корисник додирнуо } } }
Репродукујте, снимите, поновите и поновите!:
Направите хардвер према приказаном дијаграму кола и отпремите код на Ардуино плочу и приказано време. Поставите СПДТ у режим снимања и започните репродукцију тонова по вашем избору, притиском на свако дугме произвешће се другачији тон. Током овог режима ЛЦД ће приказати „ Снимање…“, а у другом реду ћете видети име белешке која се тренутно притиска, као што је приказано испод
Када одсвирате тон, пребаците СПДТ прекидач на другу страну и на ЛЦД-у ће се приказати „ Нов Плаиинг..“, а затим започните репродукцију тона који сте управо свирали. Исти тон репродуковаће се изнова и изнова све док је преклопни прекидач у положају како је приказано на доњој слици.
Комплетан рад пројекта може се наћи у видеу датом у наставку. Надам се да сте разумели пројекат и уживали сте у његовој изради. Ако имате било каквих проблема са израдом овог чланка, објавите их у одељку за коментаре или користите форуме за техничку помоћ за свој пројекат. Такође не заборавите да погледате демонстрацијски видео који је дат у наставку.