Indholdsfortegnelse:

Lav sange med en Arduino og en DC -motor: 6 trin
Lav sange med en Arduino og en DC -motor: 6 trin

Video: Lav sange med en Arduino og en DC -motor: 6 trin

Video: Lav sange med en Arduino og en DC -motor: 6 trin
Video: Minecraft Live 2022 2024, Juli
Anonim
Lav sange med en Arduino og en DC -motor
Lav sange med en Arduino og en DC -motor

Forleden så jeg, mens jeg rullede gennem nogle artikler om Arduino, et interessant projekt, som brugte Arduino-kontrollerede steppermotorer til at skabe korte melodier. Arduinoen brugte en PWM (Pulse Width Modulation) pin til at køre trinmotoren ved bestemte frekvenser, svarende til musiknoter. Ved at bestemme hvilke frekvenser, der spillede hvornår, kunne der høres en klar melodi fra trinmotoren.

Da jeg selv prøvede det, fandt jeg imidlertid ud af, at trinmotoren, jeg har, ikke kan rotere hurtigt nok til at skabe en tone. I stedet brugte jeg en DC -motor, som er relativt enkel at programmere og tilslutte til en Arduino. En fælles L293D IC kan bruges til let at drive motoren fra en Arduino PWM -pin, og den native tone () -funktion i Arduino kan generere den nødvendige frekvens. Til min overraskelse fandt jeg ingen eksempler eller projekter, der brugte en jævnstrømsmotor online, og derfor er denne instruktionsbog min reaktion på at afhjælpe det. Lad os komme igang!

P. S. Jeg går ud fra, at du allerede har en vis erfaring med Arduino og er fortrolig med dets programmeringssprog og hardware. Du bør vide, hvad arrays er, hvad PWM er, og hvordan du bruger det, og hvordan spænding og strøm fungerer, bare for at nævne et par ting. Hvis du ikke er der endnu eller lige er begyndt på Arduino, skal du ikke bekymre dig: Prøv denne startside fra det officielle Arduino -websted, og kom tilbage, når du er klar.:)

Forbrugsvarer

  • Arduino (jeg brugte en UNO, men du kan bruge en anden Arduino, hvis du vil)
  • Standard 5V DC -motor, helst en i stand til at have en ventilator tilsluttet (se billedet i "Montering af kredsløbet"
  • L293D IC
  • Lige så mange trykknapper som noter i sangen, du vil afspille
  • Brødbræt
  • Jumper Wires

Trin 1: Oversigt

Sådan fungerer projektet: Arduino vil generere en firkantbølge med en given frekvens, som den udsender til L293D. L293D er tilsluttet en ekstern strømforsyning, som den bruger til at drive motoren med den frekvens, den er givet af Arduino. Ved at forhindre DC -motorens aksel i at rotere, kan motoren høres slukke og tænde ved frekvensen, hvilket giver en tone eller note. Vi kan programmere Arduino til at spille noter, når der trykkes på knapper, eller til automatisk at afspille dem.

Trin 2: Samling af kredsløbet

Montering af kredsløbet
Montering af kredsløbet
Montering af kredsløbet
Montering af kredsløbet

For at samle kredsløbet skal du blot følge Fritzing -diagrammet ovenfor.

Tip: Noten fra motoren høres bedst, når akslen ikke drejer. Jeg satte en blæser på akslen på min motor og brugte noget gaffatape til at holde blæseren stille, mens motoren kørte (se billede). Dette forhindrede akslen i at dreje og frembragte en klar, hørbar tone. Du skal muligvis foretage nogle justeringer for at få en ren tone fra din motor.

Trin 3: Sådan fungerer kredsløbet

Sådan fungerer kredsløbet
Sådan fungerer kredsløbet

L293D er en IC, der bruges til at drive relativt høje spændingsenheder med høj strøm, såsom relæer og motorer. Arduino er ude af stand til at drive de fleste motorer direkte fra sin udgang (og EMF -bagsiden fra motoren kan beskadige Arduinos følsomme digitale kredsløb), så en IC som L293D kan bruges med en ekstern strømforsyning til let at drive DC -motoren. Indlæsning af et signal i L293D sender det samme signal til DC -motoren uden at risikere at beskadige Arduino.

Ovenfor er en pinout/funktionel skematisk oversigt over L293D fra databladet. Da vi kun kører 1 motor (L293D kan køre 2), har vi kun brug for den ene side af IC'en. Pin 8 er strøm, ben 4 og 5 er GND, pin 1 er PWM -output fra Arduino, og ben 2 og 7 styrer motorens retning. Når pin 2 er HIGH og pin 7 er LOW, drejer motoren den ene vej, og når pin 2 er LOW og pin 7 er HIGH, drejer motoren den anden vej. Da vi er ligeglade med hvilken vej motoren snurrer, er det ligegyldigt om ben 2 og 7 er LAVE eller HØJE, så længe de er forskellige fra hinanden. Stifter 3 og 6 tilsluttes motoren. Du kan tilslutte alt til den anden side (ben 9-16), hvis du ønsker det, men vær opmærksom på, at strøm- og PWM-benene skifter sted.

Bemærk: Hvis du bruger en Arduino, der ikke har nok ben til hver knap, kan du bruge et netværk af modstande til at forbinde alle switches til en analog pin, som f.eks. I denne instruktion. Hvordan dette fungerer er uden for dette projekts omfang, men hvis du nogensinde har brugt en R-2R DAC, bør du finde det bekendt. Bemærk, at brug af en analog pin vil kræve, at store dele af koden omskrives, da Button -biblioteket ikke kan bruges med analoge pins.

Trin 4: Sådan fungerer koden

For at gøre det lettere at håndtere alle knapperne brugte jeg et bibliotek kaldet “Button” af madleech. Jeg inkluderede biblioteket først. Derefter definerede jeg i linje 8-22 frekvenserne for de noter, der er nødvendige for at spille Twinkle, Twinkle, Little Star (eksempelsangen), den pin, jeg vil bruge til at køre L293D og knapperne.

I opsætningsfunktionen initialiserede jeg serienummeret, knapperne og indstillede driverpinden til L293D til udgangstilstand.

Til sidst tjekkede jeg i hovedsløjfen for at se, om der er blevet trykket på en knap. Hvis det er tilfældet, afspiller Arduino den tilsvarende note og udskriver notenavnet til Serial Monitor (nyttigt til at vide, hvilke noter der er på dit brødbræt). Hvis der frigives en note, stopper arduinoen enhver lyd uden noTone ().

På grund af bibliotekets opbygning kunne jeg desværre ikke finde en måde at kontrollere, om en knap er blevet trykket eller frigivet på en mindre omfattende måde end at bruge 2 betingelser pr. Note. En anden fejl med denne kode er, at hvis du skulle trykke på to knapper samtidigt og derefter slippe en af dem, ville begge noter blive stoppet, fordi noTone () stopper eventuelle noter, der genereres, uanset hvilken note der udløste det.

Trin 5: Programmering af en sang

I stedet for at bruge knapper til at afspille noter, kan du også programmere Arduino til automatisk at spille en melodi for dig. Her er en modificeret version af den første skitse, der spiller Twinkle, Twinkle, Little Star på motoren. Den første del af skitsen er den samme - definerer notefrekvenser og tonePin. Vi kommer til den nye del ved bpm = "100". Jeg indstiller slagene i minuttet (bpm), og bruger derefter noget matematik til at finde ud af antallet af millisekunder pr. Slag, som bpm svarer til. For at gøre dette brugte jeg en teknik kaldet dimensionsanalyse (bare rolig - det er ikke så svært som det lyder). Hvis du nogensinde har taget et kemikursus på gymnasiet, har du helt sikkert brugt dimensionsanalyse til at konvertere mellem enheder. Floaterne () er der for at sikre, at intet i ligningen er afrundet indtil slutningen for nøjagtighed.

Efter at vi har antallet ms/beat, delte eller multiplicerede jeg det passende for at finde millisekundværdierne for de forskellige tonetider, der findes i musik. Jeg laver derefter en række af hver note i kronologisk rækkefølge, og en anden med varigheden af hver note. Det er kritisk, at indekset for hver note matcher indekset for dets varighed, ellers vil din melodi lyde. Jeg lagde noterne til Twinkle, Twinkle, Little Star her som et eksempel, men du kan prøve enhver sang eller række af noter, du gerne vil.

Den virkelige magi sker i loop -funktionen. For hver af noterne spiller jeg tonen i en tid, jeg angav i beat_values -arrayet. I stedet for at bruge forsinkelse her, hvilket ville medføre, at tonen ikke blev afspillet, registrerede jeg tiden, siden programmet startede med millis () -funktionen, og trak det fra den aktuelle tid. Når tiden overstiger den tid, jeg angav noten til at vare i beat_values -arrayet, stopper jeg noten. Forsinkelsen efter for -loop er der for at tilføje et hul mellem noterne og sikre, at efterfølgende noter med samme frekvens ikke blandes sammen.

Trin 6: Feedback

Det er det for dette projekt. Hvis der er noget, du ikke forstår, eller hvis du har forslag, er du velkommen til at kontakte mig. Da dette er min første instruktionsartikel, vil jeg sætte stor pris på kommentarer og forslag til, hvordan jeg kan forbedre dette indhold. Vi ses næste gang!

Anbefalede: