Tartalomjegyzék:
- 1. lépés: A projekthez szükséges dolgok (követelmények)
- 2. lépés: A működési elv megértése
- 3. lépés: Vázlatos
- 4. lépés: Az MP3 konvertálása WAV -fájlba az Audacity használatával
- 5. lépés: WAV a C-kódhoz
- 6. lépés: Készítsen egy végső fájlt, és indítsa el a Linuxot
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)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
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
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
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
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
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:
Videó lejátszása az ESP32 segítségével: 10 lépés (képekkel)
Videó lejátszása ESP32 -vel: Ez az utasítás bemutat valamit a videó és audió lejátszásáról az ESP32 segítségével
Beszélő Arduino - MP3 lejátszása Arduino -val modul nélkül - MP3 fájl lejátszása Arduino -ból PCM használatával: 6 lépés
Beszélő Arduino | MP3 lejátszása Arduino -val modul nélkül | Mp3 fájl lejátszása az Arduino -ból PCM használatával: Ebben az utasításban megtanuljuk, hogyan kell lejátszani egy mp3 fájlt arduino -val audio modul használata nélkül, itt a PCM könyvtárat fogjuk használni az Arduino számára, amely 16 bites 8 kHz -es PCM -et játszik le
Zeneszámok lejátszása Arduino segítségével az ADC - PWM használatával a Flyback Transformeren vagy hangszórón: 4 lépés
Zeneszámok lejátszása Arduino -val az ADC használatával a PWM -hez a Flyback Transformeren vagy hangszórón: Helló srácok, Ez a második része a másik tanulhatónak (ez nagyon nehéz volt). Alapvetően ebben a projektben az ADC -t és az időzítőt használtam az Arduino -n konvertálja az audiojelet PWM jellé. Ez sokkal könnyebb, mint az előző utasításom
Zene lejátszása Arduino segítségével!: 5 lépés (képekkel)
Zene lejátszása Arduino -val!: Ebben az oktatóanyagban megmutatom, hogyan játszok zenét egy Arduino UNO és egy SD kártya modul segítségével. Az SPI kommunikációt fogjuk használni. Kezdjük
Dalok lejátszása a léptetőmotor segítségével !!: 11 lépés (képekkel)
Zeneszámok lejátszása léptetőmotor segítségével !!: Ez a projekt egy egyszerű, dinamikus felület kialakításáról szól, amely lehetővé teszi, hogy két különböző módon lépjen kapcsolatba a léptetőmotorral. Az első kezelőfelület vezérli a léptetőmotor irányát és sebességét egyszerű GUI, amely h