Агуулгын хүснэгт:

Arduino болон DC мотор ашиглан дуу хийх: 6 алхам
Arduino болон DC мотор ашиглан дуу хийх: 6 алхам

Видео: Arduino болон DC мотор ашиглан дуу хийх: 6 алхам

Видео: Arduino болон DC мотор ашиглан дуу хийх: 6 алхам
Видео: 3 простых изобретения с двигателем постоянного тока 2024, Долдугаар сарын
Anonim
Arduino болон DC мотор ашиглан дуу хийх
Arduino болон DC мотор ашиглан дуу хийх

Нөгөө өдөр, Arduino-ийн тухай хэдэн нийтлэлийг гүйлгэж байхдаа Arduino-ийн удирддаг stepper мотор ашиглан богино аялгуу бүтээх сонирхолтой төслийг олж харлаа. Arduino нь PWM (Pulse Width Modulation) зүү ашиглан stepper моторыг хөгжмийн тэмдэглэлд тохирсон тодорхой давтамжтайгаар ажиллуулдаг байв. Аль давтамж хэзээ тоглогдохыг тодорхойлсноор stepper мотороос тодорхой аялгуу сонсогдоно.

Гэсэн хэдий ч би үүнийг өөрөө туршиж үзэхэд надад байгаа stepper мотор нь хангалттай хурдан эргэлдэж, өнгө аяс гаргах чадваргүй болохыг олж мэдэв. Үүний оронд би Arduino програмчлах, холбоход харьцангуй энгийн DC мотор ашигласан. Нийтлэг L293D IC нь Arduino PWM зүүгээр хөдөлгүүрийг хялбархан жолоодоход хэрэглэгддэг бөгөөд Arduino -ийн унаган тон () функц нь шаардлагатай давтамжийг бий болгодог. Гайхалтай нь би онлайнаар DC мотор ашиглах жишээ, төсөл олж чадаагүй тул энэхүү зааварчилгаа нь үүнийг арилгах миний хариулт юм. Эхэлцгээе!

P. S. Та Arduino -тэй аль хэдийн туршлагатай, програмчлалын хэл, техник хангамжийг сайн мэддэг гэж бодож байна. Та хэд хэдэн зүйлийг нэрлэхийн тулд массив гэж юу болох, ХБХ гэж юу болох, үүнийг хэрхэн ашиглах, хүчдэл ба гүйдэл хэрхэн ажилладагийг мэдэх ёстой. Хэрэв та Arduino -д хараахан байхгүй байгаа эсвэл дөнгөж эхэлж байгаа бол санаа зовох хэрэггүй: энэ хуудсыг албан ёсны Arduino вэбсайтаас эхлүүлээд, бэлэн болмогцоо буцаж ирээрэй.:)

Хангамж

  • Ардуино (Би НҮБ -ыг ашигласан боловч хэрэв та хүсвэл өөр Arduino ашиглаж болно)
  • Стандарт 5V тогтмол гүйдлийн мотор, сэнс хавсаргасан байвал зохино ("Хэлхээ угсрах" хэсгийн зургийг үзнэ үү)
  • L293D IC
  • Та тоглохыг хүсч буй дууны тэмдэглэл шиг олон товчлуурыг дарна уу
  • Талхны самбар
  • Холбогч утас

Алхам 1: Тойм

Төсөл хэрхэн ажилладагийг энд харуулав: Arduino нь өгөгдсөн давтамжтай дөрвөлжин долгион үүсгэх бөгөөд үүнийг L293D руу гаргадаг. L293D нь Arduino -ийн өгсөн давтамжтай моторыг тэжээхэд ашигладаг гадаад тэжээлийн эх үүсвэрт холбогддог. Тогтмол гүйдлийн хөдөлгүүрийн босоо амыг эргүүлэхээс сэргийлж, моторыг давтамжтайгаар унтрааж, асаахыг сонсдог бөгөөд энэ нь ая эсвэл тэмдэглэл үүсгэдэг. Бид Arduino програмыг товчлуур дарагдсан үед тэмдэглэл тоглуулах эсвэл автоматаар тоглуулахаар програмчилж болно.

Алхам 2: Цахилгаан хэлхээг угсрах

Цахилгаан хэлхээг угсрах
Цахилгаан хэлхээг угсрах
Цахилгаан хэлхээг угсрах
Цахилгаан хэлхээг угсрах

Цахилгаан хэлхээг угсрахын тулд дээрх Fritzing диаграмыг дагана уу.

Зөвлөгөө: Мотороос ирсэн тэмдэглэлийг босоо ам ээрэхгүй байхад хамгийн сайн сонсдог. Би моторынхоо босоо аманд сэнс тавьж, сэнсийг хөдөлгөөнгүй байлгахын тулд наалдамхай тууз ашигласан (зураг харна уу). Энэ нь босоо амыг эргүүлэхээс сэргийлж, тод, сонсогдож буй аяыг гаргажээ. Мотороосоо цэвэрхэн өнгө авахын тулд та жаахан тохируулга хийх хэрэгтэй болж магадгүй юм.

Алхам 3: Хэлхээ хэрхэн ажилладаг

Хэлхээ хэрхэн ажилладаг
Хэлхээ хэрхэн ажилладаг

L293D бол реле, мотор гэх мэт харьцангуй өндөр хүчдэлтэй, өндөр гүйдлийн төхөөрөмжүүдийг жолоодоход ашигладаг IC юм. Arduino нь ихэнх моторыг гаралтаас нь шууд жолоодох боломжгүй байдаг (мөн моторын арын EMF нь Arduino -ийн мэдрэмтгий дижитал хэлхээг гэмтээж болно), тиймээс L293D шиг IC -ийг гадаад тэжээлийн эх үүсвэр ашиглан DC моторыг хялбархан жолоодох боломжтой. L293D -д дохио оруулах нь Arduino -д гэмтэл учруулах эрсдэлгүйгээр DC мотор руу ижил дохио өгөх болно.

Дээрх өгөгдлийн хүснэгтээс L293D -ийн холболт/функциональ схемийг үзүүлэв. Бид зөвхөн 1 мотор жолооддог тул (L293D 2 жолоодож чаддаг) бидэнд IC -ийн зөвхөн нэг тал хэрэгтэй. 8 -р зүү нь хүч, 4 ба 5 -р зүү нь GND, 1 -р зүү нь Arduino -аас ХОУХ -ны гаралт бөгөөд 2 ба 7 -р зүү нь хөдөлгүүрийн чиглэлийг хянадаг. 2 -р зүү нь өндөр, 7 -р зүү нь LOW байх үед мотор нэг тийш эргэдэг, 2 -р зүү нь LOW ба 7 -р зүү нь өндөр байвал хөдөлгүүр нөгөө тийш эргэдэг. Мотор ямар чиглэлд эргэх нь бидэнд хамаагүй тул 2 ба 7 -р тээглүүрүүд нь хоорондоо ялгаатай бол LOW эсвэл HIGH өндөр байх нь хамаагүй. 3 ба 6 -р зүү нь мотортой холбогддог. Хэрэв та хүсвэл бүх зүйлийг нөгөө тал руу нь холбож болно (9-16-р зүү), гэхдээ цахилгаан болон ХОУХ-ны тээглүүрүүд байраа сольж байгааг анхаарна уу.

Тэмдэглэл: Хэрэв та товчлуур бүрт хангалттай зүү байхгүй Arduino ашиглаж байгаа бол резисторуудын сүлжээг ашиглан бүх унтраалгыг нэг аналог зүү рүү холбож болно. Энэ нь хэрхэн ажилладаг нь энэ төслийн хамрах хүрээнээс гадуур боловч хэрэв та R-2R DAC ашиглаж байсан бол энэ нь танил байх ёстой. Аналог зүү ашиглахын тулд кодын том хэсгийг дахин бичих шаардлагатай болно, учир нь Button номын санг аналог тээглүүрээр ашиглах боломжгүй юм.

Алхам 4: Код хэрхэн ажилладаг талаар

Бүх товчлуурыг удирдахад хялбар болгохын тулд би madleech -ийн "Button" нэртэй номын санг ашигласан. Би номын санг хамгийн түрүүнд оруулсан. Дараа нь 8-22-р мөрөнд би Twinkle, Twinkle, Little Star (жишээ дуу) тоглоход шаардлагатай тэмдэглэл, L293D жолоодлогын зүү болон товчлууруудын давтамжийг тодорхойлсон.

Тохируулах функц дээр би Serial, товчлууруудыг эхлүүлж, L293D -ийн драйверын зүүг гаралтын горимд тохируулсан.

Эцэст нь үндсэн гогцоонд товчлуур дарагдсан эсэхийг шалгасан. Хэрэв байгаа бол Arduino харгалзах тэмдэглэлийг тоглуулж, тэмдэглэлийн нэрийг Цуваа монитор дээр хэвлэнэ (таны талбар дээр ямар тэмдэглэл байгааг мэдэх нь ашигтай). Хэрэв тэмдэглэл гарсан бол arduino noTone () ашиглан дууг зогсоодог.

Харамсалтай нь, номын сангийн бүтэц зохион байгуулалтын байдлаас шалтгаалан нэг тэмдэглэлд 2 нөхцөлт үг ашиглахаас илүү товч дарсан, эсвэл товч дарагдсан эсэхийг шалгах арга олдсонгүй. Энэ кодын бас нэг алдаа бол хэрэв та хоёр товчлуурыг нэгэн зэрэг дараад дараа нь аль нэгийг нь суллавал аль аль тэмдэглэл зогсох болно, учир нь noTone () аль тэмдэгтийг өдөөсөнөөс үл хамааран ямар ч тэмдэглэл үүсгэхийг зогсооно.

Алхам 5: Дуу програмчлах

Тэмдэглэл тоглохын тулд товчлуур ашиглахын оронд Arduino програмыг автоматаар танд зориулж аялгуу тоглуулахаар програмчилж болно. Мотор дээр Twinkle, Twinkle, Little Star тоглодог анхны ноорогны шинэчилсэн хувилбарыг энд оруулав. Ноорогны эхний хэсэг нь адилхан бөгөөд тэмдэглэлийн давтамж, тонусыг тодорхойлдог. Бид шинэ хэсэгт bpm = "100" дээр очдог. Би цохилтыг минутанд (bpm) тогтоож, дараа нь bpm -тэй тэнцэх миллисекундын тоог тооцоолохын тулд математик ашиглана уу. Үүнийг хийхийн тулд би хэмжээст дүн шинжилгээ хийх аргыг ашигласан (санаа зовох хэрэггүй, энэ нь сонсогдож байгаа шиг хэцүү биш юм). Хэрэв та ахлах сургуулийн химийн курст сурч байсан бол нэгжийн хооронд хөрвүүлэхийн тулд хэмжээст анализыг ашигласан нь гарцаагүй. Floats () нь үнэн зөв байхын тулд тэгшитгэл дэх бүх зүйлийг эцэс хүртэл бөөрөнхийлөхгүй байхын тулд байдаг.

Бидэнд ms/beat -ийн тоо гарсны дараа би үүнийг зохих ёсоор хувааж эсвэл үржүүлж, хөгжимд байдаг өөр өөр тэмдэглэлийн үргэлжлэх хугацааны миллисекундын утгыг олох болно. Дараа нь би тэмдэглэл бүрийг он цагийн дарааллаар, өөр нэг тэмдэглэл үргэлжлэх хугацаатайгаар хийдэг. Тэмдэглэл бүрийн индекс үргэлжлэх хугацааны индекстэй таарч байгаа нь маш чухал юм, эс тэгвээс таны аялгуу унтрах болно. Би жишээ болгон Twinkle, Twinkle, Little Star -ийн тэмдэглэлийг оруулсан боловч та хүссэн дуу эсвэл тэмдэглэлийн дарааллыг туршиж үзэх боломжтой.

Жинхэнэ ид шид нь давталтын функцэд тохиолддог. Тэмдэглэл бүрийн хувьд би beat_values массивт заасан хугацаанд аяыг тоглодог. Аяыг тоглуулахгүй байх саатлыг энд ашиглахын оронд би millis () функцээр програм эхэлснээс хойшхи хугацааг бичиж, одоогийн цаг хугацаанаас хассан. Би тэмдэглэлийг beat_values массивт үргэлжлүүлэх гэж заасан хугацаанаас хэтэрсэн тохиолдолд би тэмдэглэлийг зогсооно. For давталтын дараах саатал нь тэмдэглэлийн хоорондох зайг нэмж, ижил давтамжтай дараагийн тэмдэглэлүүд хоорондоо холилдохгүй байх болно.

Алхам 6: Санал хүсэлт

Энэ бол энэ төслийн хувьд энэ юм. Хэрэв танд ойлгомжгүй зүйл байвал, эсвэл танд ямар нэгэн санал байвал надтай холбоо бариарай. Энэ бол миний анхны зааварчилгаа тул энэ контентыг хэрхэн сайжруулах талаархи санал, зөвлөмжийг маш их үнэлэх болно. Дараа уулзая!

Зөвлөмж болгож буй: