Tartalomjegyzék:

Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren: 6 lépés (képekkel)
Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren: 6 lépés (képekkel)

Videó: Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren: 6 lépés (képekkel)

Videó: Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren: 6 lépés (képekkel)
Videó: LDmicro 14: ЖК-дисплей I2C и часы реального времени DS3231 (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, November
Anonim
Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren
Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren
Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren
Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren
Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren
Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren
Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren
Zeneszámok lejátszása (MP3) Arduino segítségével PWM használatával hangszórón vagy Flyback Transformeren

Helló srácok, Ez az első tanulságos, remélem tetszeni fog !!

Alapvetően ebben a projektben az Arduino és a laptopom közötti soros kommunikációt használtam zenei adatok továbbítására a laptopomról az Arduino -ra. És az Arduino TIMERS segítségével játszhatja le az adatokat PWM jelként.

Ezt akartam megemlíteni, ez a projekt nem kezdőknek szól !!!.

Valójában ez a projekt volt az egyik leghosszabb projekt, mert sok mindent meg kell tennünk, hogy működjön.

FIGYELEM

Ennek második részét taníthatóvá tettem, amely sokkal könnyebb és minimális problémákat igényel

Link a második részhez (a legegyszerűbb).

1. lépés: A projekthez szükséges dolgok (követelmények)

1. Arduino tábla (bármilyen táblát (328, 2560) használhatunk, azaz Mega, Uno, Mini stb., De különböző tűkkel)

2. PC vagy laptop Linux -al (Fedora 29 -et használtam) vagy Live USB Linux -szal

3. Breadboard vagy Perfboard

4. Vezetékek csatlakoztatása

5. TC4420 (Mosfet driver vagy ilyesmi)

6. Tápellátás Mosfet (N vagy P csatorna, kérjük, kösse be a kábelt ennek megfelelően) (N-csatornát használtam)

7. Hangszóró vagy Flyback Transformer (Igen, jól olvasta !!)

8. Megfelelő tápegység (0-12V) (saját ATX tápegységet használtam)

9. Hűtőborda (a régi PC -ről mentettem ki)

10. PC Windows -al és toll meghajtóval.

Az egyes komponensek és a projekt részletes működésének megismeréséhez kérjük, olvassa el a következő lépést.

Ennek a második részét taníthatóvá tettem, ami sokkal könnyebb és minimális problémákat igényel a munkához. Link a második részhez (legegyszerűbb).

2. lépés: A működési elv megértése

Ahhh !! az oktatható leghosszabb része, ennek a szakasznak az olvasása és írása unalmas.

Először is áttekintést kell kapnunk arról, hogyan is működik ez a dolog.

Itt azt tesszük, hogy először a MP3 -ban lévő dalunkat WAV -fájlba, ezt a fájlt C -fejléc -fájlba konvertáljuk a hivatkozásban található szoftver segítségével. Ez a C kód valójában 8 bites (miért 8 bites? Tovább) adatmintákat tartalmaz, amelyeket le kell játszanunk az Arduino segítségével rögzített sebességgel vagy sebességgel, amelyet a mintavételi arányunknak megfelelően adunk meg.

Az audiojel elmélete.

Azok számára, akik nem tudják, mi a mintavételi vagy bitsebesség:

A mintavételi gyakoriság a minták száma, amelyet egy másodperc alatt játszunk (általában Hz -ben vagy KHz -ben mérve).

Ha többet szeretne megtudni a részletekről: -Kattintson ide

A standard mintavételi frekvencia 44100 Hz (legjobb minőség), 32000 Hz, 22050 Hz stb

ami azt jelenti, hogy 44100 mintát használnak egy másodperc alatt, hogy ennek megfelelően hullámot generáljanak.

azaz minden mintát rögzített 1/44100 = 22,67 uS intervallummal kell lejátszani.

Ezután jön az audiojel bitmélysége, amely általában azt jelzi, hogy a hang mennyire pontosan jelenik meg a digitális hangban. Minél nagyobb a bitmélység, annál pontosabb a digitális hang.

De az Arduino vagy bármely más, 16 MHz-es órajelű mikrovezérlő esetén csak 8 bites használatot tesz lehetővé. Elmagyarázom, miért.

Van egy képlet a 102. oldalon a 328p adatlapján:- Adatlap

Nem részletezem, miért használom ezt a képletet.

jel gyakorisága = Órajel / N x (1+TOP)

Órajel = 16Mhz (Arduino tábla)

N = előskálázó (1 a projektünk értéke)

TOP = érték 0-2^16 (16 bites időzítő számlálóhoz) (255 = 2^8 (8 bites) a projektünkhöz)

megkapjuk a Jel frekvencia értékét = 62,5 kHz

Ez azt jelenti, hogy a vivőhullám frekvenciája a bitmélységtől függ.

Tegyük fel, ha TOP értéket használunk = 2^16 = 65536 (azaz 16 bites bitmélység)

akkor megkapjuk a jel frekvenciájának értékét = 244 Hz (amit nem használhatunk)

OK… Szóval ennyi elmélet az audió jelek működéséről elég, szóval térjünk vissza a projekthez.

A dalhoz generált C-kód másolható az Arduino-ba, és lejátszható, de legfeljebb 3 másodperces audiolejátszásra vagyunk korlátozva, 8000 Hz mintavételi gyakorisággal. Mivel ez a C kód egy szöveges fájl, ezért nem tömörített, hanem kicsomagolt. És túl sok helyet foglal el. (pl. C-kódfájl 43 másodperces hanggal, 44, 1 KHz-es mintákkal 23 MB-ig terjedő helyet foglal el). És az Arduino Mega körülbelül 256 Kb helyet biztosít nekünk.

Tehát hogyan fogunk dalokat játszani az Arduino használatával. Ez nem lehetséges. Ez az Instructable hamis. Ne aggódj olvasók, Éppen ezért valamilyen kommunikációt kell használnunk az Arduino között nagyon nagy sebességgel (akár 1 Mb/s), hogy audio adatokat küldjünk az Arduino -nak.

De pontosan mekkora sebességre van szükségünk ehhez?

A válasz 44000 bájt másodpercenként, ami azt jelenti, hogy a sebesség több mint 44000*8 = 325 000 bit/s.

Szükségünk van egy másik, nagy tárhellyel rendelkező perifériára, hogy ezeket az adatokat elküldhessük Arduino -nknak. És ez lesz a mi számítógépünk Linux -szal (miért pont PC Linux -szal ??? kérjük, olvassa tovább, hogy többet tudjon róla.)

Ahaa… Ez azt jelenti, hogy használhatjuk a soros kommunikációt… De várjon… a soros elérés akár 115200 bit/s sebességgel is lehetséges, ami azt jelenti (325000/115200 = 3), hogy háromszor lassabb, mint szükséges.

Nem, barátaim, nem az. 500 000 bit/s sebességet vagy Baud-sebességet fogunk használni legfeljebb 20-30 cm-es kábellel, ami 1,5-ször gyorsabb a szükségesnél.

Miért Linux, nem Windows ???

Tehát mintákat kell küldenünk (szintén fent meghatározva) 1/44100 = 22,67 uS intervallummal a PC -vel.

Akkor hogyan programozhatjuk rá ??

A C ++ segítségével bizonyos időközönként adatbájtot küldhetünk a Serialon keresztül valamilyen alvó funkció használatával

mint a nanosleep, Chrono, stb, stb …

for (int x = 0; x

sendData (x);

nanoalvás (22000); // 22uS

}

DE NEM, HOGY NEM MŰKÖDIK A WINDOWS -on, Linuxon sem működött így (de találtam egy másik módot, amelyet a mellékelt kódomban láthat.)

Mert ablakokkal nem tudunk ilyen szemcsésséget elérni. Az ilyen részletesség eléréséhez Linuxra van szükség.

Problémákat találtam még Linux alatt is …

ilyen részletességet érhetünk el a Linux használatával, de nem találtam ilyen funkciót a programom 22uS -es alváshoz.

Az olyan funkciók, mint a nanosleep, a Chrono nanosleep, stb, stb. Szintén nem működnek, mivel csak 100 uS -nál nagyobb alvást biztosítanak. De nekem pontosan, pontosan 22 uS kellett. Minden egyes oldalt átnéztem a Google -on, és kísérleteztem a C/C ++ nyelven elérhető összes lehetséges funkcióval, de semmi sem működött számomra. Aztán kitaláltam a saját funkciómat, ami nekem igazi varázsként működött.

És a kódom most pontos, pontosan 1uS vagy annál magasabb alvást biztosít !!!

Tehát lefedtük a nehéz részt, a többi pedig könnyű…

És PWM jelet szeretnénk generálni az Arduino használatával, meghatározott frekvenciával és hordozóhullám frekvenciával is (62,5KHz (a fentiek szerint számítva) a jó jelvédettség érdekében).

Tehát az Arduino úgynevezett TIMERS-jét kell használnunk a PWM létrehozásához. Egyébként nem részletezném ezt nagyon, mert sok oktatóanyagot találsz az IDŐZÍTŐK témában, de ha nem találsz olyat, akkor kommentben írok egyet.

TC4420 Mosfet illesztőprogramot használtam, hogy megmentsük Arduino csapjainkat, mert nem tudnak annyi áramot leadni, hogy néha MOSFET -et vezessenek.

Tehát ez volt a projekt majdnem elmélete, most láthatjuk a kapcsolási rajzot.

FIGYELEM FIGYELEM FIGYELEM

Valójában ezt a projektet szándékosan nagyon megnehezítették (megmondom, miért), van egy másik módszer, amelyhez nincs szükség PC -re, csak Arduino és hangszóró a következő utasításomban. A link itt található.

*Ennek a projektnek a fő célja a soros kommunikáció használata és annak hatékonyságának megismerése, valamint annak megtanulása, hogyan programozhatjuk számítógépünket a feladatok pontos elvégzésére ilyen finom időközönként.*

3. lépés: Vázlatos

Vázlatos
Vázlatos

Csatlakoztassa az összes alkatrészt a vázlat szerint. Tehát itt két lehetőség közül választhat:-

1. Csatlakoztasson egy hangszórót (5V -os csatlakozóval)

2. Csatlakoztasson egy Flyback transzformátort (12V -os csatlakozóval)

Mindkettőt kipróbáltam. És mindkettő elég jól működik.

Jogi nyilatkozat:-

*Javaslom a Flyback Transformer elővigyázatossággal történő használatát, mivel veszélyes lehet, mert magas feszültséget okoz. És nem vagyok felelős semmilyen kárért.*

4. lépés: Az MP3 konvertálása WAV -fájlba az Audacity használatával

Az MP3 konvertálása WAV fájlba az Audacity segítségével
Az MP3 konvertálása WAV fájlba az Audacity segítségével
Az MP3 konvertálása WAV fájlba az Audacity segítségével
Az MP3 konvertálása WAV fájlba az Audacity segítségével
Az MP3 konvertálása WAV fájlba az Audacity segítségével
Az MP3 konvertálása WAV fájlba az Audacity segítségével

Tehát először is töltse le a szoftvert

1. Audacity, keresés és letöltés a Google -tól

2. A WAV fájl C-kódra konvertálásához töltsön le egy WAVToCode nevű ablakos alkalmazást

Ebből a linkből megtudhatja a WAVToCode szoftver használatát, és innen töltheti le.

Részletes lépéseket teszek a két szoftver használatáról is.

Kérjük, tekintse meg az ehhez az oktatóanyaghoz kapcsolódó fényképeket.

Ebben a lépésben az MP3 -t Wav -re konvertáljuk. (Kövesse a fényképeket, a projekt sebességének 44100 Hz -nek kell lennie)

A következő lépésben egy wav fájlt konvertálunk C kódra.

5. lépés: WAV a C-kódhoz

WAV-C-kód
WAV-C-kód
WAV-C-kód
WAV-C-kód
WAV-C-kód
WAV-C-kód

Kövesse a fényképeket.

Lásd az utolsó két képet, a változtatásoknak pontosan ugyanazoknak kell lenniük, a nagybetűknek nagynak, a kisbetűknek kicsinek kell lenniük, különben szintaktikai hibát kapunk a fordítás során.

(Látható, hogy az 1 perc 41 másodperces dal 23 MB helyet foglal.)

Módosítsa a dal nevét és hosszát a dal nevével és időtartamával.

És mentse el a C Code fájlt.

Ezt tegye meg az összes dalhoz, amelyet Arduino -val szeretne játszani

6. lépés: Készítsen egy végső fájlt, és indítsa el a Linuxot

Készítsen egy végső fájlt, és indítsa el a Linuxot
Készítsen egy végső fájlt, és indítsa el a Linuxot
Készítsen egy végső fájlt, és indítsa el a Linuxot
Készítsen egy végső fájlt, és indítsa el a Linuxot
Készítsen egy végső fájlt, és indítsa el a Linuxot
Készítsen egy végső fájlt, és indítsa el a Linuxot

Adja hozzá az összes konvertált dalt a linkben megadott fájlhoz.

És kövesse a képeket.

Töltse fel a kódot az Arduino -ba, amelyet csatoltam.

Ne feledje a C Code fájlneveket. (Pl. Életmód, dollár, viselet), mert pontosan ugyanazokat a neveket kell megemlítenünk a kódunkban kis- és nagybetűkkel.

A végén kapcsolja be a Fedora Live USB -t vagy más eszközt, és telepítse a gcc fordítót, majd a mappából származó fordítási utasítások segítségével fordítsa le a programot, és futtassa azt.

Végül meghallgathatja a Speaker vagy a Flyback dalait.

Köszönjük, hogy elolvasta ezt az oktatóanyagot, és ha tetszik, írjon megjegyzést.

FIGYELEM: A második részt taníthatóvá tettem, amely sokkal könnyebb és minimális problémákat igényel. Link a második részhez (a legegyszerűbb)

Ajánlott: