INHOUDSOPGAWE:

Liedjies maak met 'n Arduino en 'n DC -motor: 6 stappe
Liedjies maak met 'n Arduino en 'n DC -motor: 6 stappe

Video: Liedjies maak met 'n Arduino en 'n DC -motor: 6 stappe

Video: Liedjies maak met 'n Arduino en 'n DC -motor: 6 stappe
Video: #13 VTScada (бесплатная лицензия) Modbus RS485 Аналоговое чтение и запись | Внешний ПЛК Arduino 2024, Julie
Anonim
Maak liedjies met 'n Arduino en 'n DC -motor
Maak liedjies met 'n Arduino en 'n DC -motor

Die ander dag, terwyl ek deur 'n paar artikels oor Arduino blaai, sien ek 'n interessante projek wat deur Arduino-beheerde stepper motors gebruik word om kort melodieë te skep. Die Arduino het 'n PWM (Pulse Width Modulation) pen gebruik om die stapmotor op spesifieke frekwensies te laat loop, wat ooreenstem met musieknote. Deur die tydsberekening van die frekwensies wat gespeel word, kan 'n duidelike melodie van die stapmotor gehoor word.

Toe ek dit egter self probeer, het ek gevind dat die stappermotor wat ek het nie vinnig genoeg kan draai om 'n toon te skep nie. Ek het in plaas daarvan 'n DC -motor gebruik, wat relatief eenvoudig is om te programmeer en aan te sluit op 'n Arduino. 'N Algemene L293D IC kan gebruik word om die motor maklik van 'n Arduino PWM -pen af te dryf, en die native tone () -funksie in Arduino kan die nodige frekwensie genereer. Tot my verbasing het ek geen voorbeelde of projekte met behulp van 'n gelykstroommotor aanlyn gevind nie, en daarom is hierdie instruksies my antwoord daarop. Laat ons begin!

P. S. Ek neem aan dat u reeds ervaring met die Arduino het en dat u die programmeertaal en hardeware ken. U moet weet wat skikkings is, wat PWM is en hoe u dit moet gebruik, en hoe spanning en stroom werk, om net 'n paar dinge te noem. As u nog nie daar is nie of net met Arduino begin het, moenie bekommerd wees nie: probeer hierdie beginbladsy vanaf die amptelike Arduino -webwerf en kom terug wanneer u gereed is.:)

Voorrade

  • Arduino (ek het 'n UNO gebruik, maar u kan 'n ander Arduino gebruik as u wil)
  • Standaard 5V DC -motor, verkieslik een wat 'n waaier kan aanheg (sien prent in "Die kring saamstel"
  • L293D IC
  • Soveel drukknoppies as note in die liedjie wat u wil speel
  • Broodbord
  • Jumper Wires

Stap 1: Oorsig

Hier is hoe die projek werk: die Arduino sal 'n vierkantgolf genereer op 'n gegewe frekwensie, wat dit na die L293D stuur. Die L293D is gekoppel aan 'n eksterne kragtoevoer wat dit gebruik om die motor aan te dryf op die frekwensie wat dit deur die Arduino gegee word. Deur te verhoed dat die as van die GS -motor draai, kan die motor gehoor word met die frekwensie, wat 'n toon of noot lewer. Ons kan die Arduino programmeer om notas te speel wanneer knoppies ingedruk word, of om dit outomaties te speel.

Stap 2: Monteer die stroombaan

Die samestelling van die kring
Die samestelling van die kring
Die samestelling van die kring
Die samestelling van die kring

Volg die Fritzing -diagram hierbo om die stroombaan te monteer.

Wenk: Die noot van die motor word die beste gehoor as die as nie draai nie. Ek het 'n waaier op die as van my motor gesit en 'n bietjie band gebruik om die waaier stil te hou terwyl die motor loop (sien prentjie). Dit het verhoed dat die as draai en 'n duidelike, hoorbare toon gegee. Miskien moet u iets aanpas om 'n skoon toon van u motor te kry.

Stap 3: Hoe die kring werk

Hoe die stroombaan werk
Hoe die stroombaan werk

Die L293D is 'n IC wat gebruik word om toestelle met relatiewe hoë spanning, hoë stroom, soos relais en motors, aan te dryf. Die Arduino kan nie die meeste motors direk vanaf sy uitset dryf nie (en die agterste EMF van die motor kan die sensitiewe digitale stroombaan van die Arduino beskadig), dus kan 'n IC soos die L293D met 'n eksterne kragtoevoer gebruik word om die GS -motor maklik aan te dryf. Deur 'n sein in die L293D in te voer, sal dieselfde sein na die DC -motor gestuur word sonder om die Arduino te beskadig.

Hierbo is 'n uiteensetting/funksionele skema van die L293D uit die datablad. Aangesien ons slegs 1 motor bestuur (die L293D kan 2 ry), het ons slegs een kant van die IC nodig. Speld 8 is krag, penne 4 en 5 is GND, pen 1 is die PWM -uitset van die Arduino, en penne 2 en 7 beheer die rigting van die motor. As pen 2 HOOG is en pen 7 LAAG is, draai die motor een kant toe, en as pen 2 LOW is en pen 7 HOOG is, draai die motor die ander kant. Aangesien ons nie omgee in watter rigting die motor draai nie, maak dit nie saak of penne 2 en 7 LAAG of HOOG is nie, solank dit van mekaar verskil. Spelde 3 en 6 maak aansluiting by die motor. U kan alles aan die ander kant koppel (penne 9-16) as u wil, maar wees bewus daarvan dat die krag- en PWM-penne van plek verander.

Opmerking: as u 'n Arduino gebruik wat nie genoeg penne vir elke knoppie het nie, kan u 'n netwerk van weerstande gebruik om al die skakelaars aan 'n analoog pen te koppel, soos in hierdie instruksies. Hoe dit werk, val buite die omvang van hierdie projek, maar as u ooit 'n R-2R DAC gebruik het, behoort u dit bekend te vind. Let op dat die gebruik van 'n analoog pen groot gedeeltes van die kode moet herskryf, aangesien die knoppiebiblioteek nie met analoog penne gebruik kan word nie.

Stap 4: Hoe die kode werk

Om dit makliker te maak om al die knoppies te hanteer, het ek 'n biblioteek genaamd "Button" van madleech gebruik. Ek het die biblioteek eerste ingesluit. Vervolgens, in reëls 8-22, definieer ek die frekwensies vir die note wat nodig is om Twinkle, Twinkle, Little Star (die voorbeeldliedjie) te speel, die pen wat ek sal gebruik om die L293D aan te dryf, en die knoppies.

In die opstelfunksie het ek die reeks, die knoppies geïnitialiseer en die stuurpen vir die L293D op die afsmodus gestel.

Uiteindelik het ek in die hooflus gekyk of daar op 'n knoppie gedruk is. As dit die geval is, speel die Arduino die ooreenstemmende noot en druk die nootnaam af op die Serial Monitor (handig om te weet watter note op u broodbord is). As 'n noot vrygestel word, stop die arduino enige geluid met noTone ().

As gevolg van die manier waarop die biblioteek gestruktureer is, kon ek nie 'n manier vind om te kontroleer of 'n knoppie op 'n minder uitgebreide manier ingedruk of vrygestel is as om 2 voorwaardes per noot te gebruik nie. 'N Ander fout met hierdie kode is dat as u twee knoppies gelyktydig sou druk en een daarvan loslaat, beide note gestop word, want noTone () keer dat geen note gegenereer word nie, ongeag watter noot dit veroorsaak het.

Stap 5: 'n liedjie programmeer

In plaas daarvan om knoppies te gebruik om notas te speel, kan u die Arduino ook programmeer om outomaties 'n melodie vir u te speel. Hier is 'n aangepaste weergawe van die eerste skets wat Twinkle, Twinkle, Little Star op die motor speel. Die eerste deel van die skets is dieselfde - definieer nootfrekwensies en die tonePin. Ons kom by die nuwe deel by bpm = "100". Ek stel die slae per minuut (bpm) en gebruik dan 'n bietjie wiskunde om uit te vind hoeveel millisekondes per maat die bpm is. Om dit te doen, gebruik ek 'n tegniek genaamd dimensionele analise (moenie bekommerd wees nie - dit is nie so moeilik soos dit klink nie). As u ooit 'n chemiese kursus op hoërskool gevolg het, het u definitief dimensionele analise gebruik om tussen eenhede om te skakel. Die vlotte () is daar om te verseker dat niks in die vergelyking tot die einde afgerond word vir akkuraatheid nie.

Nadat ons die aantal ms/maat gekry het, het ek dit gepas gedeel of vermenigvuldig om die millisekonde waardes van die verskillende nootduurte in musiek te vind. Ek maak dan 'n reeks van elke noot in chronologiese volgorde, en nog een met die duur van elke noot. Dit is van kritieke belang dat die indeks van elke noot ooreenstem met die indeks van sy duur, anders klink u melodie af. Ek het die note vir Twinkle, Twinkle, Little Star hier as voorbeeld ingesit, maar u kan enige liedjie of volgorde van notas wat u wil, probeer.

Die ware magie gebeur in die lusfunksie. Vir elk van die note speel ek die toon vir 'n tyd wat ek gespesifiseer het in die beat_values -skikking. In plaas daarvan om vertraging hier te gebruik, wat veroorsaak dat die toon nie gespeel word nie, het ek die tyd aangeteken sedert die program met die millis () -funksie begin het, en dit van die huidige tyd afgetrek. As die tyd die tyd oorskry wat ek die noot gespesifiseer het om in die beat_values -skikking te hou, stop ek die noot. Die vertraging na die for -lus is daar om 'n gaping tussen notas by te voeg, om te verseker dat daaropvolgende note met dieselfde frekwensie nie bymekaarkom nie.

Stap 6: Terugvoer

Dit is dit vir hierdie projek. As daar iets is wat u nie verstaan nie, of as u voorstelle het, moet u my asseblief kontak. Aangesien dit my eerste instruksies is, sal ek kommentaar en voorstelle oor die verbetering van hierdie inhoud baie waardeer. Sien jou volgende keer!

Aanbeveel: