Съдържание:

Създаване на песни с Arduino и DC двигател: 6 стъпки
Създаване на песни с Arduino и DC двигател: 6 стъпки

Видео: Създаване на песни с Arduino и DC двигател: 6 стъпки

Видео: Създаване на песни с Arduino и DC двигател: 6 стъпки
Видео: Leap Motion SDK 2024, Юли
Anonim
Създаване на песни с Arduino и DC двигател
Създаване на песни с Arduino и DC двигател

Онзи ден, докато прелиствах някои статии за Arduino, забелязах интересен проект, който използваше стъпкови двигатели, контролирани от Arduino, за създаване на кратки мелодии. Arduino използва PWM (Pulse Width Modulation) щифт за пускане на стъпковия двигател на определени честоти, съответстващи на музикалните ноти. Чрез определяне на честотите кога са свирили, от стъпковия двигател може да се чуе ясна мелодия.

Когато обаче сам го изпробвах, установих, че стъпковият двигател, който имам, не може да се върти достатъчно бързо, за да създаде тон. Вместо това използвах DC мотор, който е сравнително лесен за програмиране и свързване към Arduino. Обикновена L293D IC може да се използва за лесно задвижване на двигателя от PWM щифт на Arduino, а функцията за собствен тон () в Arduino може да генерира необходимата честота. За моя изненада, не намерих никакви примери или проекти, използващи DC мотор онлайн, и затова този Instructables е моят отговор за отстраняването му. Да започваме!

P. S. Предполагам, че вече имате известен опит с Arduino и сте запознати с неговия език за програмиране и хардуер. Трябва да знаете какво представляват масивите, какво е PWM и как да го използвате и как работят напрежението и тока, само за да назовем няколко неща. Ако все още не сте там или току -що сте започнали Arduino, не се притеснявайте: опитайте тази страница за начало от официалния уебсайт на Arduino и се връщайте, когато сте готови.:)

Консумативи

  • Arduino (използвах UNO, но можете да използвате различен Arduino, ако искате)
  • Стандартен 5V DC мотор, за предпочитане такъв с монтиран вентилатор (вижте снимката в "Сглобяване на веригата"
  • L293D IC
  • Колкото бутони, колкото бележки в песента, която искате да пуснете
  • Платка
  • Джъмперни проводници

Стъпка 1: Общ преглед

Ето как работи проектът: Arduino ще генерира квадратна вълна при дадена честота, която извежда към L293D. L293D е свързан към външно захранване, което използва за захранване на двигателя на честотата, дадена от Arduino. Като предотвратява въртенето на вала на постояннотоковия двигател, може да се чуе изключването и включването на двигателя на честотата, която произвежда тон или нота. Можем да програмираме Arduino да свири ноти при натискане на бутони или автоматично да ги възпроизвежда.

Стъпка 2: Сглобяване на веригата

Сглобяване на веригата
Сглобяване на веригата
Сглобяване на веригата
Сглобяване на веригата

За да сглобите веригата, просто следвайте диаграмата на Fritzing по -горе.

Съвет: Бележката от двигателя се чува най -добре, когато валът не се върти. Сложих вентилатор на вала на моя двигател и използвах малко тиксо, за да задържа вентилатора неподвижен, докато двигателят работи (виж снимката). Това предотвратява завъртането на вала и произвежда ясен, чуваем тон. Може да се наложи да направите някои настройки, за да получите чист тон от вашия двигател.

Стъпка 3: Как работи веригата

Как работи веригата
Как работи веригата

L293D е интегрална схема, използвана за задвижване на устройства с високо напрежение и висок ток, като релета и двигатели. Arduino не може да задвижва повечето двигатели директно от изхода си (а задната ЕМП от двигателя може да повреди чувствителната цифрова схема на Arduino), така че IC като L293D може да се използва с външно захранване за лесно задвижване на DC двигателя. Въвеждането на сигнал в L293D ще изведе същия сигнал към DC двигателя, без да рискува повреда на Arduino.

По -горе е извод/функционална схема на L293D от неговия лист с данни. Тъй като управляваме само 1 мотор (L293D може да управлява 2), имаме нужда само от едната страна на интегралната схема. Пин 8 е захранване, щифтове 4 и 5 са GND, щифт 1 е PWM изходът от Arduino, а щифтове 2 и 7 контролират посоката на двигателя. Когато щифт 2 е ВИСОК и щифт 7 е НИСКИ, двигателят се върти в едната посока, а когато щифт 2 е НИСКИ и щифт 7 е ВИСОК, двигателят се върти в другата посока. Тъй като не ни интересува по какъв начин се върти моторът, няма значение дали щифтове 2 и 7 са НИСКИ или ВИСОКИ, стига да са различни един от друг. Щифтове 3 и 6 се свързват към двигателя. Можете да свържете всичко към другата страна (щифтове 9-16), ако желаете, но имайте предвид, че щифтовете за захранване и ШИМ сменят местата.

Забележка: Ако използвате Arduino, който няма достатъчно щифтове за всеки бутон, можете да използвате мрежа от резистори, за да свържете всички превключватели към един аналогов щифт, например в тази инструкция. Как работи това е извън обхвата на този проект, но ако някога сте използвали R-2R DAC, трябва да го познаете. Обърнете внимание, че използването на аналогов щифт ще изисква пренаписване на големи части от кода, тъй като библиотеката Button не може да се използва с аналогови щифтове.

Стъпка 4: Как работи кодът

За да улесня боравенето с всички бутони, използвах библиотека, наречена „Button“от madleech. Първо включих библиотеката. След това в редове 8-22 определих честотите за нотите, необходими за възпроизвеждане на Twinkle, Twinkle, Little Star (примерната песен), щифта, който ще използвам за задвижване на L293D, и бутоните.

В функцията за настройка инициализирах серийния, бутоните и зададох щифта на драйвера за L293D в изходен режим.

И накрая, в основния цикъл проверих дали е натиснат бутон. Ако има, Arduino свири съответната бележка и отпечатва името на бележката в серийния монитор (полезно за да знаете кои бележки кои са на вашата дъска). Ако се пусне бележка, arduino спира всеки звук с noTone ().

За съжаление, поради начина, по който библиотеката е структурирана, не можах да намеря начин да проверя дали даден бутон е натиснат или освободен по по -малко подробен начин от използването на 2 условни условия на нота. Друг недостатък на този код е, че ако трябва да натиснете два бутона едновременно и след това да освободите един от тях, и двете бележки ще бъдат спрени, защото noTone () спира генерирането на всякакви бележки, независимо коя бележка го е задействала.

Стъпка 5: Програмиране на песен

Вместо да използвате бутони за възпроизвеждане на ноти, можете също да програмирате Arduino да възпроизвежда мелодия вместо вас автоматично. Ето модифицирана версия на първата скица, която играе Twinkle, Twinkle, Little Star на двигателя. Първата част на скицата е една и съща - дефинира нотните честоти и тонPin. Стигаме до новата част в bpm = "100". Задавам удара в минута (bpm) и след това използвам малко математика, за да разбера броя милисекунди на такт, на който bpm се равнява. За да направя това, използвах техника, наречена анализ на размерите (не се притеснявайте - не е толкова трудно, колкото звучи). Ако някога сте посещавали курс по химия в гимназията, определено сте използвали размерни анализи за преобразуване между единици. Поплавъците () са там, за да гарантират, че нищо в уравнението не е закръглено до самия край за точност.

След като имаме броя на ms/такт, аз го разделих или умножих подходящо, за да намеря стойностите в милисекунди на различните продължителности на нотите, открити в музиката. След това правя масив от всяка бележка в хронологичен ред и още един с продължителността на всяка бележка. Важно е индексът на всяка нота да съвпада с индекса на нейната продължителност, в противен случай вашата мелодия ще прозвучи. Тук поставям бележките за Twinkle, Twinkle, Little Star тук като пример, но можете да опитате всяка песен или последователност от ноти, които искате.

Истинската магия се случва във функцията цикъл. За всяка от нотите пускам тона за известно време, което посочих в масива beat_values. Вместо да използвам забавяне тук, което би довело до невъзпроизвеждане на тона, записах времето от стартирането на програмата с функцията millis () и го извадих от текущото време. Когато времето надвиши времето, което посочих, че бележката да продължи в масива beat_values, спирам бележката. Забавянето след цикъла for е налице, за да се добави празнина между бележките, като се гарантира, че следващите бележки със същата честота няма да се смесват заедно.

Стъпка 6: Обратна връзка

Това е всичко за този проект. Ако нещо не разбирате или имате някакви предложения, моля не се колебайте да се свържете с мен. Тъй като това е моята първа инструкция, ще съм много благодарен на коментари и предложения за това как да подобря това съдържание. До следващия път!

Препоръчано: