Talaan ng mga Nilalaman:

Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer: 6 na Hakbang (na may Mga Larawan)
Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer: 6 na Hakbang (na may Mga Larawan)

Video: Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer: 6 na Hakbang (na may Mga Larawan)

Video: Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer: 6 na Hakbang (na may Mga Larawan)
Video: Complete guide to PCA9685 16 channel Servo controller for Arduino with code Version of 5 ( V1) 2024, Nobyembre
Anonim
Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer
Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer
Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer
Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer
Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer
Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer
Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer
Mag-play ng Mga Kanta (MP3) Gamit ang Arduino Paggamit ng PWM sa Speaker o Flyback Transformer

Hello Guys, Ito ang aking unang itinuro, sana ay magustuhan Mo Ito !!

Talaga, Sa Project na ito ginamit ko ang Serial Communication sa pagitan ng aking Arduino at aking Laptop, upang maipadala ang data ng musika mula sa aking laptop patungo sa Arduino. At ang paggamit ng Arduino TIMERS upang i-play ang data bilang isang PWM signal.

Nais kong banggitin iyon, ang proyektong ito ay hindi para sa Mga Nagsisimula !!!.

Sa totoo lang, ang proyektong ito ay isa sa pinakamahabang proyekto, sapagkat kailangan nating gawin ang maraming mga bagay upang maisagawa ito.

Pansin

Ginawa ko ang ikalawang bahagi ng itinuturo na ito, na kung saan ay mas madali at nangangailangan ng kaunting mga gulo upang gumana

Link sa Ikalawang Bahagi (pinakamadaling isa).

Hakbang 1: Mga Bagay na Kailangan namin para sa Proyekto na Ito (Mga Kinakailangan)

1. Arduino Board (maaari naming gamitin ang anumang Lupon (328, 2560) ie Mega, Uno, Mini, atbp ngunit may tukoy na magkakaibang mga pin)

2. PC o Laptop sa Linux (Gumamit ako ng Fedora 29) O Live USB sa Linux

3. Breadboard o Perfboard

4. Mga Koneksyon sa Mga Wires

5. TC4420 (Mosfet driver o ganoong bagay)

6. Power Mosfet (N o P channel, mangyaring mag-wire pagkatapos nito) (Gumamit ako ng N-channel)

7. Speaker o Flyback Transformer (Oo basahin mo ito nang tama !!)

8. Angkop na Power Supply (0-12V) (Gumamit ako ng sarili kong ATX Power Supply)

9. Heat Sink (Nakatipid ako mula sa aking dating PC)

10. PC na may Windows at pen drive.

Upang malaman ang detalyadong pagtatrabaho ng bawat bahagi at ang proyektong ito mangyaring basahin ang susunod na hakbang.

Ginawa ko ang ikalawang bahagi ng itinuturo na ito, na kung saan ay mas madali at nangangailangan ng kaunting mga problema upang gumana. Mag-link sa Ikalawang Bahagi (pinakamadaling isa).

Hakbang 2: Pag-unawa sa Prinsipyo ng Paggawa

Ahhh !! ang pinakamahabang bahagi ng isang itinuturo, pagbabasa at pagsusulat ng seksyong ito ay kapwa nakakasawa.

Una sa lahat, kailangan naming makakuha ng isang Pangkalahatang-ideya, kung paano talaga gumagana ang bagay na ito.

ang ginagawa namin dito ay ang una, pinapalit namin ang aming MP3 song sa isang WAV File at ang file na ito sa isang C header file sa pamamagitan ng paggamit ng software, na nasa link. Ang C code na ito ay talagang naglalaman ng 8-bit (bakit 8-bit ?? basahin ang karagdagang) mga sample ng data na kailangan naming i-play gamit ang aming Arduino sa isang nakapirming rate o bilis, na tinukoy ayon sa aming Sampling Rate.

Teorya ng isang Audio Signal.

Para sa mga hindi alam kung ano ang Sampling Rate o Bit Rate: -

Ang Sampling Rate ay tinukoy bilang ang bilang ng mga Sample, naglalaro kami sa isang segundo (karaniwang sinusukat sa Hz o KHz).

Upang malaman ang higit pa sa Detalye: -Mag-click Dito

Ang Karaniwang Mga Rate ng Sampling ay 44100 Hz (pinakamahusay na kalidad), 32000 Hz, 22050 Hz, atbp

na nangangahulugang ang 44100 na mga Sample ay ginagamit sa isang seg upang makabuo ng isang alon naaayon.

ie Ang bawat Sample ay kinakailangan upang i-play sa isang nakapirming agwat ng 1/44100 = 22.67 uS.

Pagkatapos ay darating ang Bit Lalim ng isang Audio Signal, na karaniwang isang sukat ng kung gaano tiyak na ang isang tunog ay kinakatawan sa digital audio. Kung mas mataas ang lalim ng bit, mas tumpak ang digital na tunog.

Ngunit sa Arduino o anumang iba pang Micro-controller na may 16Mhz na orasan ay pinapayagan kaming gamitin kami hanggang sa 8-bit lamang. Ipapaliwanag ko kung bakit.

Mayroong isang formula sa pahina no.102 sa datasheet ng 328p: - Datasheet

Hindi ako pupunta sa mga detalye, kung bakit ginagamit ko ang formula na ito.

dalas ng Signal = Clock Signal / N x (1 + TOP)

Clock Signal = 16Mhz (Arduino board)

N = prescaler (1 ay halaga para sa aming proyekto)

TOP = halaga 0 hanggang 2 ^ 16 (Para sa 16-bit timer counter) (255 = 2 ^ 8 (8-bit) para sa aming proyekto)

nakukuha namin ang halaga ng dalas ng Signal = 62.5 kHz

Nangangahulugan ito na ang dalas ng alon ng carrier ay nakasalalay sa Lalim ng Bit.

Ipagpalagay, kung gumagamit kami ng TOP halaga = 2 ^ 16 = 65536 (ibig sabihin, lalim ng 16-bit)

pagkatapos makuha namin ang halaga ng dalas ng Signal = 244 Hz (na hindi namin maaaring gamitin)

OKK … Kaya't ang teorya na ito ng Paano gumagana ang Mga Audio Signal ay sapat na, Kaya't bumalik sa Proyekto.

Ang C code na nabuo para sa isang Kanta ay maaaring makopya sa Arduino at maaaring i-play, ngunit limitado kami hanggang sa 3-sec na pag-playback ng audio na may sampling rate na 8000 Hz. Sapagkat ang C code na ito ay isang text file at kaya't hindi nai-compress sa halip na decompressed. At ito ay tumatagal ng masyadong maraming puwang. (hal. C code file na may 43-sec audio na may 44, 1 KHz na mga sample ay tumatagal ng hanggang sa 23 MB). At ang aming Arduino Mega ay nagbibigay sa amin ng isang puwang na tungkol sa 256 Kb.

Kaya kung paano kami maglalaro ng mga kanta gamit ang Arduino. Hindi pwede. Ang Instructable na ito ay peke. Huwag magalala mga mambabasa, Iyon ang dahilan kung bakit kailangan naming gumamit ng ilang uri ng komunikasyon sa pagitan ng Arduino sa sobrang bilis (hanggang sa 1 Mb / s) upang maipadala ang data ng Audio sa Arduino.

Ngunit Gaano karaming bilis ang eksaktong kailangan natin, upang magawa ito ??

Ang sagot ay 44000 bytes bawat sec na nangangahulugang ang bilis ay higit sa 44000 * 8 = 325, 000 Bits / s.

Kailangan namin ng isa pang paligid na may malaking imbakan upang maipadala ang data na ito sa aming Arduino. At iyon ang magiging PC natin sa Linux (bakit ang PC sa Linux ??? mangyaring basahin pa upang malaman ang tungkol dito.)

Ahaa… Nangangahulugan iyon na maaari naming gamitin ang Serial Communication… Ngunit maghintay… posible ang serial sa bilis lamang ng hanggang sa 115200 Bits / s na nangangahulugang (325000/115200 = 3) na, ito ay tatlong beses na mas mabagal kaysa sa kinakailangan.

Hindi, mga kaibigan ko, hindi ito. Gagamitin namin ang bilis o Baud Rate na 500, 000 Bits / s na bilis gamit ang isang cable hanggang sa 20-30 cm max., Na 1.5 beses na mas mabilis kaysa sa kinakailangan.

Bakit ang Linux, hindi ang Windows ???

Kaya, kailangan naming magpadala ng mga sample sa isang agwat (tinukoy din sa itaas) ng 1/44100 = 22.67 uS sa aming PC.

Kaya paano natin ito mai-program upang magawa ito ??

Maaari naming gamitin ang C ++ upang magpadala ng isang byte ng data sa pamamagitan ng Serial sa isang agwat gamit ang ilang uri ng pagpapaandar sa pagtulog

tulad ng pagtulog, Chrono, atbp, atbp ….

para sa (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

NGUNIT HINDI ITO AYUMAGAWA SA WINDOWS ay hindi rin gumana sa ganitong paraan sa Linux (ngunit nakakita ako ng isa pang paraan na makikita mo sa aking Code na nakalakip.)

Dahil hindi namin makakamit ang naturang granularity gamit ang windows. Kailangan mo ng Linux upang makamit ang naturang granularity.

Mga problema na nakita ko kahit sa Linux…

maaari naming makamit ang naturang granularity gamit ang Linux, ngunit wala akong nahanap na ganoong pagpapaandar upang matulog ang aking programa para sa 22uS.

Ang mga pag-andar tulad ng nanosleep, Chrono nanosleep, atbp, atbp. Ay hindi rin gagana, dahil nagbibigay lamang sila ng pagtulog higit sa 100 uS. Ngunit kailangan ko ng eksakto, tiyak na 22 uS. Nasaliksik ko ang bawat solong pahina sa google at nag-eksperimento sa lahat ng mga posibleng pag-andar na magagamit sa C / C ++ ngunit walang gumana para sa akin. Pagkatapos ay naisip ko ang aking sariling pag-andar, na gumana para sa akin bilang isang tunay na kagandahan.

At ang aking code ngayon ay nagbibigay ng isang eksaktong, tiyak na pagtulog ng 1uS o mas mataas !!!!

Kaya natakpan namin ang mahirap na bahagi at ang iba ay madali …

At nais naming makabuo ng isang PWM signal gamit ang Arduino na may isang tukoy na dalas din dalas ng daloy ng carrier. (62.5KHz (tulad ng nakalkula sa itaas) para sa mahusay na kaligtasan sa sakit ng Signal).

Kaya, kailangan nating gumamit ng tinatawag na TIMERS ng Arduino upang lumikha ng PWM. Sa pamamagitan ng paraan, hindi ako pupunta sa maraming mga detalye tungkol doon, dahil mahahanap mo ang maraming mga tutorial sa paksa ng TIMERS, ngunit kung wala kang makitang, pagkatapos ay magkomento sa ibaba gagawa ako ng isa.

Gumamit ako ng isang driver ng TC4420 Mosfet, upang mai-save ang aming Arduino Pins, sapagkat hindi sila makapaghatid ng napakaraming kasalukuyang upang maghimok ng isang MOSFET minsan.

Kaya, iyon ang halos teorya ng proyektong ito, makikita natin ngayon ang circuit diagram.

ATTENTION ATTENTION Pansin

Sa totoo lang, ang proyektong ito ay pinaghirapan nang sadya (sasabihin ko kung bakit), may isa pang pamamaraan na nangangailangan ng noPC na Arduino lamang at tagapagsalita sa aking susunod na maipagawa. Narito ang link.

* Ang pangunahing layunin ng proyektong ito ay ang paggamit ng Serial Communication at upang malaman ang kapangyarihan nito at upang malaman kung paano namin mai-program ang aming PC upang gawin ang mga gawain nang tumpak sa gayong masarap na agwat. *

Hakbang 3: Skematika

Skematika
Skematika

Ikonekta ang lahat ng mga Components tulad ng ipinakita sa eskematiko. Kaya mayroon kang dalawang mga pagpipilian dito: -

1. Kumonekta sa isang Speaker (Nakakonekta sa 5V)

2. Ikonekta ang isang Flyback Transformer (Nakakonekta sa 12V)

Sinubukan ko ang pareho. At kapwa gumagana nang maayos.

Pagwawaksi: -

* Inirerekumenda ko ang paggamit ng Flyback Transformer na may Pag-iingat dahil maaari itong mapanganib dahil gumagawa ito ng Mataas na Boltahe. At hindi ako mananagot sa anumang pinsala. *

Hakbang 4: I-convert ang MP3 sa WAV File Gamit ang Audacity

I-convert ang MP3 sa WAV File Gamit ang Audacity
I-convert ang MP3 sa WAV File Gamit ang Audacity
I-convert ang MP3 sa WAV File Gamit ang Audacity
I-convert ang MP3 sa WAV File Gamit ang Audacity
I-convert ang MP3 sa WAV File Gamit ang Audacity
I-convert ang MP3 sa WAV File Gamit ang Audacity

Kaya, Una sa lahat, i-download ang software

1. Katapatan, paghahanap at pag-download mula sa Google

2. Upang mai-convert ang WAV File sa C-Code, mag-download ng isang window application, na pinangalanan bilang WAVToCode

Maaari mong malaman kung paano gamitin ang WAVToCode software mula sa link na ito at i-download ito mula sa link na ito.

Magbibigay din ako ng detalyadong mga hakbang sa kung paano gamitin ang parehong software.

Mangyaring Tingnan ang mga larawang naka-link sa itinuturo na ito.

Sa hakbang na ito, iko-convert namin ang MP3 sa Wav. (Sundin ang mga larawan, ang rate ng proyekto ay dapat na 44100Hz)

Sa susunod na hakbang, magko-convert kami ng isang wav file sa C Code.

Hakbang 5: WAV sa C-Code

WAV sa C-Code
WAV sa C-Code
WAV sa C-Code
WAV sa C-Code
WAV sa C-Code
WAV sa C-Code

Sundin ang mga larawan.

Tingnan ang huling dalawang larawan, ang mga pagbabago ay dapat na tiyak na pareho, ang mga malalaking titik ay dapat na kapital at ang mas mababang kaso ay dapat na mas mababa, O makakakuha ka ng error sa syntax habang nag-iipon.

(Maaari mong makita na ang 1min 41s na kanta ay tumagal ng 23mb space.)

Baguhin ang pangalan ng kanta at haba ng pangalan at tagal ng iyong kanta ayon sa pagkakabanggit.

At I-save ang file ng C Code.

Gawin ito sa lahat ng Mga Kanta na nais mong i-play kasama ng Arduino

Hakbang 6: Gumawa ng isang Huling File at I-Fire Up ang iyong Linux

Gumawa ng isang Pangwakas na File at Sunugin ang Iyong Linux
Gumawa ng isang Pangwakas na File at Sunugin ang Iyong Linux
Gumawa ng isang Pangwakas na File at Sunugin ang Iyong Linux
Gumawa ng isang Pangwakas na File at Sunugin ang Iyong Linux
Gumawa ng isang Pangwakas na File at Sunugin ang Iyong Linux
Gumawa ng isang Pangwakas na File at Sunugin ang Iyong Linux

Idagdag ang lahat ng iyong mga na-convert na kanta sa File na ibinigay sa link na ito.

At sundin ang mga larawan.

I-upload ang code sa Arduino, na aking na-attach.

Alalahanin ang mga pangalan ng file ng C Code. (Para sa hal, lifestyle, dolyar, weare), sapagkat kailangan nating banggitin ang eksaktong parehong mga pangalan sa aming code na may case-sensitive.

Sa wakas apoy ang iyong Fedora Live USB o iba pa at i-install ang gcc compiler at pagkatapos ay gamitin ang mga tagubilin sa pag-iipon mula sa folder na ipunin ang programa at patakbuhin ito.

Sa huli, makikinig ka ng mga kanta mula sa Speaker o Flyback.

Salamat sa pagbabasa ng itinuturo na ito at mangyaring magkomento kung gusto mo ito.

ATTENTION Ginawa ko ang ikalawang bahagi ng pagtuturo na ito, na kung saan ay mas madali at nangangailangan ng kaunting mga problema upang gumana. Link sa Ikalawang Bahagi (pinakamadaling isa)

Inirerekumendang: