Tartalomjegyzék:

Dalok készítése Arduino -val és egyenáramú motorral: 6 lépés
Dalok készítése Arduino -val és egyenáramú motorral: 6 lépés

Videó: Dalok készítése Arduino -val és egyenáramú motorral: 6 lépés

Videó: Dalok készítése Arduino -val és egyenáramú motorral: 6 lépés
Videó: Mimi - Alacsony a cipőm sarka - Official ZGStudio video 2024, Július
Anonim
Dalok készítése Arduino -val és egyenáramú motorral
Dalok készítése Arduino -val és egyenáramú motorral

A minap, miközben az Arduino-val kapcsolatos cikkeket lapozgattam, észrevettem egy érdekes projektet, amely Arduino által vezérelt léptetőmotorokat használt rövid dallamok létrehozásához. Az Arduino PWM (impulzusszélesség -modulációs) csap segítségével futtatta a léptetőmotort meghatározott frekvenciákon, a hangjegyeknek megfelelően. Az időzítéssel, hogy milyen frekvenciák játszódnak, a dallammotorból tiszta dallam hallható.

Amikor azonban magam is kipróbáltam, rájöttem, hogy a léptetőmotor nem tud elég gyorsan forogni ahhoz, hogy hangot hozzon létre. Ehelyett egyenáramú motort használtam, amelyet viszonylag egyszerű programozni és csatlakoztatni egy Arduino -hoz. Egy közös L293D IC használható a motor egyszerű meghajtására egy Arduino PWM csapból, és az Arduino natív hang () funkciója elő tudja állítani a szükséges frekvenciát. Meglepetésemre nem találtam példákat vagy projekteket egyenáramú motor használatával az interneten, így ez az utasítás az én válaszom ennek orvoslására. Lássunk neki!

P. S. Feltételezem, hogy már van némi tapasztalata az Arduino -val, és ismeri a programozási nyelvét és hardverét. Tudnia kell, hogy melyek a tömbök, mi a PWM és hogyan kell használni, és hogyan működik a feszültség és az áram, csak hogy néhány dolgot említsünk. Ha még nem vagy ott, vagy csak most kezdted el az Arduino -t, ne aggódj: próbáld ki ezt az első oldalt az Arduino hivatalos webhelyéről, és gyere vissza, amikor készen állsz.:)

Kellékek

  • Arduino (UNO -t használtam, de ha szeretné, használhat másik Arduino -t is)
  • Normál 5 V egyenáramú motor, lehetőleg ventilátorral felszerelve (lásd az „Áramkör összeszerelése” című részt)
  • L293D IC
  • Annyi nyomógomb, mint a lejátszani kívánt dal jegyzetei
  • Kenyeretábla
  • Jumper vezetékek

1. lépés: Áttekintés

A projekt a következőképpen működik: az Arduino egy adott frekvencián négyzethullámot generál, amelyet az L293D -nek ad ki. Az L293D csatlakoztatva van egy külső tápegységhez, amellyel a motort az Arduino által megadott frekvencián táplálja. Ha megakadályozza az egyenáramú motor tengelyének forgását, akkor hallható a motor kikapcsolása és bekapcsolása olyan frekvencián, amely hangot vagy hangot ad ki. Beprogramozhatjuk az Arduino -t, hogy a gombok megnyomásakor hangjegyeket játsszon le, vagy automatikusan lejátssza azokat.

2. lépés: Az áramkör összeszerelése

Az áramkör összeszerelése
Az áramkör összeszerelése
Az áramkör összeszerelése
Az áramkör összeszerelése

Az áramkör összeállításához egyszerűen kövesse a fenti Fritzing diagramot.

Tipp: A motorból származó hang akkor hallható a legjobban, ha a tengely nem forog. Ventilátort tettem a motor tengelyére, és ragasztószalaggal rögzítettem a ventilátort, amíg a motor működött (lásd a képet). Ez megakadályozta a tengely elfordulását, és tiszta, hallható hangot adott ki. Lehet, hogy módosítania kell, hogy tiszta hangot kapjon a motorjától.

3. lépés: Az áramkör működése

Hogyan működik az áramkör
Hogyan működik az áramkör

Az L293D egy IC, amelyet viszonylag nagy feszültségű, nagy áramú eszközök, például relék és motorok meghajtására használnak. Az Arduino nem képes a legtöbb motort közvetlenül a kimenetéről vezérelni (és a motor hátsó EMF -je károsíthatja az Arduino érzékeny digitális áramkörét), így az L293D -hez hasonló külső tápegységgel használható az egyenáramú motor egyszerű meghajtása. Ha egy jelet az L293D -be ad, ugyanazt a jelet küldi az egyenáramú motornak anélkül, hogy veszélyeztetné az Arduino -t.

A fenti az L293D pinout/funkcionális vázlata az adatlapjából. Mivel csak 1 motort hajtunk (az L293D képes 2 hajtást), csak az IC egyik oldalára van szükségünk. A 8. tüske a tápellátás, a 4. és 5. csap GND, az 1. tüske az Arduino PWM kimenete, a 2. és 7. csap pedig a motor irányát szabályozza. Ha a 2 -es csap MAGAS, és a 7 -es LOW, a motor egy irányban forog, és ha a 2 -es láb LOW, és a 7 -es MAGAS, a motor másfelé forog. Mivel nem érdekel, hogy a motor melyik irányban forog, nem számít, hogy a 2. és 7. csap alacsony vagy magas, mindaddig, amíg különböznek egymástól. A 3. és 6. csap a motorhoz csatlakozik. Ha kívánja, mindent csatlakoztathat a másik oldalra (9-16. Érintkezők), de ügyeljen arra, hogy a táp- és a PWM-érintkezők helyet cserélnek.

Megjegyzés: Ha olyan Arduino -t használ, amelynek nincs elég gombja minden gombhoz, akkor az ellenállások hálózatát használva kapcsolhatja össze az összes kapcsolót egy analóg tűvel, például ebben az utasításban. Ennek működése kívül esik a projekt keretein, de ha valaha is használt R-2R DAC-t, ismerősnek kell találnia. Ne feledje, hogy az analóg tű használatához a kód nagy részét újra kell írni, mivel a Gombkönyvtár nem használható analóg tűkkel.

4. lépés: A kód működése

Az összes gomb kezelésének megkönnyítése érdekében a madleech „Button” nevű könyvtárát használtam. Először a könyvtárat vettem fel. Ezután a 8-22. Sorban meghatároztam a Twinkle, a Twinkle, a Little Star (a példaszám) lejátszásához szükséges hangok gyakoriságát, az L293D meghajtásához használt gombostűt és a gombokat.

A beállítási funkcióban inicializáltam a sorozatot, a gombokat, és kimeneti módba állítottam az L293D illesztőprogramját.

Végül a fő hurokban ellenőriztem, hogy nem nyomtak -e meg egy gombot. Ha igen, az Arduino lejátssza a megfelelő hangot, és kinyomtatja a jegyzet nevét a Soros monitorra (hasznos annak ismeretében, hogy mely jegyzetek találhatók a kenyértáblán). Ha egy hangot elenged, az arduino leállít minden hangot noTone () jelzéssel.

Sajnos a könyvtár felépítése miatt nem találtam módot annak ellenőrzésére, hogy egy gombot megnyomtak -e vagy kiadtak -e kevésbé beszédesen, mint jegyzetenként 2 feltételt. Egy másik hiba ezzel a kóddal az, hogy ha egyszerre két gombot nyom, majd elengedi az egyiket, akkor mindkét hang leáll, mert a noTone () leállítja a jegyzetek generálását, függetlenül attól, hogy melyik jegyzet váltotta ki.

5. lépés: Egy dal programozása

Ahelyett, hogy gombokat használna a jegyzetek lejátszásához, azt is beprogramozhatja, hogy az Arduino automatikusan játssza le a dallamot. Itt van az első vázlat módosított változata, amely Twinkle, Twinkle, Little Star játékot játszik a motoron. A vázlat első része ugyanaz - a hangfrekvenciák és a tonePin meghatározása. Bpm = "100" -nál érkezünk az új részhez. Beállítom a percenkénti ütéseket (bpm), majd némi matek segítségével kitalálom, hogy az ütésenkénti ezredmásodpercek hányadosa a bpm. Ehhez a dimenzióelemzésnek nevezett technikát használtam (ne aggódj - nem olyan nehéz, mint amilyennek hangzik). Ha valaha iskolai kémia tanfolyamot végzett, akkor mindenképpen dimenzióanalízist használt az egységek közötti konvertáláshoz. Az úszók () annak biztosítására szolgálnak, hogy az egyenletben semmi ne legyen lekerekítve a végéig a pontosság érdekében.

Miután megvan az ms/ütem száma, megfelelően elosztottam vagy megszorozom, hogy megtaláljam a zenében található különböző hang időtartamok ezredmásodperces értékeit. Ezután kronológiai sorrendben készítek egy tömböt minden jegyzetből, és egy másikat az egyes hangok időtartamával. Rendkívül fontos, hogy az egyes hangok indexe megegyezzen az időtartam indexével, különben a dallam megszólal. Példaként ide teszem a Csillogás, Csillogás, Kiscsillag jegyzeteket, de kipróbálhatod tetszőleges dalt vagy jegyzetsorozatot.

Az igazi varázslat a hurok funkcióban történik. Minden egyes hangnál a beat_values tömbben megadott ideig játszom a hangot. Ahelyett, hogy itt a késleltetést használnám, ami miatt a hang nem játszódna le, a program elindítása óta eltelt időt a millis () függvénnyel rögzítettem, és kivonom az aktuális időből. Ha az idő meghaladja azt az időt, amikor a beat_values tömbben megadtam a jegyzet utolsó állását, leállítom a jegyzetet. A for ciklus utáni késleltetés azért van, hogy rést adjon a hangok között, biztosítva, hogy a későbbi, azonos gyakoriságú jegyzetek ne keveredjenek össze.

6. lépés: Visszajelzés

Ennyi ehhez a projekthez. Ha valamit nem ért, vagy javaslata van, kérjük, ne habozzon kapcsolatba lépni velem. Mivel ez az első utasításom, nagyra értékelem a megjegyzéseket és javaslatokat a tartalom javításával kapcsolatban. Találkozunk legközelebb!

Ajánlott: