Мазмуну:

Arduino жана DC мотору менен ыр жасоо: 6 кадам
Arduino жана DC мотору менен ыр жасоо: 6 кадам

Video: Arduino жана DC мотору менен ыр жасоо: 6 кадам

Video: Arduino жана DC мотору менен ыр жасоо: 6 кадам
Video: ESP32 Tutorial 15 - DC Motor Speed Control with ESP32 L293D | SunFounder's ESP32 IoT Learnig kit 2024, Декабрь
Anonim
Arduino жана DC мотору менен ырларды жаратуу
Arduino жана DC мотору менен ырларды жаратуу

Башка күнү, Arduino жөнүндө кээ бир макалаларды жылдырып жатып, мен кыска мелодияларды түзүү үчүн Arduino башкарган тепкич моторлорун колдонгон кызыктуу долбоорду байкадым. Arduino тепкич моторун музыкалык ноталарга туура келген белгилүү бир жыштыкта иштетүү үчүн PWM (Pulse Width Modulation) пинин колдонгон. Кайсы жыштыктар ойногонун убакыт боюнча, кадам моторунан ачык обон угулат.

Бирок, мен өзүмдү сынап көргөндө, мендеги тепкич мотору обон жаратуу үчүн бат айланбай турганын байкадым. Анын ордуна, мен Arduinoго программалоо жана туташуу үчүн салыштырмалуу жөнөкөй DC моторун колдондум. Жалпы L293D IC моторду Arduino PWM пининен оңой эле айдап кетүү үчүн колдонулушу мүмкүн жана Arduinoдогу жергиликтүү тон () функциясы керектүү жыштыкты түзө алат. Мени таң калтырганы, мен онлайн режиминде DC моторун колдонгон эч кандай мисалдарды же долбоорлорду тапкан жокмун, андыктан бул Нускамалар аны оңдоого менин жообум. Баштайлы!

P. S. Менимче, сиз буга чейин Arduino менен бир аз тажрыйбага ээ жана анын программалоо тили жана жабдыктары менен таанышсыз. Сиз массивдер эмне экенин, PWM деген эмне жана аны кантип колдонуу керектигин жана чыңалуу менен токтун кантип иштээрин билишиңиз керек. Эгерде сиз азырынча жок болсоңуз же Arduino -ны жаңы эле баштасаңыз, кабатыр болбоңуз: бул Arduino расмий веб -сайтынан баштоо барагын байкап көрүңүз жана качан даяр болсоңуз, ошол жерге кайтып келиңиз.:)

Жабдуулар

  • Ардуино (Мен UNO колдонгом, бирок эгер кааласаң, башка Arduino колдоно аласың)
  • Стандарттык 5V DC мотору, желдеткичи тиркелгени жакшы ("схеманы чогултуудагы" сүрөттү караңыз)
  • L293D IC
  • Сиз ойногуңуз келген ырдагы ноталар сыяктуу көптөгөн баскычтар
  • Breadboard
  • Jumper Wires

1 -кадам: Обзор

Бул жерде долбоор кантип иштейт: Arduino берилген жыштыкта квадрат толкунун пайда кылат, аны L293Dге чыгарат. L293D моторду Arduino берген жыштыкта иштетүү үчүн колдонгон тышкы электр булагына туташтырылган. DC кыймылдаткычынын огунун айлануусун алдын алуу менен, мотор үнүн же нотасын чыгаруучу жыштыкта өчүп, күйүп жатканын угууга болот. Биз Arduinoго баскычтар басылганда жазууларды ойнотууну же аларды автоматтык түрдө ойнотууну программалай алабыз.

2 -кадам: Районду чогултуу

Циркти чогултуу
Циркти чогултуу
Циркти чогултуу
Циркти чогултуу

Районду чогултуу үчүн, жөн гана Fritzing диаграммасын аткарыңыз.

Ишара: Мотордон келген нотаны билик айланбаганда угуу жакшы. Мен моторумдун валына желдеткич коюп, желдеткичти кыймылда кармап туруу үчүн бир нече скотч менен колдондум (сүрөттү караңыз). Бул валдын бурулушуна тоскоол болуп, так, угулуучу үндү чыгарды. Моторуңуздун таза үнүн алуу үчүн бир аз оңдоп -түзөөгө туура келиши мүмкүн.

3 -кадам: Район кантип иштейт

Circuit кантип иштейт
Circuit кантип иштейт

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

Жогоруда L293Dдин маалымат барагынан пинут/функционалдык схемасы келтирилген. Биз 1 моторду гана айдап жүргөндүктөн (L293D 2ди айдай алат), бизге ICдин бир жагы гана керек. Pin 8 - бул кубат, pin 4 жана 5 - GND, pin 1 - PWM чыгаруу Arduino, жана пин 2 жана 7 мотордун багытын көзөмөлдөйт. 2 -пин жогору жана 7 -пин төмөн болсо, мотор бир тарапка, ал эми 2 -пин төмөн жана 7 -пин жогору болгондо, мотор башка тарапка айланат. Мотордун кандай жол менен айланганы бизге маани бербегендиктен, эгер алар бири -биринен айырмаланып турса, 2 жана 7 -төөнөгүчтөр ТӨМӨН же ЖОК экени маанилүү эмес. 3 жана 6 -пиндер моторго туташат. Кааласаңыз, бардыгын башка тарапка туташтырсаңыз болот (9-16-казыктар), бирок кубат жана PWM казыктары орундарды алмаштырарын билиңиз.

Эскертүү: Эгерде сиз Ардуинону колдонуп жатсаңыз, анда ар бир баскычка төөнөгүчтөрү жок болсо, анда сиз бардык өчүргүчтөрдү ушул аналогдук пинге туташтыруу үчүн резисторлордун тармагын колдоно аласыз, мисалы. Бул кантип иштээри бул долбоордун алкагынан тышкары, бирок эгер сиз качандыр бир R-2R DACти колдонуп жүргөн болсоңуз, анда аны тааныш болушуңуз керек. Көңүл буруңуз, аналогдук пин колдонуу коддун чоң бөлүктөрүн кайра жазууну талап кылат, анткени Button китепканасы аналог казыктар менен колдонулбайт.

4 -кадам: Кодекс кантип иштейт

Бардык баскычтарды башкарууну жеңилдетүү үчүн, мен Madleech "Button" аттуу китепкананы колдондум. Мен биринчи кезекте китепкананы киргиздим. Кийинки, 8-22-саптарда мен Twinkle, Twinkle, Little Star (мисал ыр) ойноо үчүн керектүү ноталардын жыштыгын, L293D айдоо үчүн колдоно турган пинимди жана баскычтарды аныктадым.

Орнотуу функциясында мен Сериалды, баскычтарды баштап, 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 массивинде көрсөтүлгөн убакытка чейин обонду ойнойм. Бул жерде обон ойнобой турган кечиктирүүнү колдонуунун ордуна, мен миллис () функциясы менен программа башталгандан берки убакытты жаздым жана учурдагы убакыттан алып салдым. Убакыт мен белги beat_values массивинде көрсөтүлүүчү убакыттан ашып кеткенде, мен эскертмени токтотом. For циклинин кийинкиге калтырылышы ноталардын ортосундагы боштукту кошуу үчүн, ошол эле жыштыктагы кийинки ноталар биригип кетпешин камсыз кылат.

6 -кадам: Пикир билдирүү

Бул бул долбоор үчүн. Эгер сиз түшүнбөгөн нерсе болсо, же кандайдыр бир сунуштарыңыз болсо, мага кайрылуудан тартынбаңыз. Бул менин биринчи Нускамаларым болгондуктан, мен бул мазмунду жакшыртуу боюнча комментарийлерди жана сунуштарды абдан баалайм. Кийинки жолу көрүшкөнчө!

Сунушталууда: