Innehållsförteckning:

Gör låtar med en Arduino och en likströmsmotor: 6 steg
Gör låtar med en Arduino och en likströmsmotor: 6 steg

Video: Gör låtar med en Arduino och en likströmsmotor: 6 steg

Video: Gör låtar med en Arduino och en likströmsmotor: 6 steg
Video: Lesson 95: Using L293D 4 DC Motors Shield for Arduino UNO and Mega | Arduino Step By Step Course 2024, November
Anonim
Gör låtar med en Arduino och en likströmsmotor
Gör låtar med en Arduino och en likströmsmotor

Häromdagen, när jag rullade igenom några artiklar om Arduino, såg jag ett intressant projekt som använde Arduino-styrda stegmotorer för att skapa korta melodier. Arduino använde en PWM (Pulse Width Modulation) stift för att köra stegmotorn vid specifika frekvenser, motsvarande musiknoter. Genom att ta fram vilka frekvenser som spelades när kunde en tydlig melodi höras från stegmotorn.

Men när jag provade det själv fann jag att stegmotorn jag har inte kan rotera tillräckligt snabbt för att skapa en ton. Istället använde jag en likströmsmotor, som är relativt enkel att programmera och ansluta till en Arduino. En vanlig L293D IC kan användas för att enkelt driva motorn från en Arduino PWM -stift, och den inbyggda tonen () -funktionen i Arduino kan generera den nödvändiga frekvensen. Till min förvåning hittade jag inga exempel eller projekt som använde en likströmsmotor online, så denna instruktionsbok är mitt svar för att åtgärda det. Låt oss börja!

P. S. Jag antar att du redan har lite erfarenhet av Arduino och är bekant med dess programmeringsspråk och hårdvara. Du bör veta vad matriser är, vad PWM är och hur du använder det, och hur spänning och ström fungerar, bara för att nämna några saker. Om du inte är där än eller bara börjat Arduino, oroa dig inte: prova den här startsidan från den officiella Arduino -webbplatsen och kom tillbaka när du är redo.:)

Tillbehör

  • Arduino (jag använde en UNO men du kan använda en annan Arduino om du vill)
  • Standard 5V DC -motor, helst en som kan ha en fläkt ansluten (se bilden i "Montering av kretsen"
  • L293D IC
  • Lika många tryckknappar som noter i låten du vill spela
  • Bakbord
  • Jumper Wires

Steg 1: Översikt

Så här fungerar projektet: Arduino kommer att generera en fyrkantvåg vid en given frekvens, som den matar ut till L293D. L293D är ansluten till en extern strömförsörjning som den använder för att driva motorn med den frekvens den ges av Arduino. Genom att förhindra likströmsmotorns axel från att rotera kan motorn höras stängas av och på med frekvensen, vilket ger en ton eller ton. Vi kan programmera Arduino för att spela noter när du trycker på knappar eller för att spela dem automatiskt.

Steg 2: Montera kretsen

Montering av kretsen
Montering av kretsen
Montering av kretsen
Montering av kretsen

För att montera kretsen, följ helt enkelt Fritzing -diagrammet ovan.

Tips: Anteckningen från motorn hörs bäst när axeln inte snurrar. Jag satte en fläkt på axeln på min motor och använde lite tejp för att hålla fläkten stilla medan motorn gick (se bild). Detta hindrade axeln från att vända och gav en tydlig, hörbar ton. Du kan behöva göra några justeringar för att få en ren ton från din motor.

Steg 3: Hur kretsen fungerar

Hur kretsen fungerar
Hur kretsen fungerar

L293D är en IC som används för att driva relativt högspännings-, högströmsenheter som reläer och motorer. Arduino kan inte driva de flesta motorer direkt från dess utgång (och EMF: s baksida från motorn kan skada Arduinos känsliga digitala kretsar), så en IC som L293D kan användas med en extern strömförsörjning för att enkelt driva likströmsmotorn. Att mata in en signal i L293D kommer att mata ut samma signal till likströmsmotorn utan att riskera att skada Arduino.

Ovan är en pinout/funktionell schema över L293D från dess datablad. Eftersom vi bara kör 1 motor (L293D kan köra 2) behöver vi bara ena sidan av IC: n. Stift 8 är effekt, stift 4 och 5 är GND, stift 1 är PWM -utgången från Arduino och stift 2 och 7 styr motorns riktning. När stift 2 är HÖG och stift 7 är LÅG, snurrar motorn åt ett håll, och när tapp 2 är LÅG och stift 7 är HÖG, snurrar motorn åt andra hållet. Eftersom vi inte bryr oss om hur motorn snurrar spelar det ingen roll om stift 2 och 7 är LÅGA eller HÖGA, så länge de skiljer sig från varandra. Stift 3 och 6 ansluts till motorn. Du kan ansluta allt till andra sidan (stift 9-16) om du vill, men var medveten om att ström- och PWM-stiften byter plats.

Obs! Om du använder en Arduino som inte har tillräckligt med stift för varje knapp kan du använda ett nätverk av motstånd för att ansluta alla switchar till en analog stift, till exempel i denna instruktion. Hur detta fungerar ligger utanför projektets omfattning, men om du någonsin har använt en R-2R DAC bör du hitta det bekant. Observera att användning av en analog pin kräver stora delar av koden för att skrivas om, eftersom knappbiblioteket inte kan användas med analoga stift.

Steg 4: Hur koden fungerar

För att göra det lättare att hantera alla knappar använde jag ett bibliotek som heter “Button” av madleech. Jag inkluderade biblioteket först. Därefter, i rad 8-22, definierade jag frekvenserna för noterna som behövs för att spela Twinkle, Twinkle, Little Star (exempelvisan), stiftet jag ska använda för att driva L293D och knapparna.

I installationsfunktionen initierade jag serien, knapparna och ställde in drivrutinstiftet för L293D på utgångsläge.

Slutligen kollade jag i huvudslingan för att se om en knapp har tryckts in. Om den har det spelar Arduino motsvarande ton och skriver ut anteckningsnamnet till Serial Monitor (användbart för att veta vilka anteckningar som är vilka på din brödbräda). Om en anteckning släpps stoppar arduino alla ljud med noTone ().

Tyvärr, på grund av hur biblioteket är uppbyggt, kunde jag inte hitta ett sätt att kontrollera om en knapp har tryckts eller släppts på ett mindre ordagrant sätt än att använda 2 villkor per ton. En annan fel med den här koden är att om du skulle trycka på två knappar samtidigt och sedan släppa en av dem, skulle båda anteckningarna stoppas, eftersom noTone () stoppar alla anteckningar som genereras oavsett vilken ton som utlöste det.

Steg 5: Programmera en låt

I stället för att använda knappar för att spela noter kan du också programmera Arduino för att spela en melodi åt dig automatiskt. Här är en modifierad version av den första skissen som spelar Twinkle, Twinkle, Little Star på motorn. Den första delen av skissen är densamma - definierar notfrekvenser och tonePin. Vi kommer till den nya delen vid bpm = "100". Jag ställer in slag per minut (bpm) och använder sedan lite matematik för att räkna ut antalet millisekunder per slag som bpm motsvarar. För att göra detta använde jag en teknik som kallas dimensionsanalys (oroa dig inte - det är inte så svårt som det låter). Om du någonsin har gått en kemikurs på gymnasiet använde du definitivt dimensionsanalys för att konvertera mellan enheter. Flottarna () är där för att säkerställa att ingenting i ekvationen avrundas förrän i slutet för noggrannhet.

Efter att vi har antalet ms/beat delade eller multiplicerade jag det på lämpligt sätt för att hitta millisekundvärdena för de olika tonlängderna som finns i musik. Jag gör sedan en uppsättning av varje ton i kronologisk ordning, och en annan med varaktigheten av varje ton. Det är viktigt att indexet för varje ton matchar indexet för dess varaktighet, annars låter din melodi. Jag lägger in noterna för Twinkle, Twinkle, Little Star här som ett exempel, men du kan prova vilken låt eller sekvens du vill.

Den verkliga magin händer i loop -funktionen. För var och en av noterna spelar jag tonen under en tid som jag angav i beat_values -matrisen. Istället för att använda fördröjning här, vilket skulle göra att tonen inte spelades, spelade jag in tiden sedan programmet startade med millis () -funktionen och subtraherade den från den aktuella tiden. När tiden överstiger den tid som jag angav att anteckningen skulle hålla i beat_values -matrisen stoppar jag anteckningen. Fördröjningen efter for -slingan är där för att lägga till ett gap mellan noterna, så att efterföljande toner med samma frekvens inte blandas ihop.

Steg 6: Feedback

Det är det för det här projektet. Om det är något du inte förstår, eller om du har några förslag, tveka inte att kontakta mig. Eftersom det här är min första instruktion, skulle jag uppskatta kommentarer och förslag om hur man kan förbättra detta innehåll. Vi ses nästa gång!

Rekommenderad: