Cuprins:

Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer: 6 pași (cu imagini)
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer: 6 pași (cu imagini)

Video: Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer: 6 pași (cu imagini)

Video: Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer: 6 pași (cu imagini)
Video: Люся Чеботина - Солнце Монако (ПРЕМЬЕРА КЛИПА) 2024, Iulie
Anonim
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer
Redați melodii (MP3) cu Arduino folosind PWM pe difuzor sau Flyback Transformer

Buna baieti, Acesta este primul meu instructable, sper să vă placă !!

Practic, în acest proiect am folosit comunicarea în serie între Arduino și laptopul meu, pentru a transmite date muzicale de pe laptopul meu către Arduino. Și utilizarea Arduino TIMERS pentru a reda datele ca semnal PWM.

Am vrut să menționez că acest proiect nu este pentru începători !!!.

De fapt, acest proiect a fost unul dintre cele mai lungi proiecte, pentru că trebuie să facem multe lucruri pentru ca acesta să funcționeze.

ATENŢIE

Am făcut a doua parte a acestei instrucțiuni, care este mult mai ușoară și are nevoie de probleme minime pentru a funcționa

Link către a doua parte (cea mai ușoară).

Pasul 1: Lucruri de care avem nevoie pentru acest proiect (Cerințe)

1. Placa Arduino (putem folosi orice placă (328, 2560), adică Mega, Uno, Mini etc., dar cu pini specifici diferiți)

2. PC sau laptop cu Linux (am folosit Fedora 29) sau Live USB cu Linux

3. Panou de bord sau Perfboard

4. Conectarea firelor

5. TC4420 (driver Mosfet sau așa ceva)

6. Power Mosfet (canal N sau P, vă rugăm să conectați apoi corespunzător) (am folosit canalul N)

7. Difuzor sau Transformator Flyback (Da l-ați citit bine !!)

8. Alimentare adecvată (0-12V) (mi-am folosit propria sursă de alimentare ATX)

9. Radiator (am recuperat de pe vechiul meu PC)

10. PC cu Windows și pen drive.

Pentru a cunoaște funcționarea detaliată a fiecărei componente și a acestui proiect, vă rugăm să citiți pasul următor.

Am făcut cea de-a doua parte a acestei instrucțiuni, care este mult mai ușoară și are nevoie de probleme minime pentru a funcționa. Link la partea a doua (cea mai ușoară).

Pasul 2: Înțelegerea principiului de lucru

Ahhh !! cea mai lungă parte a unei secțiuni instructabile, citind și scriind este ambele plictisitoare.

În primul rând, trebuie să obținem o prezentare generală, cum funcționează de fapt acest lucru.

ceea ce facem aici este că mai întâi, convertim melodia MP3 într-un fișier WAV și acest fișier într-un fișier antet C folosind software-ul, care se află în link. Acest cod C conține de fapt eșantioane de date pe 8 biți (de ce pe 8 biți ?? citiți mai departe) pe care trebuie să le redăm folosind Arduino la o rată sau viteză fixă, care este specificată în funcție de rata de eșantionare.

Teoria unui semnal audio.

Pentru cei care nu știu care este rata de eșantionare sau rata de biți: -

Rata de eșantionare este definită ca numărul de eșantioane, jucăm într-o secundă (de obicei măsurată în Hz sau KHz).

Pentru a afla mai multe detalii: -Faceți clic aici

Ratele standard de eșantionare sunt 44100 Hz (cea mai bună calitate), 32000 Hz, 22050 Hz etc.

ceea ce înseamnă că 44100 de eșantioane sunt utilizate într-o secundă pentru a genera o undă în consecință.

Adică fiecare eșantion trebuie să fie redat la un interval fix de 1/44100 = 22,67 uS.

Apoi vine adâncimea de biți a unui semnal audio, care este de obicei o măsură a cât de exact este reprezentat un sunet în sunetul digital. Cu cât este mai mare adâncimea de biți, cu atât sunetul digital este mai precis.

Dar cu Arduino sau orice alt microcontroler cu ceas de 16 MHz ne permite să ne folosim doar până la 8 biți. Îl voi explica de ce.

Există o formulă la pagina nr.102 în foaia de date 328p: - Foaie de date

Nu voi intra în detalii, de ce folosesc această formulă.

frecvența semnalului = Semnal de ceas / N x (1 + TOP)

Semnal de ceas = 16Mhz (placa Arduino)

N = prescaler (1 este valoarea proiectului nostru)

TOP = valoare de la 0 la 2 ^ 16 (Pentru contorul temporizatorului pe 16 biți) (255 = 2 ^ 8 (8 biți) pentru proiectul nostru)

obținem valoarea frecvenței semnalului = 62,5 kHz

Aceasta înseamnă că frecvența undelor purtătoare depinde de adâncimea de biți.

Să presupunem, dacă folosim valoarea TOP = 2 ^ 16 = 65536 (adică adâncimea de biți de 16 biți)

atunci obținem valoarea frecvenței semnalului = 244 Hz (pe care nu o putem folosi)

OKK … Deci, această teorie despre modul în care funcționează semnalele audio este suficientă, deci înapoi la proiect.

Codul C generat pentru o melodie poate fi copiat în Arduino și poate fi redat, dar suntem redate până la 3 secunde de redare audio cu o rată de eșantionare de 8000 Hz. Deoarece acest cod C este un fișier text și, prin urmare, nu este comprimat mai degrabă decomprimat. Și necesită prea mult spațiu. (de exemplu, fișier de cod C cu audio de 43 de secunde cu probe de 44, 1 KHz ocupă spațiu de până la 23 MB). Și Arduino Mega ne oferă un spațiu de aproximativ 256 Kb.

Deci, cum vom reda melodii folosind Arduino. Nu este posibil. Acest instructabil este fals. Nu vă faceți griji cititorilor, De aceea, trebuie să folosim un fel de comunicare între Arduino la viteze foarte mari (până la 1 Mb / s) pentru a trimite date audio către Arduino.

Dar de câtă viteză avem nevoie exact, pentru a face acest lucru ??

Răspunsul este de 44000 de octeți pe secundă, ceea ce înseamnă viteze mai mari de 44000 * 8 = 325, 000 de biți / s.

Avem nevoie de un alt periferic cu spațiu de stocare mare pentru a trimite aceste date către Arduino. Și acesta va fi PC-ul nostru cu Linux (de ce PC-ul cu Linux ??? vă rugăm să citiți mai departe pentru a afla mai multe despre el.)

Ahaa … Asta înseamnă că putem folosi comunicarea în serie … Dar așteptați … serialul este posibil la viteze de până la 115200 Bits / s ceea ce înseamnă (325000/115200 = 3) că este de trei ori mai lent decât este necesar.

Nu, prieteni, nu este. Vom folosi viteza sau viteza de transmisie de 500, 000 biți / s cu un cablu de până la 20-30 cm maxim, care este de 1,5 ori mai rapid decât este necesar.

De ce Linux, nu Windows ???

Deci, trebuie să trimitem probe la un interval (specificat și mai sus) de 1/44100 = 22,67 uS cu computerul nostru.

Deci, cum o putem programa pentru a face acest lucru ??

Putem folosi C ++ pentru a trimite un octet de date prin Serial la un interval folosind un fel de funcție de somn

cum ar fi nanosleep, Chrono, etc, etc….

pentru (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

DAR NU, NU FUNCȚIONEAZĂ PE WINDOWS, de asemenea, nu a funcționat în acest fel pe Linux (dar am găsit un alt mod pe care îl puteți vedea în Codul meu atașat.)

Pentru că nu putem realiza o astfel de granularitate folosind Windows. Aveți nevoie de Linux pentru a obține o astfel de granularitate.

Probleme pe care le-am găsit chiar și cu Linux …

putem obține o astfel de granularitate folosind Linux, dar nu am găsit o astfel de funcție pentru a dormi programul meu pentru 22uS.

Funcții precum nanosleep, Chrono nanosleep, etc, de asemenea, nu funcționează, deoarece oferă un somn doar mai mult de 100 uS. Dar aveam nevoie exact, exact de 22 uS. Am cercetat fiecare pagină pe Google și am experimentat toate funcțiile posibile disponibile în C / C ++, dar nimic nu a funcționat pentru mine. Apoi am venit cu propria mea funcție, care a funcționat pentru mine ca un adevărat farmec.

Și codul meu oferă acum un somn exact, precis de 1uS sau mai mult !!!

Așa că am acoperit partea dificilă, iar restul este ușor …

Și vrem să generăm un semnal PWM folosind Arduino cu o frecvență specifică, de asemenea, frecvența undelor purtătoare. (62,5 KHz (așa cum se calculează mai sus) pentru o bună imunitate a semnalului).

Deci, trebuie să folosim așa-numitele TIMERS din Arduino pentru a crea PWM. Apropo, nu voi da prea multe detalii despre asta, deoarece veți găsi multe tutoriale pe tema TIMERS, dar dacă nu găsiți unele, atunci comentați mai jos, voi face unul.

Am folosit un driver Mosfet TC4420, pentru a salva pinii Arduino, deoarece nu pot livra atât de mult curent pentru a conduce un MOSFET uneori.

Deci, aceasta a fost aproape teoria acestui proiect, putem vedea acum diagrama circuitului.

ATENȚIE ATENȚIE ATENȚIE

De fapt, acest proiect a fost îngreunat mult în mod intenționat (voi spune de ce), există o altă metodă care necesită noPC doar Arduino și difuzor în următorul meu instrument. Link-ul este aici.

* Scopul principal al acestui proiect este de a utiliza comunicarea serială și de a cunoaște puterea acesteia și de a afla cum putem programa PC-ul nostru pentru a îndeplini sarcini exact la astfel de intervale fine. *

Pasul 3: Schematic

Schematic
Schematic

Conectați toate componentele așa cum se arată în schemă. Deci aveți aici două opțiuni: -

1. Conectați un difuzor (conectat cu 5V)

2. Conectați un transformator Flyback (conectat cu 12V)

Le-am încercat pe amândouă. Și ambele funcționează destul de bine.

Declinare de responsabilitate: -

* Vă recomandăm să folosiți Flyback Transformer cu precauție, deoarece poate fi periculos deoarece produce tensiuni ridicate. Și nu voi fi răspunzător pentru niciun fel de daune. *

Pasul 4: Convertiți fișierul MP3 în fișier WAV folosind Audacity

Convertiți fișierul MP3 în fișier WAV folosind Audacity
Convertiți fișierul MP3 în fișier WAV folosind Audacity
Convertiți fișierul MP3 în fișier WAV folosind Audacity
Convertiți fișierul MP3 în fișier WAV folosind Audacity
Convertiți fișierul MP3 în fișier WAV folosind Audacity
Convertiți fișierul MP3 în fișier WAV folosind Audacity

Deci, în primul rând, descărcați software-ul

1. Audacity, căutare și descărcare de pe Google

2. Pentru a converti fișierul WAV în C-Code, descărcați o aplicație de fereastră, denumită WAVToCode

Puteți afla cum să utilizați software-ul WAVToCode din acest link și să îl descărcați de pe acest link.

Voi oferi, de asemenea, pași detaliați cu privire la modul de utilizare a ambelor programe.

Vă rugăm să vedeți fotografiile legate de acest instructable.

În acest pas, vom converti MP3 în Wav. (Urmăriți fotografiile, rata proiectului trebuie să fie de 44100Hz)

În pasul următor, vom converti un fișier wav în cod C.

Pasul 5: WAV la C-Code

WAV la C-Code
WAV la C-Code
WAV la C-Code
WAV la C-Code
WAV la C-Code
WAV la C-Code

Urmăriți fotografiile.

Vedeți ultimele două imagini, modificările trebuie să fie exact aceleași, majusculele trebuie să fie majuscule și minuscule să fie mai mici, sau veți primi o eroare de sintaxă în timpul compilării.

(Puteți vedea că melodia de 1min 41s a ocupat 23mb spațiu.)

Schimbați numele și lungimea melodiei cu numele și, respectiv, durata melodiei.

Și salvați fișierul Cod C.

Faceți acest lucru pentru toate melodiile pe care doriți să le jucați cu Arduino

Pasul 6: Creați un fișier final și lansați Linux

Creați un fișier final și lansați Linux
Creați un fișier final și lansați Linux
Creați un fișier final și lansați Linux
Creați un fișier final și lansați Linux
Creați un fișier final și lansați Linux
Creați un fișier final și lansați Linux

Adăugați toate melodiile convertite în fișierul furnizat în acest link.

Și urmează imaginile.

Încărcați codul în Arduino, pe care l-am atașat.

Amintiți-vă numele fișierelor codului C (de exemplu, stilul de viață, dolarul, îmbrăcămintea), deoarece trebuie să menționăm exact aceleași nume în codul nostru, cu sensibilitate la majuscule.

La final aprindeți Fedora Live USB sau altul și instalați compilatorul gcc și apoi utilizând instrucțiunile de compilare din folder compilați programul și rulați-l.

La final, veți putea asculta melodii din Speaker sau Flyback.

Vă mulțumim că ați citit acest instructable și vă rugăm să comentați dacă vă place.

ATENȚIE Am făcut a doua parte a acestui instructiv, care este mult mai ușor și are nevoie de probleme minime pentru a funcționa. Link către a doua parte (cea mai ușoară)

Recomandat: