Inhoudsopgave:
- Stap 1: Dingen die we nodig hebben voor dit project (vereisten)
- Stap 2: Het werkingsprincipe begrijpen
- Stap 3: Schematisch:
- Stap 4: Converteer MP3 naar WAV-bestand met Audacity
- Stap 5: WAV naar C-code
- Stap 6: Maak een definitief bestand en start je Linux op
Video: Speel nummers (MP3) met Arduino met behulp van PWM op luidspreker of Flyback Transformer - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Hallo jongens, Dit is mijn eerste instructable, ik hoop dat je het leuk zult vinden !!
Kortom, in dit project heb ik de seriële communicatie tussen mijn Arduino en mijn laptop gebruikt om muziekgegevens van mijn laptop naar de Arduino te verzenden. En met behulp van de Arduino TIMERS om de gegevens af te spelen als een PWM-signaal.
Ik wilde even vermelden dat dit project niet voor beginners is!!!.
Eigenlijk was dit project een van de langste projecten, omdat we veel dingen moeten doen om het te laten werken.
AANDACHT
Ik heb het tweede deel van dit instructable gemaakt, dat is veel gemakkelijker en heeft minimale problemen nodig om te werken
Link naar tweede deel (makkelijkste).
Stap 1: Dingen die we nodig hebben voor dit project (vereisten)
1. Arduino-bord (we kunnen elk bord (328, 2560) gebruiken, d.w.z. Mega, Uno, Mini, enz. Maar met specifieke verschillende pinnen)
2. PC of laptop met Linux (ik heb Fedora 29 gebruikt) of Live USB met Linux
3. Breadboard of Perfboard
4. Draden aansluiten
5. TC4420 (Mosfet-stuurprogramma of iets dergelijks)
6. Power Mosfet (N- of P-kanaal, bedraad dan dienovereenkomstig) (ik heb N-kanaal gebruikt)
7. Luidspreker of Flyback Transformer (Ja, je leest het goed!!)
8. Geschikte voeding (0-12V) (ik heb mijn eigen ATX-voeding gebruikt)
9. Koellichaam (ik heb het van mijn oude pc gehaald)
10. PC met Windows en pen drive.
Lees de volgende stap om de gedetailleerde werking van elk onderdeel en dit project te kennen.
Ik heb het tweede deel van dit instructable gemaakt, dat is veel eenvoudiger en heeft minimale problemen nodig om te werken. Link naar het tweede deel (makkelijkste).
Stap 2: Het werkingsprincipe begrijpen
Aaah!! het langste deel van een instructable, lezen en schrijven van deze sectie is zowel saai.
Allereerst moeten we een Overzicht krijgen, hoe dit ding echt werkt.
wat we hier doen, is dat we eerst ons MP3-nummer converteren naar een WAV-bestand en dit bestand naar een C-headerbestand met behulp van de software die in de link staat. Deze C-code bevat eigenlijk 8-bit (waarom 8-bit?? lees verder) datasamples die we met onze Arduino moeten spelen met een vaste snelheid of snelheid, die is gespecificeerd volgens onze Sampling Rate.
Theorie van een audiosignaal.
Voor degenen die niet weten wat de Sampling Rate of Bit Rate is: -
Sampling Rate wordt gedefinieerd als het aantal samples dat we in een seconde afspelen (meestal gemeten in Hz of KHz).
Om meer in detail te weten:-Klik hier
Standaard bemonsteringssnelheden zijn 44100 Hz (beste kwaliteit), 32000 Hz, 22050 Hz, enz
wat betekent dat 44100 samples in een seconde worden gebruikt om dienovereenkomstig een golf te genereren.
d.w.z. elke sample moet worden afgespeeld met een vast interval van 1/44100 = 22,67 uS.
Dan komt de bitdiepte van een audiosignaal, wat meestal een maat is voor hoe precies een geluid wordt weergegeven in digitale audio. Hoe hoger de bitdiepte, hoe nauwkeuriger het digitale geluid.
Maar met Arduino of een andere microcontroller met 16Mhz-klok kunnen we ons alleen tot 8-bit gebruiken. Ik zal het uitleggen waarom.
Er is een formule op pagina 102 in de datasheet van 328p:- Datasheet
Ik zal niet in details treden, waarom ik deze formule gebruik.
frequentie van Signaal=Klok Signaal/N x (1+TOP)
Kloksignaal = 16 Mhz (Arduino-bord)
N=prescaler (1 is waarde voor ons project)
TOP = waarde 0 tot 2 ^ 16 (voor 16-bit timer-teller) (255 = 2 ^ 8 (8-bit) voor ons project)
we krijgen de waarde van de frequentie van Signaal = 62,5 kHz
Dit betekent dat de draaggolffrequentie afhankelijk is van de bitdiepte.
Stel, als we TOP-waarde = 2^16=65536 gebruiken (d.w.z. een bitdiepte van 16 bits)
dan krijgen we de waarde van de frequentie van Signaal = 244 Hz (die we niet kunnen gebruiken)
OKK… Dus zoveel theorie over hoe audiosignalen werken is genoeg, dus terug naar het project.
De C-code die voor een nummer wordt gegenereerd, kan naar Arduino worden gekopieerd en kan worden afgespeeld, maar we zijn beperkt tot audioweergave van 3 seconden met een bemonsteringsfrequentie van 8000 Hz. Omdat deze C-code een tekstbestand is en dus niet gecomprimeerd, eerder gedecomprimeerd. En het kost te veel ruimte. (bijv. C-codebestand met 43-sec audio met 44, 1 KHz-samples neemt ruimte in beslag tot 23 MB). En onze Arduino Mega geeft ons een ruimte van ongeveer 256 Kb.
Dus hoe we liedjes zullen spelen met Arduino. Het is onmogelijk. Dit Instructable is nep. Maak je geen zorgen lezers, Daarom moeten we een soort communicatie tussen Arduino gebruiken met zooo hoge snelheden (tot 1 Mb/s) om audiogegevens naar Arduino te sturen.
Maar hoeveel snelheid hebben we precies nodig om dit te doen??
Het antwoord is 44000 bytes per sec, wat snelheden betekent van meer dan 44000*8=325,000 Bits/s.
We hebben een ander randapparaat met grote opslagruimte nodig om deze gegevens naar onze Arduino te sturen. En dat zal onze pc met Linux zijn (waarom pc met Linux??? Lees verder om er meer over te weten.)
Ahaa… Dat betekent dat we seriële communicatie kunnen gebruiken… Maar wacht… serieel is mogelijk met snelheden tot 115200 bits/s, wat betekent (325000/115200=3) dat het drie keer langzamer is dan vereist.
Nee, mijn vrienden, dat is het niet. We gebruiken een snelheid of baudrate van 500.000 bits/s-snelheid met een kabel tot max. 20-30 cm, wat 1,5 keer sneller is dan vereist.
Waarom Linux, niet Windows ???
We moeten dus monsters verzenden met een interval (ook hierboven gespecificeerd) van 1/44100 = 22,67 uS met onze pc.
Dus hoe kunnen we het programmeren om dit te doen??
We kunnen C++ gebruiken om met een interval een databyte door Serial te sturen met behulp van een soort slaapfunctie
zoals nanosleep, Chrono, enz, enz….
voor(int x=0;x
verzendData(x);
nanosleep (22000);// 22uS
}
MAAR NEE HET WERKT NIET OP WINDOWS werkte ook niet op deze manier op Linux (maar ik heb een andere manier gevonden die je kunt zien in mijn bijgevoegde code.)
Omdat we een dergelijke granulariteit niet kunnen bereiken met behulp van vensters. Je hebt Linux nodig om zo'n granulariteit te bereiken.
Problemen die ik zelfs met Linux vond …
we kunnen zo'n granulariteit bereiken met Linux, maar ik vond geen dergelijke functie om mijn programma voor 22uS te laten slapen.
Functies zoals nanosleep, chrono nanosleep, enz, enz. werken ook niet, omdat ze slechts een slaap bieden van meer dan 100 uS. Maar ik had precies, precies 22 us nodig. Ik heb elke pagina op Google onderzocht en geëxperimenteerd met alle mogelijke functies die beschikbaar zijn in C/C++, maar niets werkte voor mij. Toen bedacht ik mijn eigen functie, die voor mij als een echte charme werkte.
En mijn code biedt nu een exacte, precieze slaap van 1uS of hoger !!!
Dus we hebben het moeilijke deel behandeld en de rest is gemakkelijk …
En we willen een PWM-signaal genereren met Arduino met een specifieke frequentie, ook draaggolffrequentie. (62,5 KHz (zoals hierboven berekend) voor een goede immuniteit van het signaal).
We moeten dus zogenaamde TIMERS van Arduino gebruiken om PWM te maken. Trouwens, ik zal daar niet veel details over geven, omdat je veel tutorials over het onderwerp TIMERS zult vinden, maar als je er geen vindt, reageer dan hieronder, ik zal er een maken.
Ik heb een TC4420 Mosfet-stuurprogramma gebruikt om onze Arduino-pinnen op te slaan, omdat ze soms niet zoveel stroom kunnen leveren om een MOSFET aan te sturen.
Dus dat was bijna de theorie van dit project, we kunnen nu het schakelschema zien.
LET OP LET OP LET OP
Eigenlijk is dit project opzettelijk veel moeilijker gemaakt (ik zal je vertellen waarom), er is een andere methode die geen pc vereist, alleen Arduino en luidspreker in mijn volgende instructie. Link is hier.
*Het belangrijkste doel van dit project is om seriële communicatie te gebruiken en de kracht ervan te kennen en om te leren hoe we onze pc kunnen programmeren om taken precies met zulke fijne intervallen uit te voeren.*
Stap 3: Schematisch:
Sluit alle componenten aan zoals weergegeven in het schema. Dus je hebt hier twee opties: -
1. Sluit een luidspreker aan (verbonden met 5V)
2. Sluit een Flyback-transformator aan (verbonden met 12V)
Ik heb beide geprobeerd. En beide werken redelijk goed.
Vrijwaring:-
*Ik raad aan om Flyback Transformer met voorzorg te gebruiken, omdat het gevaarlijk kan zijn omdat het hoge spanningen produceert. En ik ben niet aansprakelijk voor enige schade.*
Stap 4: Converteer MP3 naar WAV-bestand met Audacity
Dus download eerst de software
1. Audacity, zoeken en downloaden van Google
2. Om het WAV-bestand naar C-Code te converteren, downloadt u een venstertoepassing, genaamd WAVToCode
U kunt via deze link leren hoe u WAVToCode-software gebruikt en deze via deze link downloaden.
Ik zal ook gedetailleerde stappen geven over het gebruik van beide software.
Zie de foto's die zijn gekoppeld aan deze instructable.
In deze stap zullen we MP3 naar Wav converteren. (Volg de foto's, de projectsnelheid moet 44100Hz zijn)
In de volgende stap zullen we een wav-bestand converteren naar C Code.
Stap 5: WAV naar C-code
Volg de foto's.
Zie de laatste twee afbeeldingen, de wijzigingen moeten precies hetzelfde zijn, hoofdletters moeten hoofdletters zijn en kleine letters moeten lager zijn, anders krijg je een syntaxisfout tijdens het compileren.
(Je kunt zien dat het nummer van 1 minuut en 41 seconden 23 MB ruimte in beslag nam.)
Wijzig de naam en lengte van het nummer met respectievelijk de naam en de duur van je nummer.
En sla het C Code-bestand op.
Doe dit voor alle nummers die je met Arduino wilt spelen
Stap 6: Maak een definitief bestand en start je Linux op
Voeg al je geconverteerde nummers toe aan het bestand in deze link.
En volg de foto's.
Upload de code in Arduino, die ik heb bijgevoegd.
Onthoud de bestandsnamen van de C-code (voor bijvoorbeeld lifestyle, dollar, weare), omdat we exact dezelfde namen in onze code moeten vermelden, hoofdlettergevoelig.
Start aan het einde je Fedora Live USB of iets anders op en installeer gcc compiler en gebruik dan de compileerinstructies uit de map om het programma te compileren en uit te voeren.
Uiteindelijk kun je naar nummers van Speaker of Flyback luisteren.
Bedankt voor het lezen van deze instructable en geef commentaar als je het leuk vindt.
AANDACHT Ik heb het tweede deel van dit instructable gemaakt, dat is veel gemakkelijker en heeft minimale problemen nodig om te werken. Link naar tweede deel (makkelijkste)
Aanbevolen:
Ringtone maken van nummers: 3 stappen
Ringtone maken van liedjes: je hebt op deze instructable een mobiele telefoon nodig die wav-bestanden afspeelt en je hebt een manier om hem op je computer aan te sluiten. Voorbeelden van verbinding zijn infrarood, bluetooth, usb of een datakabel voor je telefoon. Je moet ook Audacity hebben
Automatisch ongewenste nummers van uw iPod verwijderen: 4 stappen
Automatisch ongewenste nummers van uw iPod verwijderen: Deze tutorial laat u zien hoe u uw iPod kunt gebruiken om nummers te markeren voor automatische verwijdering, zodat u er niet aan hoeft te denken om dit later te doen. Het is de beste optie om een "verwijder"-knop op je iPod te hebben. En maak je geen zorgen, hiermee worden geen nummers van iTu verwijderd
Verwijder de songteksten van de meeste nummers: 6 stappen (met afbeeldingen)
Verwijder de songteksten van de meeste nummers: dit leert u hoe u de zang uit bijna elk nummer kunt verwijderen. Dit is geweldig om je eigen karaoke-nummer te maken. Voordat ik begin, wil ik dat je weet dat dit de zanger niet volledig zal verwijderen, maar het zal er behoorlijk goed aan doen, dus het is het proberen waard
Verwijder die ongewenste iTunes-nummers van uw computer: 10 stappen
Verwijder die ongewenste iTunes-nummers van uw computer: Hallo dames en heren, dit is mijn eerste programmeerbare codering, dus laat alstublieft uw wapens thuis als u commentaar geeft (messen zijn echter acceptabel). Met de komst van mp3-spelers heeft het mensen mogelijk gemaakt om ongekende am
Nummers of andere dingen als mp3 van een dvd halen: 4 stappen
Liedjes of andere dingen als mp3 van een dvd halen: Als je een DualDisc hebt met nummers erop die je op een iPod wilt beluisteren, of een normale dvd met misschien een commentaarnummer dat je wilt beluisteren op een Ipod, lees de rest van dit om dat te doen. Benodigde spullen: computer, handen, hersenen, dvd, iPod