Indholdsfortegnelse:

Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer: 6 trin (med billeder)
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer: 6 trin (med billeder)

Video: Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer: 6 trin (med billeder)

Video: Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer: 6 trin (med billeder)
Video: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Juli
Anonim
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer
Afspil sange (MP3) med Arduino ved hjælp af PWM på højttaler eller Flyback Transformer

Hej gutter, Dette er min første instruerbare, jeg håber du vil kunne lide det !!

Grundlæggende har jeg i dette projekt brugt den serielle kommunikation mellem min Arduino og min bærbare computer til at overføre musikdata fra min bærbare til Arduino. Og ved hjælp af Arduino TIMERS til at afspille dataene som et PWM -signal.

Jeg ville nævne, at dette projekt ikke er for begyndere !!!.

Faktisk var dette projekt et af de længste projekter, fordi vi skal gøre mange ting for at få det til at fungere.

OPMÆRKSOMHED

Jeg har gjort den anden del af denne instruerbare, som er langt lettere og kræver minimale problemer for at fungere

Link til anden del (lettest).

Trin 1: Ting, vi har brug for til dette projekt (krav)

1. Arduino Board (vi kan bruge et hvilket som helst Board (328, 2560) dvs. Mega, Uno, Mini osv. Men med specifikke forskellige pins)

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

3. Brødbræt eller Perfboard

4. Tilslutning af ledninger

5. TC4420 (Mosfet driver eller sådan noget)

6. Strøm Mosfet (N- eller P-kanal, led derefter derefter) (jeg har brugt N-kanal)

7. Højttaler eller Flyback Transformer (Ja du læste det rigtigt !!)

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

9. Kølelegeme (jeg har reddet fra min gamle pc)

10. PC med Windows og pen -drev.

For at kende den detaljerede bearbejdning af hver komponent og dette projekt bedes du læse det næste trin.

Jeg har gjort den anden del af denne instruerbare, som er langt lettere og kræver minimale problemer for at arbejde. Link til anden del (den letteste).

Trin 2: Forståelse af arbejdsprincippet

Ahhh !! den længste del af en instruerbar, at læse og skrive dette afsnit er både kedeligt.

Først og fremmest skal vi få et overblik over, hvordan denne ting rent faktisk fungerer.

hvad vi gør her er, at vi først konverterer vores MP3 -sang til en WAV -fil og denne fil til en C -headerfil ved hjælp af softwaren, der er i linket. Denne C-kode indeholder faktisk 8-bit (hvorfor 8-bit? Læs videre) datasampler, som vi skal afspille ved hjælp af vores Arduino med en fast hastighed eller hastighed, som er specificeret i henhold til vores samplingshastighed.

Teori om et lydsignal.

For dem, der ikke ved, hvad samplingshastigheden eller bithastigheden er:-

Samplingshastighed er defineret som antallet af prøver, vi spiller på et sekund (normalt målt i Hz eller KHz).

For at vide mere i detaljer: -Klik her

Standardprøveudtagningshastigheder er 44100 Hz (bedste kvalitet), 32000 Hz, 22050 Hz osv

hvilket betyder, at 44100 prøver bruges på et sekund til at generere en bølge i overensstemmelse hermed.

det vil sige, at hver prøve skal spilles med et fast interval på 1/44100 = 22,67 uS.

Derefter kommer bitdybden af et lydsignal, som normalt er et mål for, hvor præcist en lyd er repræsenteret i digital lyd. Jo højere bitdybde, jo mere præcis er den digitale lyd.

Men med Arduino eller enhver anden mikro-controller med 16Mhz ur tillader os kun at bruge os op til 8-bit. Jeg vil forklare det hvorfor.

Der er en formel på side nr. 102 i databladet til 328p:- Datablad

Jeg vil ikke gå i detaljer, hvorfor jeg bruger denne formel.

frekvens af signal = ur signal / N x (1+TOP)

Ur Signal = 16Mhz (Arduino board)

N = prescaler (1 er værdi for vores projekt)

TOP = værdi 0 til 2^16 (til 16-bit timertæller) (255 = 2^8 (8-bit) til vores projekt)

vi får værdien af signalfrekvensen = 62,5 kHz

Det betyder, at bølgebølgefrekvensen er afhængig af bitdybde.

Antag, at hvis vi bruger TOP-værdi = 2^16 = 65536 (dvs. bitdybde på 16-bit)

så får vi værdien af frekvensen af signal = 244 Hz (som vi ikke kan bruge)

OKK … Så denne teori om, hvordan lydsignaler fungerer, er nok, så tilbage til projektet.

C-koden, der genereres til en melodi, kan kopieres til Arduino og kan afspilles, men vi er begrænset til 3 sek. Lydafspilning med en samplingshastighed på 8000 Hz. Fordi denne C -kode er en tekstfil og derfor ikke komprimeret snarere dekomprimeret. Og det tager for meget plads. (f.eks. C-kodefil med lyd på 43 sek. med 44, 1 KHz-prøver tager plads op til 23 MB). Og vores Arduino Mega giver os et rum på cirka 256 Kb.

Så hvordan spiller vi sange ved hjælp af Arduino. Det er ikke muligt. Denne instruks er falsk. Bare rolig læsere, Derfor er vi nødt til at bruge en form for kommunikation mellem Arduino ved så høje hastigheder (op til 1 Mb/s) for at sende lyddata til Arduino.

Men hvor meget hastighed har vi egentlig brug for, for at gøre dette ??

Svaret er 44000 bytes pr. Sekund, hvilket betyder hastigheder mere end 44000*8 = 325, 000 Bits/s.

Vi har brug for en anden perifer enhed med stor lagerplads for at sende disse data til vores Arduino. Og det vil være vores pc med Linux (hvorfor PC med Linux ??? læs venligst videre for at vide mere om det.)

Ahaa … Det betyder, at vi kan bruge seriel kommunikation … Men vent … seriel er mulig med bare hastigheder op til 115200 Bits/s, hvilket betyder (325000/115200 = 3), at det er tre gange langsommere end nødvendigt.

Nej, mine venner, det er det ikke. Vi bruger hastighed eller baudhastighed på 500.000 bit/s hastighed med et kabel på op til 20-30 cm maks., Hvilket er 1,5 gange hurtigere end nødvendigt.

Hvorfor Linux, ikke Windows ???

Så vi skal sende prøver med et interval (også angivet ovenfor) på 1/44100 = 22,67 uS med vores pc.

Så hvordan kan vi programmere det til at gøre det ??

Vi kan bruge C ++ til at sende en databyte gennem Serial med et interval ved hjælp af en slags søvnfunktion

som nanosleep, Chrono osv. osv.

for (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

MEN INGEN DET VIRKEDE I WINDOWS virkede heller ikke på denne måde på Linux (men jeg fandt en anden måde, som du kan se i min vedhæftede kode.)

Fordi vi ikke kan opnå en sådan granularitet ved hjælp af vinduer. Du har brug for Linux for at opnå en sådan granularitet.

Problemer jeg fandt selv med Linux …

vi kan opnå en sådan granularitet ved hjælp af Linux, men jeg fandt ingen sådan funktion til at sove mit program i 22uS.

Funktioner som nanosleep, Chrono nanosleep osv. Osv. Fungerer heller ikke, da de kun giver en søvn mere end 100 uS. Men jeg havde brug for præcis, præcis 22 uS. Jeg har undersøgt hver eneste side på google og eksperimenteret med alle mulige funktioner, der er tilgængelige i C/C ++, men intet virkede for mig. Så kom jeg på min egen funktion, der fungerede for mig som en rigtig charme.

Og min kode giver nu en nøjagtig, præcis søvn på 1uS eller derover !!!

Så vi har dækket den svære del, og resten er let …

Og vi ønsker at generere et PWM -signal ved hjælp af Arduino med en bestemt frekvens også bærebølgefrekvens. (62,5KHz (som beregnet ovenfor) for god immunitet af signal).

Så vi skal bruge såkaldte TIMERS af Arduino til at oprette PWM. I øvrigt vil jeg ikke gå i detaljer med det, for du finder mange selvstudier om emnet TIMERS, men hvis du ikke finder nogle, så kommenter herunder, så laver jeg en.

Jeg har brugt en TC4420 Mosfet driver til at gemme vores Arduino Pins, fordi de ikke kan levere så meget strøm til at køre en MOSFET nogle gange.

Så det var næsten teorien om dette projekt, vi kan nu se kredsløbsdiagrammet.

OBS BEMÆRK OBS

Faktisk blev dette projekt gjort meget svært med vilje (jeg vil fortælle hvorfor), der er en anden metode, der kræver noPC bare Arduino og højttaler i min næsteinstrukturerbare. Link er her.

*Hovedformålet med dette projekt er at bruge seriel kommunikation og at kende dens kraft og at lære, hvordan vi kan programmere vores pc til at udføre opgaver præcist med så fine intervaller.*

Trin 3: Skematisk

Skematisk
Skematisk

Tilslut alle komponenterne som vist i skematisk. Så du har her to muligheder:-

1. Tilslut en højttaler (forbundet med 5V)

2. Tilslut en Flyback Transformer (forbundet med 12V)

Jeg har prøvet begge dele. Og begge fungerer ret godt.

Ansvarsfraskrivelse:-

*Jeg anbefaler at bruge Flyback Transformer med forsigtighed, da det kan være farligt, fordi det producerer højspændinger. Og jeg er ikke ansvarlig for nogen skade.*

Trin 4: Konverter MP3 til WAV -fil ved hjælp af Audacity

Konverter MP3 til WAV -fil ved hjælp af Audacity
Konverter MP3 til WAV -fil ved hjælp af Audacity
Konverter MP3 til WAV -fil ved hjælp af Audacity
Konverter MP3 til WAV -fil ved hjælp af Audacity
Konverter MP3 til WAV -fil ved hjælp af Audacity
Konverter MP3 til WAV -fil ved hjælp af Audacity

Så først og fremmest skal du downloade softwaren

1. Frækhed, søg og download fra Google

2. For at konvertere WAV-fil til C-kode skal du downloade et vinduesprogram, der hedder WAVToCode

Du kan lære at bruge WAVToCode -software fra dette link og downloade det fra dette link.

Jeg giver også detaljerede trin om, hvordan du bruger begge software.

Se venligst de billeder, der er knyttet til denne instruktive.

I dette trin konverterer vi MP3 til Wav. (Følg billederne, projekthastigheden skal være 44100Hz)

I det næste trin konverterer vi en wav -fil til C -kode.

Trin 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 billederne.

Se de to sidste billeder, ændringerne skal være præcis de samme, store bogstaver skal være store og små bogstaver skal være små, eller du får en syntaksfejl under kompilering.

(Du kan se, at 1 min 41s sang tog 23 MB plads.)

Skift sangens navn og længde med henholdsvis navn og varighed på din sang.

Og gem C -kodefilen.

Gør dette med alle de sange, du vil spille med Arduino

Trin 6: Lav en sidste fil, og tænd din Linux

Lav en endelig fil og tænd din Linux
Lav en endelig fil og tænd din Linux
Lav en endelig fil og tænd din Linux
Lav en endelig fil og tænd din Linux
Lav en endelig fil og tænd din Linux
Lav en endelig fil og tænd din Linux

Føj dine alle konverterede sange til filen, der findes på dette link.

Og følg billederne.

Upload koden til Arduino, som jeg har vedhæftet.

Husk C-kodens filnavne. (F.eks. Livsstil, dollar, slid), fordi vi skal nævne nøjagtig de samme navne i vores kode med store bogstaver.

I slutningen tænd din Fedora Live USB eller andet, og installer gcc -kompilator og brug derefter kompileringsinstruktionerne fra mappen til at kompilere programmet og køre det.

I sidste ende kan du lytte til sange fra Speaker eller Flyback.

Tak fordi du læste dette instruerbare og kommenter venligst, hvis du kan lide det.

OBS Jeg har gjort den anden del af dette instruerbart, hvilket er langt lettere og kræver minimale problemer at arbejde. Link til anden del (lettest)

Anbefalede: