Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Oversikt
- Trinn 2: Montering av kretsen
- Trinn 3: Hvordan kretsen fungerer
- Trinn 4: Hvordan koden fungerer
- Trinn 5: Programmering av en sang
- Trinn 6: Tilbakemelding
Video: Lage sanger med en Arduino og en DC -motor: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
Her om dagen, mens jeg rullet gjennom noen artikler om Arduino, så jeg et interessant prosjekt som brukte Arduino-kontrollerte trinnmotorer til å lage korte melodier. Arduino brukte en PWM (Pulse Width Modulation) pin for å kjøre trinnmotoren ved bestemte frekvenser, tilsvarende musikknoter. Ved å bestemme hvilke frekvenser som spilte når, kunne en klar melodi høres fra trinnmotoren.
Men da jeg prøvde det selv, fant jeg ut at trinnmotoren jeg har ikke kan rotere fort nok til å lage en tone. I stedet brukte jeg en likestrømsmotor, som er relativt enkel å programmere og koble til en Arduino. En vanlig L293D IC kan brukes til enkelt å drive motoren fra en Arduino PWM -pinne, og den opprinnelige tonen () -funksjonen i Arduino kan generere den nødvendige frekvensen. Til min overraskelse fant jeg ingen eksempler eller prosjekter som brukte en likestrømsmotor på nettet, og derfor er denne instruksjonsboken mitt svar på det. La oss komme i gang!
P. S. Jeg antar at du allerede har litt erfaring med Arduino og er kjent med programmeringsspråket og maskinvaren. Du bør vite hva matriser er, hva PWM er og hvordan du bruker det, og hvordan spenning og strøm fungerer, bare for å nevne noen ting. Hvis du ikke er der ennå eller nettopp begynte Arduino, ikke bekymre deg: Prøv denne start -siden fra det offisielle Arduino -nettstedet og kom tilbake når du er klar.:)
Rekvisita
- Arduino (jeg brukte en UNO, men du kan bruke en annen Arduino hvis du vil)
- Standard 5V likestrømsmotor, helst en som kan ha en vifte festet (se bildet i "Montering av kretsen"
- L293D IC
- Like mange trykknapper som noter i sangen du vil spille
- Brødbrett
- Jumper Wires
Trinn 1: Oversikt
Slik fungerer prosjektet: Arduino vil generere en firkantbølge med en gitt frekvens, som den sender ut til L293D. L293D er koblet til en ekstern strømforsyning som den bruker til å drive motoren med frekvensen den er gitt av Arduino. Ved å hindre likestrømsmotorens aksel fra å rotere, kan motoren høres slå seg av og på med frekvensen, noe som gir en tone eller tone. Vi kan programmere Arduino for å spille notater når du trykker på knapper, eller for å spille dem automatisk.
Trinn 2: Montering av kretsen
For å sette sammen kretsen, følg bare Fritzing -diagrammet ovenfor.
Tips: Notatet fra motoren høres best når akselen ikke snurrer. Jeg satte en vifte på akselen på motoren min og brukte litt tape til å holde viften stille mens motoren gikk (se bildet). Dette forhindret akselen i å snu og ga en klar, hørbar tone. Du må kanskje gjøre noen justeringer for å få en ren tone fra motoren din.
Trinn 3: Hvordan kretsen fungerer
L293D er en IC som brukes til å kjøre enheter med relativt høy spenning, høy strøm som releer og motorer. Arduinoen klarer ikke å kjøre de fleste motorer direkte fra utgangen (og EMF -baksiden fra motoren kan skade Arduinos følsomme digitale kretser), så en IC som L293D kan brukes med en ekstern strømforsyning for enkelt å drive likestrømsmotoren. Når du sender et signal inn i L293D, sendes det samme signalet til likestrømsmotoren uten å risikere skade på Arduino.
Over er en pinout/funksjonell skjematisk oversikt over L293D fra databladet. Siden vi bare kjører 1 motor (L293D kan kjøre 2), trenger vi bare den ene siden av IC. Pinne 8 er effekt, pinner 4 og 5 er GND, pinne 1 er PWM -utgangen fra Arduino, og pinner 2 og 7 styrer motorens retning. Når pin 2 er HIGH og pin 7 er LOW, snurrer motoren en vei, og når pin 2 er LOW og pin 7 er HIGH, snurrer motoren den andre veien. Siden vi ikke bryr oss om hvilken vei motoren snurrer, spiller det ingen rolle om pinne 2 og 7 er LAVE eller HØYE, så lenge de er forskjellige fra hverandre. Pins 3 og 6 kobles til motoren. Du kan koble alt til den andre siden (pinne 9-16) hvis du ønsker det, men vær oppmerksom på at strøm- og PWM-pinnene bytter plass.
Merk: Hvis du bruker en Arduino som ikke har nok pinner for hver knapp, kan du bruke et nettverk av motstander for å koble alle bryterne til en analog pinne, for eksempel i denne instruksjonene. Hvordan dette fungerer er utenfor omfanget av dette prosjektet, men hvis du noen gang har brukt en R-2R DAC, bør du finne det kjent. Vær oppmerksom på at bruk av en analog pin vil kreve at store deler av koden skrives om, ettersom knappbiblioteket ikke kan brukes med analoge pinner.
Trinn 4: Hvordan koden fungerer
For å gjøre det enklere å håndtere alle knappene, brukte jeg et bibliotek kalt “Button” av madleech. Jeg inkluderte biblioteket først. Deretter definerte jeg på linje 8-22 frekvensene for notene som trengs for å spille Twinkle, Twinkle, Little Star (eksempelsangen), pinnen jeg vil bruke til å kjøre L293D og knappene.
I oppsettfunksjonen initialiserte jeg serienummeret, knappene og satte driverpinnen for L293D til utgangsmodus.
Til slutt, i hovedløkken sjekket jeg for å se om en knapp har blitt trykket. Hvis den har det, spiller Arduino den tilhørende noten og skriver ut notatnavnet til Serial Monitor (nyttig for å vite hvilke notater som er på brødbrettet). Hvis et notat slippes, stopper arduinoen enhver lyd uten noTone ().
På grunn av måten biblioteket er strukturert på, kunne jeg dessverre ikke finne en måte å sjekke om en knapp har blitt trykket eller sluppet på en mindre omfattende måte enn å bruke 2 betingelser per notat. En annen feil med denne koden er at hvis du skulle trykke på to knapper samtidig og deretter slippe en av dem, ville begge notatene bli stoppet, fordi noTone () stopper eventuelle notater som genereres uavhengig av hvilken note som utløste den.
Trinn 5: Programmering av en sang
I stedet for å bruke knapper til å spille notater, kan du også programmere Arduino til å spille en melodi for deg automatisk. Her er en modifisert versjon av den første skissen som spiller Twinkle, Twinkle, Little Star på motoren. Den første delen av skissen er den samme - definere notefrekvenser og tonePin. Vi kommer til den nye delen ved bpm = "100". Jeg angir slagene per minutt (bpm), og bruker deretter litt matte til å finne ut antall millisekunder per slag som bpm tilsvarer. For å gjøre dette brukte jeg en teknikk som kalles dimensjonal analyse (ikke bekymre deg - det er ikke så vanskelig som det høres ut). Hvis du noen gang har tatt et kjemikurs på videregående, brukte du definitivt dimensjonsanalyse for å konvertere mellom enheter. Flyterne () er der for å sikre at ingenting i ligningen er avrundet helt til slutten for nøyaktighet.
Etter at vi har antall ms/beat, delte eller multipliserte jeg det på riktig måte for å finne millisekundverdiene til de forskjellige tonevarighetene som finnes i musikk. Jeg lager deretter en rekke hver note i kronologisk rekkefølge, og en annen med varigheten av hver note. Det er kritisk at indeksen til hver tone samsvarer med indeksen for dens varighet, ellers vil melodien din høres ut. Jeg la inn notene til Twinkle, Twinkle, Little Star her som et eksempel, men du kan prøve hvilken som helst sang eller sekvens av notater du vil.
Den virkelige magien skjer i loop -funksjonen. For hver av notene spiller jeg tonen en tid jeg spesifiserte i beat_values -matrisen. I stedet for å bruke forsinkelse her, noe som ville føre til at tonen ikke ble spilt, registrerte jeg tiden siden programmet startet med millis () -funksjonen, og trekker den fra gjeldende tid. Når tiden overskrider tiden jeg angav notatet til å vare i beat_values -matrisen, stopper jeg notatet. Forsinkelsen etter for -sløyfen er der for å legge til et gap mellom notene, og sikre at etterfølgende notater med samme frekvens ikke blandes sammen.
Trinn 6: Tilbakemelding
Det er det for dette prosjektet. Hvis det er noe du ikke forstår, eller hvis du har noen forslag, ikke nøl med å kontakte meg. Siden dette er min første instruks, vil jeg sette stor pris på kommentarer og forslag om hvordan jeg kan forbedre dette innholdet. Ser deg neste gang!
Anbefalt:
Arduino -piano med manuell og 7 forhåndsinnstilte sanger: 7 trinn
Arduino Piano med manuell og 7 forhåndsinnstilte sanger: Arduino Piano Keyboard grensesnitt med LCD har 2 modus. Den manuelle modusen & Forhåndsinnstilt modus. Jeg brukte 7 trykknapper for et enkelt piano med 7 tangenter og 1 knapp for oppsettsmodus for å bytte til 7 forhåndsinnstilte sanger. Forhåndsinnstilte sanger: Klikk på oppsettsmodusknappen fi
Spill sanger med Arduino ved å bruke ADC til PWM på Flyback Transformer eller høyttaler: 4 trinn
Spill sanger med Arduino ved å bruke ADC til PWM på Flyback Transformer eller Speaker: Hello Guys, Dette er den andre delen av min andre instruerbare (det var mye vanskelig), I utgangspunktet har jeg i dette prosjektet brukt ADC og TIMERS på min Arduino for å konverter lydsignal til et PWM -signal. Dette er mye enklere enn min forrige Instructa
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer: 6 trinn (med bilder)
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer: Hei folkens, Dette er min første instruerbare, jeg håper du vil like det! I utgangspunktet har jeg i dette prosjektet brukt seriell kommunikasjon mellom min Arduino og min bærbare, for å overføre musikkdata fra min bærbare til Arduino. Og ved å bruke Arduino TIMERS t
Spill sanger med trinnmotor !!: 11 trinn (med bilder)
Spill sanger ved hjelp av trinnmotor !!: Dette prosjektet handler om å designe et enkelt dynamisk grensesnitt, som gjør det mulig å samhandle med en trinnmotor på to forskjellige måter. Det første grensesnittet vil kontrollere retningen og hastigheten til trinnmotoren ved bruk av en enkel GUI, som h
Hvordan lage ringetone fra sanger: 3 trinn
Hvordan lage ringetone fra sanger: Du trenger en mobiltelefon på denne instruksjonsboken som spiller av WAV -filer, og du har en måte å koble den til datamaskinen din. Eksempler på tilkobling vil være infrarød, bluetooth, usb eller en datakabel for telefonen. Du må også ha Audacity