Innholdsfortegnelse:

Lage sanger med en Arduino og en DC -motor: 6 trinn
Lage sanger med en Arduino og en DC -motor: 6 trinn

Video: Lage sanger med en Arduino og en DC -motor: 6 trinn

Video: Lage sanger med en Arduino og en DC -motor: 6 trinn
Video: Настройка 3D-принтера с помощью MKS sGen L v1.0 Часть 3 2024, Juli
Anonim
Lag sanger med en Arduino og en likestrømsmotor
Lag sanger med en Arduino og en likestrømsmotor

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

Montering av kretsen
Montering av kretsen
Montering av kretsen
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

Slik fungerer kretsen
Slik fungerer kretsen

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: