Mundarija:

Arduino va doimiy dvigatel yordamida qo'shiqlar yaratish: 6 qadam
Arduino va doimiy dvigatel yordamida qo'shiqlar yaratish: 6 qadam

Video: Arduino va doimiy dvigatel yordamida qo'shiqlar yaratish: 6 qadam

Video: Arduino va doimiy dvigatel yordamida qo'shiqlar yaratish: 6 qadam
Video: Control XY-1250 10-50V 60A 3000W PWM motor Speed controller using Arduino 2024, Iyul
Anonim
Arduino va doimiy dvigatel yordamida qo'shiqlar yaratish
Arduino va doimiy dvigatel yordamida qo'shiqlar yaratish

Boshqa kuni, Arduino haqidagi ba'zi maqolalarni ko'rib chiqayotganda, men Arduino tomonidan boshqariladigan step motorlaridan qisqa ohanglar yaratish uchun qiziqarli loyihani ko'rdim. Arduino PWM (Pulse Width Modulation) pinidan foydalanib, step motorini musiqiy notalarga mos keladigan ma'lum chastotalarda ishga tushirdi. Qaysi chastotalar qachon ijro etilishini aniqlasangiz, step motoridan aniq ohang eshitiladi.

Ammo, men buni o'zim sinab ko'rganimda, menda qadam motorining ohang yaratish uchun etarlicha tez aylana olmasligi aniqlandi. Buning o'rniga, men Arduino -ga dasturlash va ulanish uchun nisbatan oddiy bo'lgan shahar motorini ishlatardim. Dvigatelni Arduino PWM pinidan osongina haydash uchun oddiy L293D IC ishlatilishi mumkin va Arduino -dagi mahalliy ohang () funktsiyasi kerakli chastotani yaratishi mumkin. Ajablanarlisi shundaki, men Internetda doimiy dvigatelni ishlatadigan misollar yoki loyihalarni topmadim, shuning uchun bu ko'rsatmalarni tuzatish uchun mening javobim. Qani boshladik!

P. S. Menimcha, siz allaqachon Arduino bilan tajribaga egasiz va uning dasturlash tili va uskunalari bilan tanishsiz. Siz qatorlar nima ekanligini, PWM nima ekanligini va undan qanday foydalanishni, kuchlanish va oqim qanday ishlashini bilishingiz kerak. Agar siz Arduino -ni hali yo'q yoki endigina boshlagan bo'lsangiz, xavotir olmang: Arduino -ning rasmiy veb -saytining boshlang'ich sahifasini sinab ko'ring va tayyor bo'lganingizda qaytib keling.:)

Ta'minotlar

  • Arduino (men UNO -dan foydalanganman, lekin agar xohlasangiz, boshqa Arduino -dan foydalanishingiz mumkin)
  • Oddiy 5V shahar dvigateli, yaxshisi fanat o'rnatilgan bo'lishi mumkin ("O'chirish" bo'limidagi rasmga qarang)
  • L293D IC
  • Qaysi qo'shiqda eslatmalar bo'lsa, shunchalik ko'p tugmalar bosiladi
  • Non paneli
  • Jumper simlari

1 -qadam: umumiy nuqtai

Mana, loyiha qanday ishlaydi: Arduino ma'lum chastotada kvadrat to'lqin hosil qiladi, uni L293D ga chiqaradi. L293D dvigatelni Arduino tomonidan berilgan chastotada quvvatlantirish uchun ishlatiladigan tashqi quvvat manbaiga ulangan. Dvigatel motorining milining aylanishiga to'sqinlik qilib, dvigatelning tovushini yoki notasini chiqaradigan chastotada o'chirish va yoqish eshitiladi. Biz Arduino -ni tugmalar bosilganda eslatmalarni ijro etish yoki avtomatik ravishda ijro etish uchun dasturlashimiz mumkin.

2 -qadam: O'chirish sxemasini yig'ish

Devrenni yig'ish
Devrenni yig'ish
Devrenni yig'ish
Devrenni yig'ish

Zanjirni yig'ish uchun yuqoridagi Fritzing diagrammasiga amal qilish kifoya.

Maslahat: Dvigatelning eslatmasi mil aylanmagan paytda yaxshi eshitiladi. Men dvigatel miliga fanat qo'ydim va dvigatel ishlayotganda fanni ushlab turish uchun yopishqoq lenta ishlatardim (rasmga qarang). Bu milning burilishiga to'sqinlik qildi va aniq, eshitiladigan ohang yaratdi. Dvigateldan toza ohang olish uchun sizga biroz o'zgartirish kerak bo'ladi.

3 -qadam: O'chirish sxemasi qanday ishlaydi

O'chirish qanday ishlaydi
O'chirish qanday ishlaydi

L293D - bu yuqori voltli, o'rni va dvigatellari kabi yuqori oqim qurilmalarini haydash uchun ishlatiladigan IC. Arduino ko'pgina dvigatellarni to'g'ridan -to'g'ri chiqishidan haydab chiqara olmaydi (va dvigatelning orqa EMF -si Arduino -ning sezgir raqamli elektron tizimiga zarar etkazishi mumkin), shuning uchun L293D kabi IC tashqi quvvat manbai bilan DC motorini oson haydash uchun ishlatilishi mumkin. L293D -ga signalni kiritish xuddi shu signalni Arduino -ga zarar etkazmasdan shahar motoriga chiqaradi.

Yuqorida L293D ning ma'lumotlar jadvalidagi pinout/funktsional sxemasi ko'rsatilgan. Biz faqat 1 dvigatelni boshqarayotganimiz uchun (L293D 2 haydash mumkin), bizga ICning faqat bir tomoni kerak. 8 -pin - quvvat, 4 va 5 -pinlar GND, 1 -pin - Arduino -dan PWM chiqishi, 2 va 7 -pinlar esa dvigatel yo'nalishini boshqaradi. Qachonki 2 -pin YUQOR va 7 -chi past bo'lsa, vosita bir tomonga, 2 -pin past va 7 -pin yuqori bo'lsa, vosita boshqa tomonga aylanadi. Dvigatelning qay tomonga burilishi bizni qiziqtirmagani uchun, agar ular bir -biridan farq qilsa, 2 va 7 -gachasi pinlar past yoki baland bo'lishi muhim emas. 3 va 6 -pinlar dvigatelga ulanadi. Agar xohlasangiz, hamma narsani boshqa tomonga ulashingiz mumkin (9-16-pinlar), lekin shuni bilingki, quvvat va PWM pinlari joylarni almashtiradi.

Eslatma: Agar sizda har bir tugma uchun etarli pin bo'lmagan Arduino -dan foydalanayotgan bo'lsangiz, rezistorlar tarmog'idan foydalanib, barcha kalitlarni bitta analog pinga ulashingiz mumkin, masalan, ko'rsatmalarda. Bu qanday ishlaydi, bu loyiha doirasidan tashqarida, lekin agar siz hech qachon R-2R DAC dan foydalanmagan bo'lsangiz, uni tanish deb topishingiz kerak. E'tibor bering, analog pin yordamida kodning katta qismini qayta yozish kerak bo'ladi, chunki Button kutubxonasini analog pinlar bilan ishlatib bo'lmaydi.

4 -qadam: Kod qanday ishlaydi

Barcha tugmalarni boshqarishni osonlashtirish uchun men Madleech tomonidan "Button" nomli kutubxonadan foydalandim. Men birinchi navbatda kutubxonani kiritdim. Keyingi, 8-22-qatorlarda men Twinkle, Twinkle, Little Star (qo'shiq namunasi) chalish uchun zarur bo'lgan yozuvlar chastotasini, L293D haydash uchun ishlatiladigan pinni va tugmalarni aniqladim.

O'rnatish funktsiyasida men Serialni, tugmalarni ishga tushirdim va L293D uchun haydovchi pinini chiqish rejimiga qo'ydim.

Nihoyat, asosiy tsiklda men tugma bosilganligini tekshirdim. Agar shunday bo'lsa, Arduino mos yozuvni o'ynaydi va eslatma nomini Serial monitorga bosib chiqaradi (sizning yozuvlar panelida qaysi yozuvlar borligini bilish uchun foydalidir). Agar eslatma chiqarilsa, arduino noTone () bilan har qanday tovushni to'xtatadi.

Afsuski, kutubxonaning tuzilishi tufayli men har bir yozuv uchun 2 ta shart ishlatishdan ko'ra, tugma bosilganmi yoki yo'qmi, tekshirish usulini topa olmadim. Bu kodning yana bir kamchiliklari shundaki, agar siz bir vaqtning o'zida ikkita tugmani bosib, keyin bittasini qo'yib yuborsangiz, ikkala eslatma ham to'xtatiladi, chunki noTone () qaysi yozuvni qo'zg'atganidan qat'i nazar, har qanday eslatmani yaratishni to'xtatadi.

5 -qadam: Qo'shiqni dasturlash

Eslatmalarni ijro etish uchun tugmachalarni ishlatishning o'rniga, siz Arduino -ni avtomatik ravishda siz uchun musiqani ijro etishga dasturlashingiz mumkin. Bu motorda Twinkle, Twinkle, Little Star o'ynaydigan birinchi eskizning o'zgartirilgan versiyasi. Eskizning birinchi qismi bir xil - yozuv chastotalari va ohangni belgilaydi. Biz yangi qismga bpm = "100" da etib boramiz. Men daqiqada urish tezligini o'rnatdim (bpm), keyin bpm ga teng bo'lgan millisekundlar sonini aniqlash uchun matematikadan foydalaning. Buning uchun men o'lchovli tahlil deb nomlangan texnikani qo'lladim (xavotir olmang - bu unchalik qiyin emas). Agar siz o'rta maktabda kimyo kursini o'tgan bo'lsangiz, siz birliklar o'rtasida konvertatsiya qilish uchun aniq o'lchovli tahlildan foydalangansiz. Floats () aniqlik uchun oxirigacha tenglamadagi hech narsa yaxlitlanmasligini ta'minlash uchun mavjud.

Bizda ms/beat soni bo'lganidan so'ng, men musiqada topilgan har xil nota davomiyligining millisekundlik qiymatlarini topish uchun uni to'g'ri taqsimladim yoki ko'paytirdim. Keyin men har bir eslatmani xronologik tartibda, ikkinchisini esa har bir yozuvning davomiyligi bilan tuzaman. Har bir notaning indeksi uning davomiyligi indeksiga to'g'ri kelishi juda muhim, aks holda sizning ohangingiz o'chadi. Men misol sifatida Twinkle, Twinkle, Little Star uchun eslatmalarni qo'ydim, lekin siz xohlagan qo'shiqni yoki yozuvlar ketma -ketligini sinab ko'rishingiz mumkin.

Haqiqiy sehr loop funktsiyasida sodir bo'ladi. Har bir eslatma uchun men beat_values qatorida ko'rsatilgan vaqt davomida ohangni o'ynayman. Bu erda ohang ijro etilmasligi uchun kechiktirishni ishlatishning o'rniga, millis () funktsiyasi bilan dastur boshlangan vaqtni yozdim va uni hozirgi vaqtdan olib tashladim. Vaqt men beat_values qatorida eslatmani ko'rsatgan vaqtdan oshib ketganda, men eslatmani to'xtataman. For tsiklidan keyin kechikish, eslatmalar orasidagi bo'shliqni qo'shib, bir xil chastotali keyingi yozuvlar bir -biriga qo'shilmasligini ta'minlaydi.

6 -qadam: Teskari aloqa

Bu loyiha uchun shunday. Agar siz tushunmaydigan biror narsa bo'lsa yoki takliflaringiz bo'lsa, iltimos, men bilan bog'laning. Bu mening birinchi ko'rsatmalari bo'lgani uchun, men ushbu tarkibni yaxshilash bo'yicha sharhlar va takliflarni juda qadrlayman. Keyingi safar ko'rishguncha!

Tavsiya: