INHOUDSOPGAWE:

Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator: 6 stappe (met foto's)
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator: 6 stappe (met foto's)

Video: Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator: 6 stappe (met foto's)

Video: Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator: 6 stappe (met foto's)
Video: Control 32 Servo over Wi-Fi using ESP32 and PCA9685 via desktop or mobile phone V5 2024, Julie
Anonim
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator
Speel liedjies (MP3) met Arduino met behulp van PWM op luidspreker of Flyback -transformator

Hallo ouens, Dit is my eerste opdrag, ek hoop dat u daarvan sal hou !!

Eintlik het ek in hierdie projek die seriële kommunikasie tussen my Arduino en my skootrekenaar gebruik om musiekdata van my skootrekenaar na die Arduino oor te dra. En die Arduino TIMERS gebruik om die data as 'n PWM -sein te speel.

Ek wou noem dat hierdie projek nie vir beginners is nie !!!.

Hierdie projek was eintlik een van die langste projekte, want ons moet baie dinge doen om dit te laat werk.

AANDAG

Ek het die tweede deel van hierdie instruksies gemaak, wat baie makliker is en minimale probleme benodig om te werk

Skakel na tweede deel (maklikste).

Stap 1: Dinge wat ons nodig het vir hierdie projek (vereistes)

1. Arduino -bord (ons kan enige bord (328, 2560) gebruik, dit wil sê Mega, Uno, Mini, ens, maar met spesifieke verskillende penne)

2. PC of Laptop met Linux (ek het Fedora 29 gebruik) Of Live USB met Linux

3. Breadboard of Perfboard

4. Verbindingsdrade

5. TC4420 (Mosfet -bestuurder of so iets)

6. Skakel Mosfet (N- of P-kanaal, bedraad dan dienooreenkomstig) (ek het N-kanaal gebruik)

7. Luidspreker of Flyback Transformer (Ja, jy lees dit reg !!)

8. Geskikte kragbron (0-12V) (ek het my eie ATX-kragtoevoer gebruik)

9. Koelbak (ek het van my ou rekenaar gered)

10. PC met Windows en pen drive.

Lees die volgende stap om die gedetailleerde werking van elke komponent en hierdie projek te ken.

Ek het die tweede deel van hierdie instruksies gemaak, wat baie makliker is en minimale probleme benodig om te werk. Skakel na die tweede deel (maklikste).

Stap 2: Begrip van die werkbeginsel

Ahhh !! die langste deel van 'n instruksionele, lees en skryf van hierdie afdeling is albei vervelig.

Eerstens moet ons 'n oorsig kry van hoe hierdie ding eintlik werk.

Wat ons hier doen, is dat ons eerstens ons MP3 -liedjie omskakel in 'n WAV -lêer en hierdie lêer in 'n C -koplêer met behulp van die sagteware wat in die skakel is. Hierdie C-kode bevat eintlik 8-bis (hoekom 8-bis ?? lees verder) data-monsters wat ons moet speel met ons Arduino teen 'n vaste koers of spoed, wat volgens ons monsternemingstempo gespesifiseer word.

Teorie van 'n klanksein.

Vir diegene wat nie weet wat die bemonsteringstempo of bitsnelheid is nie:-

Monstertempo word gedefinieer as die aantal monsters, ons speel binne 'n sekonde (gewoonlik gemeet in Hz of KHz).

Om meer in detail te weet: -Klik hier

Standaard bemonsteringsyfers is 44100 Hz (beste kwaliteit), 32000 Hz, 22050 Hz, ens

wat beteken dat 44100 monsters binne 'n sekonde gebruik word om 'n golf dienooreenkomstig te genereer.

dit wil sê dat elke monster met 'n vaste interval van 1/44100 = 22,67 uS gespeel word.

Dan kom die bitdiepte van 'n klanksein, wat gewoonlik 'n maatstaf is van hoe presies 'n klank in digitale klank voorgestel word. Hoe hoër die bisdiepte, hoe akkurater is die digitale klank.

Maar met Arduino of enige ander mikro-kontroleerder met 'n 16Mhz-klok kan ons slegs tot 8-bis gebruik. Ek sal dit verduidelik hoekom.

Daar is 'n formule op bladsy nr 102 in die datablad van 328p:- Gegevensblad

Ek sal nie in detail verduidelik waarom ek hierdie formule gebruik nie.

frekwensie van sein = Kloksignaal / N x (1+BO)

Kloksignaal = 16Mhz (Arduino -bord)

N = prescaler (1 is waarde vir ons projek)

BO = waarde 0 tot 2^16 (vir 16-bis timer timer) (255 = 2^8 (8-bit) vir ons projek)

ons kry die waarde van die frekwensie van sein = 62,5 kHz

Dit beteken dat die frekwensie van draergolf afhanklik is van bitdiepte.

Gestel, as ons TOP-waarde = 2^16 = 65536 (d.w.s. diepte van 16-bis) gebruik

dan kry ons die waarde van die frekwensie van sein = 244 Hz (wat ons nie kan gebruik nie)

OKK … Soveel teorieë oor hoe oudioseine werk, is genoeg, dus terug na die projek.

Die C-kode wat vir 'n liedjie gegenereer word, kan na Arduino gekopieer word en kan gespeel word, maar ons is beperk tot 3 sekondes klankweergawe met 'n monsterneming van 8000 Hz. Omdat hierdie C -kode 'n tekslêer is en dus nie saamgepers nie, eerder gedecomprimeerd. En dit neem te veel ruimte in beslag. (bv. C-kode lêer met klank van 43 sek. met 44, 1 KHz monsters neem ruimte tot 23 MB). En ons Arduino Mega gee ons 'n ruimte van ongeveer 256 Kb.

Dus hoe ons liedjies met Arduino sal speel. Dis nie moontlik nie. Hierdie instruksie is vals. Moenie bekommerd wees nie lesers, Daarom moet ons 'n soort kommunikasie tussen Arduino teen so hoë snelhede (tot 1 Mb/s) gebruik om klankdata na Arduino te stuur.

Maar hoeveel spoed benodig ons presies om dit te doen ??

Die antwoord is 44000 grepe per sekonde, wat beteken dat snelhede meer as 44000*8 = 325, 000 bits/s is.

Ons benodig nog 'n randapparaat met groot berging om hierdie data na ons Arduino te stuur. En dit sal ons rekenaar met Linux wees (hoekom 'n rekenaar met Linux ??? Lees verder om meer daaroor te weet.)

Ahaa … Dit beteken dat ons seriële kommunikasie kan gebruik … Maar wag … reeks is moontlik met net 'n snelheid tot 115200 Bits/s, wat beteken (325000/115200 = 3) dat dit drie keer stadiger is as wat nodig is.

Nee, my vriende, dit is nie. Ons gebruik 'n spoed of baudsnelheid van 500 000 bit/s met 'n kabel van maksimum 20-30 cm, wat 1,5 keer vinniger is as wat nodig is.

Waarom Linux, nie Windows nie ???

Ons moet dus monsters met 'n interval (ook hierbo gespesifiseer) van 1/44100 = 22,67 uS met ons rekenaar stuur.

So, hoe kan ons dit programmeer om dit te doen ??

Ons kan C ++ gebruik om 'n databyte met 'n interval met behulp van 'n slaapfunksie na Serial te stuur

soos nanosleep, Chrono, ens, ens.

vir (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

MAAR NIE WERK NIE OP WINDOWS WERK dit ook nie op Linux nie (maar ek het 'n ander manier gevind wat u kan sien in my aangehegte kode.)

Omdat ons nie so 'n omvang kan verkry deur vensters te gebruik nie. U benodig Linux om so 'n gedetailleerde weergawe te bereik.

Probleme wat ek gevind het, selfs met Linux …

ons kan so 'n omvang kry met Linux, maar ek het nie so 'n funksie gevind om my program vir 22uS te laat slaap nie.

Funksies soos nanosleep, Chrono nanosleep, ens., Ens., Werk ook nie, aangesien dit slegs meer as 100 uS slaap. Maar ek het presies nodig gehad, presies 22 uS. Ek het elke bladsy op Google ondersoek en geëksperimenteer met alle moontlike funksies wat beskikbaar is in C/C ++, maar niks het vir my gewerk nie. Toe het ek my eie funksie, wat vir my 'n ware sjarme was.

En my kode bied nou 'n presiese, presiese slaap van 1uS of hoër !!!

Ons het dus die moeilike deel behandel en die res is maklik …

En ons wil 'n PWM -sein genereer met behulp van Arduino met 'n spesifieke frekwensie, ook draergolffrekwensie. (62.5KHz (soos hierbo bereken) vir goeie immuniteit van sein).

Dus, ons moet sogenaamde TIMERS van Arduino gebruik om PWM te skep. Terloops, ek sal nie baie besonderhede hieroor gee nie, want u sal baie tutoriale vind oor TIMERS, maar as u dit nie vind nie, lewer dan 'n opmerking hieronder.

Ek het 'n TC4420 Mosfet -bestuurder gebruik om ons Arduino -penne te red, omdat hulle nie soveel stroom kan lewer om soms met 'n MOSFET te ry nie.

Dit was dus amper die teorie van hierdie projek; ons kan nou die stroombaan -diagram sien.

AANDAG AANDAG AANDAG

Eintlik is hierdie projek doelbewus baie moeilik gemaak (ek sal vertel hoekom), daar is 'n ander metode wat geen PC vereis nie, net Arduino en spreker in my volgende instruksie. Skakel is hier.

*Die hoofdoel van hierdie projek is om seriële kommunikasie te gebruik en om die krag daarvan te ken, en om te leer hoe ons ons rekenaar kan programmeer om take met sulke fyn tussenposes presies uit te voer.*

Stap 3: Skematiese

Skematiese
Skematiese

Verbind al die komponente soos in die skematiese voorstelling getoon. U het dus twee opsies:-

1. Koppel 'n luidspreker (gekoppel aan 5V)

2. Koppel 'n Flyback -transformator (gekoppel aan 12V)

Ek het albei probeer. En albei werk redelik goed.

Vrywaring:-

*Ek beveel aan dat u Flyback Transformer met omsigtigheid gebruik, aangesien dit gevaarlik kan wees omdat dit hoë spanning veroorsaak. En ek is nie aanspreeklik vir enige skade nie.*

Stap 4: Skakel MP3 na WAV -lêer om met Audacity

Omskep MP3 na WAV -lêer met behulp van Audacity
Omskep MP3 na WAV -lêer met behulp van Audacity
Omskep MP3 na WAV -lêer met behulp van Audacity
Omskep MP3 na WAV -lêer met behulp van Audacity
Omskep MP3 na WAV -lêer met behulp van Audacity
Omskep MP3 na WAV -lêer met behulp van Audacity

Laai dus eers die sagteware af

1. Vermetelheid, soek en laai van Google af

2. Om 'n WAV-lêer na C-kode om te skakel, laai 'n venstertoepassing af met die naam WAVToCode

U kan vanaf hierdie skakel leer hoe om WAVToCode -sagteware te gebruik en dit van hierdie skakel af te laai.

Ek sal ook gedetailleerde stappe gee oor hoe om beide sagteware te gebruik.

Sien die foto's wat met hierdie instruksies verband hou.

In hierdie stap omskakel ons MP3 na Wav. (Volg die foto's, die projekstempo moet 44100Hz wees)

In die volgende stap omskakel ons 'n wav -lêer na C -kode.

Stap 5: WAV na C-kode

WAV na C-kode
WAV na C-kode
WAV na C-kode
WAV na C-kode
WAV na C-kode
WAV na C-kode

Volg die foto's.

Sien die laaste twee foto's; die veranderinge moet presies dieselfde wees, hoofletters moet hoofletters en kleinletters klein wees, of u kry sintaksisfout tydens die opstel.

(U kan sien dat die liedjie van 1 minuut 41 minute 23 MB spasie geneem het.)

Verander die naam en lengte van die liedjie met die naam en duur van u liedjie.

En stoor die C -kode lêer.

Doen dit met al die liedjies wat u met Arduino wil speel

Stap 6: Maak 'n finale lêer en maak u Linux aan

Maak 'n finale lêer en maak u Linux gereed
Maak 'n finale lêer en maak u Linux gereed
Maak 'n finale lêer en maak u Linux gereed
Maak 'n finale lêer en maak u Linux gereed
Maak 'n finale lêer en maak u Linux gereed
Maak 'n finale lêer en maak u Linux gereed

Voeg al u bekeerde liedjies by die lêer wat op hierdie skakel verskyn.

En volg die foto's.

Laai die kode op in die aangehegte Arduino.

Onthou die C-kode se lêernaam. (Byvoorbeeld leefstyl, dollar, waarde), want ons moet presies dieselfde name in ons kode met hoofletters sensitief noem.

Uiteindelik moet u u Fedora Live USB of ander aanskakel en die gcc -samesteller installeer en dan die opstelinstruksies uit die gids opstel en die program opstel.

Uiteindelik kan u na liedjies van Speaker of Flyback luister.

Dankie dat u hierdie instruksies gelees het en lewer kommentaar as u daarvan hou.

AANDAG Ek het die tweede deel van hierdie instruksies gemaak, wat baie makliker is en minimale probleme benodig om te werk. Skakel na tweede deel (maklikste een)

Aanbeveel: