Innholdsfortegnelse:

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: 6 trinn (med bilder)

Video: Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer: 6 trinn (med bilder)

Video: Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer: 6 trinn (med bilder)
Video: NOOBS PLAY CLASH ROYALE FROM START LIVE 2024, Juli
Anonim
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer
Spill sanger (MP3) med Arduino ved hjelp av PWM på høyttaler eller Flyback Transformer
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 datamaskin for å overføre musikkdata fra min bærbare til Arduino. Og ved å bruke Arduino TIMERS til å spille dataene som et PWM -signal.

Jeg ønsket å nevne at dette prosjektet ikke er for nybegynnere !!!.

Egentlig var dette prosjektet et av de lengste prosjektene, fordi vi må gjøre mange ting for å få det til å fungere.

MERK FØLGENDE

Jeg har gjort den andre delen av denne instruerbare, som er mye enklere og krever minimale problemer for å fungere

Lenke til andre del (den enkleste).

Trinn 1: Ting vi trenger for dette prosjektet (krav)

1. Arduino Board (vi kan bruke et hvilket som helst brett (328, 2560) dvs. Mega, Uno, Mini, etc, men med spesifikke forskjellige pins)

2. PC eller bærbar PC med Linux (jeg har brukt Fedora 29) Eller Live USB med Linux

3. Brødbrett eller Perfboard

4. Koble til ledninger

5. TC4420 (Mosfet -driver eller slikt)

6. Strøm Mosfet (N eller P kanal, vennligst koble deretter deretter) (jeg har brukt N-kanal)

7. Høyttaler eller Flyback Transformer (Ja, du leste det riktig!)

8. Egnet strømforsyning (0-12V) (jeg har brukt min egen ATX strømforsyning)

9. Varmeavleder (jeg har berget fra min gamle PC)

10. PC med Windows og pennstasjon.

For å vite detaljert arbeid for hver komponent og dette prosjektet, vennligst les neste trinn.

Jeg har gjort den andre delen av denne instruerbare, som er mye lettere og krever minimale problemer for å fungere. Link til andre del (enkleste).

Trinn 2: Forstå arbeidsprinsippet

Ahhh !! den lengste delen av en instruerbar, lese og skrive denne delen er både kjedelig.

Først og fremst må vi få en oversikt over hvordan denne tingen faktisk fungerer.

Det vi gjør her er at vi først konverterer MP3 -sangen vår til en WAV -fil og denne filen til en C -toppfil ved å bruke programvaren som er i lenken. Denne C-koden inneholder faktisk 8-biters (hvorfor 8-biters? Les videre) datasampler som vi trenger for å spille med vår Arduino med en fast hastighet eller hastighet, som er spesifisert i henhold til vår samplingsfrekvens.

Teori om et lydsignal.

For de som ikke vet hva samplingsfrekvensen eller bithastigheten er:-

Samplingsfrekvens er definert som antall prøver, vi spiller på et sekund (vanligvis målt i Hz eller KHz).

For å vite mer i detalj: -Klikk her

Standard samplingshastigheter er 44100 Hz (beste kvalitet), 32000 Hz, 22050 Hz, etc.

noe som betyr at 44100 prøver brukes på et sekund for å generere en bølge tilsvarende.

dvs. at hver prøve må spilles med et fast intervall på 1/44100 = 22,67 uS.

Deretter kommer bitdybden til et lydsignal, som vanligvis er et mål på hvor nøyaktig en lyd er representert i digital lyd. Jo høyere bitdybde, jo mer nøyaktig er den digitale lyden.

Men med Arduino eller en hvilken som helst annen mikrokontroller med 16Mhz-klokke kan vi bare bruke oss opp til 8-bit. Jeg vil forklare det hvorfor.

Det er en formel på side nr. 102 i databladet til 328p:- Dataark

Jeg vil ikke gå i detaljer, hvorfor jeg bruker denne formelen.

frekvens for signal = Klokkesignal / N x (1+TOPP)

Klokkesignal = 16Mhz (Arduino -bord)

N = prescaler (1 er verdien for prosjektet vårt)

TOPP = verdi 0 til 2^16 (for 16-bit timerteller) (255 = 2^8 (8-bit) for prosjektet vårt)

vi får verdien av frekvensen til signal = 62,5 kHz

Dette betyr at bærebølgefrekvensen er avhengig av bitdybde.

Anta at hvis vi bruker TOP-verdi = 2^16 = 65536 (dvs. bitdybde på 16-bits)

så får vi verdien av frekvensen til signal = 244 Hz (som vi ikke kan bruke)

OKK … Så denne teorien om hvordan lydsignaler fungerer er nok, så tilbake til prosjektet.

C-koden som genereres for en sang kan kopieres til Arduino og kan spilles, men vi er begrenset til 3 sek lydavspilling med en samplingsfrekvens på 8000 Hz. Fordi denne C -koden er en tekstfil og derfor ikke komprimert heller dekomprimert. Og det tar for mye plass. (f.eks. C-kodefil med 43-sekunders lyd med 44, 1 KHz-prøver tar plass opptil 23 MB). Og vår Arduino Mega gir oss en plass på omtrent 256 Kb.

Så hvordan skal vi spille sanger ved hjelp av Arduino. Det er ikke mulig. Denne instruksen er falsk. Ikke bekymre deg lesere, Derfor må vi bruke en form for kommunikasjon mellom Arduino i så høye hastigheter (opptil 1 Mb/s) for å sende lyddata til Arduino.

Men hvor mye hastighet trenger vi egentlig for å gjøre dette ??

Svaret er 44000 byte per sekund, noe som betyr hastigheter over 44000*8 = 325 000 bit/s.

Vi trenger en annen perifer enhet med stor lagringsplass for å sende disse dataene til vår Arduino. Og det vil være vår PC med Linux (hvorfor PC med Linux ??? vennligst les videre for å vite mer om det.)

Ahaa … Det betyr at vi kan bruke seriell kommunikasjon … Men vent … seriell er mulig med bare hastigheter opp til 115200 Bits/s, noe som betyr (325000/115200 = 3) at det er tre ganger tregere enn nødvendig.

Nei, mine venner, det er det ikke. Vi bruker hastighet eller baudhastighet på 500 000 bit/s hastighet med en kabel på opptil 20-30 cm maks., Som er 1,5 ganger raskere enn nødvendig.

Hvorfor Linux, ikke Windows ???

Så vi må sende prøver med et intervall (også spesifisert ovenfor) på 1/44100 = 22,67 uS med vår PC.

Så hvordan kan vi programmere det til å gjøre det ??

Vi kan bruke C ++ til å sende en databyte gjennom Serial med et intervall ved hjelp av en slags søvnfunksjon

som nanosleep, Chrono, etc, etc….

for (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

MEN INGEN DET VIRKET IKKE PÅ WINDOWS fungerte heller ikke på denne måten på Linux (men jeg fant en annen måte som du kan se i koden min vedlagt.)

Fordi vi ikke kan oppnå en så detaljert detalj ved å bruke vinduer. Du trenger Linux for å oppnå slike detaljer.

Problemer jeg fant selv med Linux …

vi kan oppnå en så detaljrikdom ved å bruke Linux, men jeg fant ingen slik funksjon for å sove programmet mitt i 22uS.

Funksjoner som nanosleep, Chrono nanosleep osv. Osv. Fungerer heller ikke, ettersom de gir en søvn på bare mer enn 100 us. Men jeg trengte nøyaktig, nøyaktig 22 uS. Jeg har undersøkt hver eneste side på google og eksperimentert med alle mulige funksjoner som er tilgjengelige i C/C ++, men ingenting fungerte for meg. Så kom jeg på min egen funksjon, som fungerte for meg som en ekte sjarm.

Og koden min gir nå en nøyaktig, nøyaktig søvn på 1uS eller høyere !!!

Så vi har dekket den vanskelige delen, og resten er lett …

Og vi ønsker å generere et PWM -signal ved hjelp av Arduino med en spesifikk frekvens også bærebølgefrekvens. (62,5KHz (beregnet ovenfor) for god immunitet mot signal).

Så, vi må bruke såkalte TIMERS of Arduino for å lage PWM. Forresten, jeg kommer ikke til å gå nærmere inn på det, for du finner mange opplæringsprogrammer om temaet TIMERS, men hvis du ikke finner noen, så kommenter nedenfor, så lager jeg en.

Jeg har brukt en TC4420 Mosfet -driver for å lagre Arduino -pinnene våre, fordi de ikke kan levere så mye strøm til å kjøre en MOSFET noen ganger.

Så, det var nesten teorien om dette prosjektet, vi kan nå se kretsdiagrammet.

OBS OBS OBS

Faktisk ble dette prosjektet gjort mye vanskelig med vilje (jeg skal fortelle hvorfor), det er en annen metode som krever noPC bare Arduino og høyttaler i min neste instruksjonslinje. Link er her.

*Hovedformålet med dette prosjektet er å bruke seriell kommunikasjon og å kjenne til kraften og lære hvordan vi kan programmere PCen vår til å utføre oppgaver nøyaktig med så fine intervaller.*

Trinn 3: Skjematisk

Skjematisk
Skjematisk

Koble til alle komponentene som vist i skjemaet. Så du har her to alternativer:-

1. Koble til en høyttaler (koblet til 5V)

2. Koble til en Flyback Transformer (koblet til 12V)

Jeg har prøvd begge deler. Og begge fungerer ganske bra.

Ansvarsfraskrivelse:-

*Jeg anbefaler å bruke Flyback Transformer med forsiktighet, da det kan være farlig fordi det produserer høyspenninger. Og jeg er ikke ansvarlig for noen skade.*

Trinn 4: Konverter MP3 til WAV -fil ved hjelp av Audacity

Konverter MP3 til WAV -fil ved hjelp av Audacity
Konverter MP3 til WAV -fil ved hjelp av Audacity
Konverter MP3 til WAV -fil ved hjelp av Audacity
Konverter MP3 til WAV -fil ved hjelp av Audacity
Konverter MP3 til WAV -fil ved hjelp av Audacity
Konverter MP3 til WAV -fil ved hjelp av Audacity

Så, først og fremst, last ned programvaren

1. Frimodighet, søk og last ned fra Google

2. For å konvertere WAV-fil til C-kode, last ned et vindusprogram som heter WAVToCode

Du kan lære hvordan du bruker WAVToCode -programvare fra denne lenken og laste den ned fra denne lenken.

Jeg vil også gi detaljerte trinn for hvordan du bruker begge programvarene.

Se bildene som er knyttet til denne instruksen.

I dette trinnet konverterer vi MP3 til Wav. (Følg bildene, prosjekthastigheten må være 44100Hz)

I neste trinn konverterer vi en wav -fil til C -kode.

Trinn 5: WAV til C-kode

WAV til C-kode
WAV til C-kode
WAV til C-kode
WAV til C-kode
WAV til C-kode
WAV til C-kode

Følg bildene.

Se de to siste bildene, endringene må være nøyaktig de samme, store bokstaver skal være store og små bokstaver skal være små, eller du får syntaksfeil under kompilering.

(Du kan se at sangen på 1 min 41s tok 23 MB plass.)

Endre sangnavnet og lengden med henholdsvis navn og varighet på sangen din.

Og lagre C -kodefilen.

Gjør dette med alle sangene du vil spille med Arduino

Trinn 6: Lag en siste fil og slå på Linux

Lag en siste fil og slå på Linux
Lag en siste fil og slå på Linux
Lag en siste fil og slå på Linux
Lag en siste fil og slå på Linux
Lag en siste fil og slå på Linux
Lag en siste fil og slå på Linux

Legg til alle de konverterte sangene i filen i denne lenken.

Og følg bildene.

Last opp koden til Arduino, som jeg har lagt ved.

Husk C-kodens filnavn. (For eksempel livsstil, dollar, slitasje), fordi vi må nevne nøyaktig de samme navnene i koden vår med store bokstaver.

På slutten må du fyre opp Fedora Live USB eller annet og installere gcc -kompilatoren og deretter bruke kompileringsinstruksjonene fra mappen, kompilere programmet og kjøre det.

Til slutt vil du kunne lytte til sanger fra Speaker eller Flyback.

Takk for at du leser denne instruksen, og kommenter hvis du liker den.

OBS! Jeg har gjort den andre delen av dette instruerbart, som er mye enklere og krever minimale problemer for å fungere. Lenke til andre del (den enkleste)

Anbefalt: