Orodha ya maudhui:

Usindikaji wa Sauti ya Bluetooth na Dijiti: Mfumo wa Arduino: Hatua 10
Usindikaji wa Sauti ya Bluetooth na Dijiti: Mfumo wa Arduino: Hatua 10

Video: Usindikaji wa Sauti ya Bluetooth na Dijiti: Mfumo wa Arduino: Hatua 10

Video: Usindikaji wa Sauti ya Bluetooth na Dijiti: Mfumo wa Arduino: Hatua 10
Video: 12 крутых новых гаджетов от новейших технологий 2024, Novemba
Anonim
Image
Image
Usindikaji wa Sauti ya Bluetooth na Ishara ya Dijiti: Mfumo wa Arduino
Usindikaji wa Sauti ya Bluetooth na Ishara ya Dijiti: Mfumo wa Arduino

Muhtasari

Ninapofikiria Bluetooth mimi hufikiria muziki lakini cha kusikitisha wengi wa watawala wadogo hawawezi kucheza muziki kupitia Bluetooth. Raspberry Pi inaweza lakini hiyo ni kompyuta. Ninataka kukuza mfumo wa Arduino kwa watawala wadogo kucheza sauti kupitia Bluetooth. Ili kubadilisha kabisa misuli yangu ya microcontroller nitaongeza Usindikaji wa Ishara ya Dijiti ya wakati halisi (DSP) kwa sauti (uchujaji wa kupita kwa kiwango cha juu, uchujaji wa pasi-chini na ukandamizaji wa anuwai). Kwa cherry iliyo juu, nitaongeza seva ya wavuti ambayo inaweza kutumika kusanidi DSP bila waya. Video iliyopachikwa inaonyesha misingi ya sauti ya Bluetooth ikifanya kazi. Pia inanionyesha nikitumia webserver kufanya uchujaji wa kupita-juu, uchujaji wa pasi-chini na ukandamizaji wa anuwai ya nguvu. Matumizi ya kwanza ya msongamano wa Dynamic kwa makusudi husababisha kuvuruga kama mfano wa chaguo mbaya za vigezo. Mfano wa pili unaondoa upotovu huu.

Kwa mradi huu, ESP32 ndiye mdhibiti mdogo wa chaguo. Inagharimu chini ya £ 10 na imejaa ADCs, DACs, Wifi, Bluetooth Low Energy, Bluetooth Classic na 240MHz processor-msingi mbili. DAC ya ndani inaweza kucheza sauti lakini haitaonekana nzuri. Badala yake, nitatumia avkodare ya stereo ya Adafruit I2S kutoa ishara ya mstari. Ishara hii inaweza kutumwa kwa urahisi kwa mfumo wowote wa HiFi ili kuongeza sauti isiyo na waya mara moja kwenye mfumo wako wa HiFi uliopo.

Vifaa

Tunatumahi, watengenezaji wengi watakuwa na ubao wa mkate, kuruka, nyaya za USB, chuma cha kutengeneza chuma na italazimika kutumia Pauni 15 kwenye ESP32 na kisimbuzi cha stereo. Ikiwa sivyo, sehemu zote zinazohitajika ziko hapa chini.

  • ESP32 - iliyojaribiwa kwenye ESP32-PICO-KIT na TinyPico - £ 9.50 / £ 24
  • Adafruit I2S Stereo Decoder - £ 5.51
  • Bodi ya mkate - £ 3- £ 5 kila moja
  • Waya za jumper - £ 3
  • Vichwa vya sauti vya waya / Mfumo wa Hi-Fi - £eralserals
  • Vichwa vya kushinikiza au Chuma cha Soldering - £ 2.10 / £ 30
  • Cable ndogo ya USB - £ 2.10 / £ 3
  • 3.5mm kwa kontakt RCA / 3.5mm jack kwa jack (au chochote msemaji wako anahitaji) - £ 2.40 / £ 1.50
  • Ugavi wa Nguvu ya USB - £ 5

Hatua ya 1: Ujenzi - Bodi ya mkate

Ujenzi - Bodi ya mkate
Ujenzi - Bodi ya mkate

Ikiwa ulinunua ESP32-PICO-KIT hautalazimika kuchapisha pini yoyote kwani inakuja kabla ya kuuzwa. Weka tu kwenye ubao wa mkate.

Hatua ya 2: Ujenzi - Sukuma Vichwa / soldering

Ujenzi - Push Headers / soldering
Ujenzi - Push Headers / soldering
Ujenzi - Push Headers / soldering
Ujenzi - Push Headers / soldering

Ikiwa una chuma cha kuuzia, weka pini kwa kisimbuzi cha stereo kulingana na maagizo kwenye wavuti ya Adafruit. Wakati wa kuandika chuma changu cha kutengeneza chuma kilikuwa kazini ambacho kilikuwa kimefungwa. Sikutaka kulipia chuma cha kuuza kwa muda kwa hivyo nikakata vichwa vya kushinikiza kutoka pimoroni. Niliwakata ili waweze kutoshea kwa kisimbuzi cha stereo. Hili sio suluhisho bora (na sio jinsi vichwa vilikusudiwa kutumiwa) lakini ndio mbadala wa bei rahisi kwa chuma cha kutengeneza. Panga kichwa cha kukata kwenye ubao wa mkate. Unahitaji tu laini 1 ya pini 6 kwa koda. Unaweza kuongeza nyingine sita kwa upande mwingine kwa utulivu lakini hii sio lazima kwa mfumo huu wa mfano. Pini za kuweka vichwa ndani ni vin, 3vo, gnd, wsel, din na bclk.

Hatua ya 3: Ujenzi - Waya Pini za Nguvu

Ujenzi - Waya Pini za Nguvu
Ujenzi - Waya Pini za Nguvu

Weka kisimbuzi cha Stereo kwenye vichwa vya kushinikiza (vin, 3vo, gnd, wsel, din na bclk pini) na uzisongeze kwa pamoja. Tena, hii inapaswa kufanywa na chuma cha kutengeneza lakini ilibidi niboresha. Utagundua kuwa waya zote kwenye hii inayoweza kufundishwa ni bluu. Hiyo ni kwa sababu sikuwa na waya za kuruka kwa hivyo nilikata waya 1 mrefu vipande vidogo. Pia, mimi ni colourblind na sijali sana rangi ya waya. Pini za umeme zimeambatishwa kama ifuatavyo:

3v3 (ESP32) -> kwa vin kwenye kisimbuzi cha stereo

gnd (ESP32) -> kwa gnd kwenye kisimbuzi cha stereo

Hatua ya 4: Ujenzi - I2S Wiring

Ujenzi - I2S Wiring
Ujenzi - I2S Wiring

Kutuma sauti ya Bluetooth kutoka ESP32 hadi kwa kisimbuzi cha stereo tutatumia njia ya mawasiliano ya dijiti iitwayo I2S. Decoder ya stereo itachukua ishara hii ya dijiti na kuibadilisha kuwa ishara ya analog ambayo inaweza kuingizwa kwenye spika au HiFi. I2S inahitaji tu waya 3 na ni sawa kuelewa. Mstari wa saa (bclk) hugeuka juu na chini kuonyesha kidogo mpya hupitishwa. Mstari wa kutolea data (dout) hugeuka juu au chini kuonyesha ikiwa kipande hicho kina thamani ya 0 au 1 na neno chagua laini (wsel) inageuka juu au chini kuonyesha kama kituo cha kushoto au kulia kinasambazwa. Sio kila mdhibiti mdogo anaunga mkono I2S lakini ESP32 ina laini 2 za I2S. Hii inafanya kuwa chaguo dhahiri kwa mradi huu.

Wiring ni kama ifuatavyo:

27 (ESP32) -> wsel (kisimbuzi cha Stereo)

25 (ESP32) -> din (kisimbuzi cha Stereo)

26 (ESP32) -> bclk (kisimbuzi cha Stereo)

Hatua ya 5: Kusanikisha Maktaba ya BtAudio

Kufunga Maktaba ya BtAudio
Kufunga Maktaba ya BtAudio
Kufunga Maktaba ya BtAudio
Kufunga Maktaba ya BtAudio

Ikiwa bado haujasanikishwa weka Arduino IDE na msingi wa Arduino kwa ESP32. Mara baada ya kuziweka tembelea ukurasa wangu wa Github na pakua hazina. Ndani ya Arduino IDE chini ya Mchoro >> Jumuisha Maktaba >> chagua "Ongeza maktaba ya. ZIP". Kisha chagua faili ya zip iliyopakuliwa. Hii inapaswa kuongeza maktaba yangu ya btAudio kwenye maktaba yako ya Arduino. Ili kutumia maktaba itabidi ujumuishe kichwa kinachofaa kwenye mchoro wa Arduino. Utaona hii katika hatua inayofuata.

Hatua ya 6: Kutumia Maktaba ya BtAudio

Kutumia Maktaba ya BtAudio
Kutumia Maktaba ya BtAudio
Kutumia Maktaba ya BtAudio
Kutumia Maktaba ya BtAudio

Mara tu ikiwa imewekwa, unganisha ESP32 yako kwenye kompyuta yako kupitia USB ndogo na kisha unganisha kisimbuzi chako cha stereo kwa spika yako na waya wako wa 3.5mm. Kabla ya kupakia mchoro utahitaji kubadilisha vitu kadhaa kwenye mhariri wa Arduino. Baada ya kuchagua bodi yako utahitaji kuhariri mpango wa kizigeu chini ya Zana >> Mpango wa kizigeu na uchague ama "Hakuna OTA (Programu Kubwa)" au "SPIFFS ndogo (APPS Kubwa na OTA)". Hii ni muhimu kwa sababu mradi huu hutumia WiFi na Bluetooth ambazo zote ni kumbukumbu kubwa sana. Mara baada ya kufanya hivi pakia mchoro ufuatao kwa ESP32.

# pamoja

// Inaweka jina la kifaa cha sauti btAudio audio = btAudio ("ESP_Speaker"); kuanzisha batili () {// mitiririko ya data ya sauti kwa ESP32 audio.begin (); // hutoa data iliyopokea kwa I2S DAC int bck = 26; ws = 27; dout = 25; sauti. I2S (bck, dout, ws); } kitanzi batili () {}

Mchoro unaweza kugawanywa kwa hatua tatu:

  1. Unda kitu cha kimataifa cha btAudio ambacho kinaweka "jina la Bluetooth" la ESP32 yako
  2. Sanidi ESP32 kupokea sauti na njia ya btAudio:: kuanza
  3. Weka pini za I2S na njia ya btAudio:: I2S.

Hiyo ni kwa upande wa programu! Sasa unachohitaji kufanya ni kuanzisha muunganisho wa Bluetooth kwenye ESP32 yako. Tafuta tu vifaa vipya kwenye simu yako / kompyuta / MP3 player na "ESP_Speaker" itaonekana. Mara tu unapofurahi kuwa kila kitu kinafanya kazi (muziki hucheza) unaweza kukata ESP32 kutoka kwa kompyuta yako. Ipe nguvu na usambazaji wa umeme wa USB na itakumbuka nambari ya mwisho uliyopakia. Kwa njia hii, unaweza kuondoka ESP32 yako ikiwa imefichwa nyuma ya mfumo wako wa HiFi milele.

Hatua ya 7: DSP - Kuchuja

Kupanua Mpokeaji na Usindikaji wa Ishara ya Dijiti

Ikiwa ulifuata hatua zote (na sikuacha kitu chochote nje) sasa una kipokeaji cha Bluetooth kinachofanya kazi kikamilifu kwa mfumo wako wa HiFi. Ingawa hii ni ya kupendeza haina kushinikiza mdhibiti mdogo hadi kwenye mipaka yake. ESP32 ina cores mbili zinazofanya kazi kwa 240MHz. Hiyo inamaanisha mradi huu ni zaidi ya mpokeaji tu. Ina uwezo wa kuwa mpokeaji wa Bluetooth na Programu ya Ishara ya Dijiti (DSP). DSPs kimsingi hufanya shughuli za hesabu kwenye ishara katika wakati halisi. Operesheni moja muhimu inaitwa Kuchuja kwa dijiti. Utaratibu huu huzuia masafa katika ishara chini au juu ya masafa fulani ya kukata, kulingana na ikiwa unatumia kichujio cha kupita cha juu au cha chini.

Vichujio vya kupita sana

Vichujio vya High-Pass hupunguza masafa chini ya bendi fulani. Nimejenga maktaba ya vichungi kwa mifumo ya Arduino kulingana na nambari kutoka kwa earlevel.com. Tofauti kuu ni kwamba nimebadilisha muundo wa darasa kuruhusu ujenzi wa vichungi vya hali ya juu kwa urahisi zaidi. Vichungi vya utaratibu wa juu hukandamiza masafa zaidi ya kukatwa kwako kwa ufanisi zaidi lakini zinahitaji hesabu zaidi. Walakini, na utekelezaji wa sasa, unaweza hata kutumia vichungi vya agizo la 6 kwa sauti ya wakati halisi!

Mchoro huo ni sawa na ule uliopatikana katika hatua ya awali isipokuwa kwamba tumebadilisha kitanzi kuu. Ili kuwezesha vichungi tunatumia njia ya btAudio:: createFilter. Njia hii inakubali hoja 3. Ya kwanza ni idadi ya kasoro za vichungi. Idadi ya vichungi vya vichungi ni nusu mpangilio wa kichungi. Kwa kichungi cha agizo la 6, hoja ya kwanza inapaswa kuwa 3. Kwa kichungi cha agizo la 8, itakuwa 4. Hoja ya pili ni cutoff ya kichungi. Nimeweka hii kwa 1000Hz ili kuwa na athari kubwa sana kwenye data. Mwishowe, tunabainisha aina ya faili na hoja ya tatu. Hii inapaswa kuwa barabara kuu kwa kichujio cha kupita-juu na kiwango cha chini cha kichujio cha kupitisha chini. Hati hapa chini inabadilisha kukata kwa masafa haya kati ya 1000Hz na 2Hz. Unapaswa kusikia athari kubwa kwenye data.

# pamoja

sauti ya btAudio = btAudio ("ESP_Speaker"); kuanzisha batili () {audio.begin (); int bck = 26; ws = 27; dout = 25; sauti. I2S (bck, dout, ws); } kitanzi batili () {kuchelewesha (5000); audio.createFilter (3, 1000, highpass); kuchelewesha (5000); redio.createFilter (3, 2, highpass); }

Vichujio vya kupitisha chini

Vichungi vya kupita chini hufanya kinyume cha vichungi vya kupitisha juu na kukandamiza masafa juu ya masafa fulani. Zinaweza kutekelezwa kwa njia sawa na vichungi vya kupita vya juu isipokuwa kwamba zinahitaji kubadilisha hoja ya tatu kuwa njia ya chini. Kwa mchoro hapa chini mimi hubadilisha njia ya chini ya kupitisha kati ya 2000Hz na 20000Hz. Tunatumai, utasikia tofauti. Inastahili kusikika ikiwa kichungi cha kupitisha chini kiko 2000Hz.

# pamoja

sauti ya btAudio = btAudio ("ESP_Speaker"); kuanzisha batili () {audio.begin (); int bck = 26; ws = 27; dout = 25; sauti. I2S (bck, dout, ws); } kitanzi batili () {kuchelewesha (5000); redio.createFilter (3, 2000, lowpass); kuchelewesha (5000); audio.createFilter (3, 20000, barabara ya chini); }

Hatua ya 8: DSP - Ukandamizaji wa Mbalimbali ya Nguvu

Usuli

Ukandamizaji wa anuwai ya nguvu ni njia ya usindikaji wa ishara ambayo inajaribu hata kutoa sauti ya sauti. Inasisitiza sauti kubwa, ambayo huinuka juu ya kizingiti fulani, kwa kiwango cha utulivu na kisha, kwa hiari huongeza zote mbili. Matokeo yake ni uzoefu zaidi hata wa kusikiliza. Hii ilinifaa sana wakati nilikuwa nikitazama onyesho na muziki wa nyuma sana na sauti za utulivu. Katika kesi hii, kuongeza sauti tu haikusaidia kwani hii ilikuza muziki wa nyuma tu. Kwa ukandamizaji wa anuwai, ningeweza kupunguza muziki wa nyuma kwa kiwango cha sauti na kusikia kila kitu vizuri tena.

Kanuni

Ukandamizaji wa anuwai ya nguvu hauhusishi tu kupunguza sauti au kuzuia kizingiti. Ni wajanja zaidi kuliko hiyo. Ukipunguza sauti sauti za utulivu zitapunguzwa pamoja na zile za sauti. Njia moja kuzunguka hii ni kizingiti cha ishara lakini hii inasababisha upotovu mkali. Ukandamizaji wa masafa yenye nguvu unajumuisha mchanganyiko wa kizingiti laini na uchujaji ili kupunguza upotoshaji ambao mtu angepata ikiwa ungependa kuweka / kubonyeza ishara. Matokeo yake ni ishara ambapo sauti kubwa "zimepigwa" bila kuvuruga na zile tulivu zinaachwa jinsi zilivyo. Nambari iliyo hapo chini inabadilika kati ya viwango vitatu tofauti vya kukandamiza.

  1. Ukandamizaji na kupotosha
  2. Ukandamizaji bila kuvuruga
  3. Hakuna Ukandamizaji

# pamoja

sauti ya btAudio = btAudio ("ESP_Speaker"); kuanzisha batili () {audio.begin (); int bck = 26; ws = 27; dout = 25; sauti. I2S (bck, dout, ws); } kitanzi batili () {kuchelewesha (5000); compress ya sauti (30, 0.0001, 0.0001, 10, 10, 0); kuchelewesha (5000); compress ya sauti (30, 0.0001, 0.1, 10, 10, 0); kuchelewesha (5000); kasoro ya sauti (); }

Ukandamizaji wa anuwai ya nguvu ni ngumu na njia za btAudio:: compress ina vigezo vingi. Nitajaribu kuelezea (kwa utaratibu) hapa:

  1. Kizingiti - Kiwango ambacho sauti hupunguzwa (hupimwa kwa decibel)
  2. Wakati wa shambulio - Wakati inachukua kwa kontrakta kuanza kufanya kazi mara kizingiti kimezidi
  3. Wakati wa kutolewa - Wakati inachukua kwa kontrakta kuacha kufanya kazi.
  4. Uwiano wa Kupunguza - sababu ambayo sauti inasisitizwa.
  5. Upana wa magoti - Upana (katika decibel) karibu na kizingiti ambacho kiboreshaji hufanya kazi sehemu (sauti ya asili zaidi).
  6. Faida (decibel) imeongezwa kwenye ishara baada ya kubanwa (ongeza / punguza sauti)

Upotoshaji unaosikika sana katika matumizi ya kwanza ya ukandamizaji ni kwa sababu kizingiti ni cha chini sana na wakati wote wa kushambulia na wakati wa kutolewa ni mfupi sana kwa ufanisi na kusababisha tabia ngumu ya kizingiti. Hii ni wazi kutatuliwa katika kesi ya pili kwa kuongeza wakati wa kutolewa. Hii kimsingi husababisha kujazia kutenda kwa njia laini zaidi. Hapa, nimeonyesha tu jinsi kubadilisha parameta 1 inaweza kuwa na athari kubwa kwenye sauti. Sasa ni zamu yako ya kujaribu vigezo tofauti.

Utekelezaji (hisabati ya uchawi - hiari)

Niligundua kuwa kwa ujinga kutekeleza msongamano wa Dynamic kuwa changamoto. Algorithm inahitaji kugeuza nambari 16-bit kuwa decibel na kisha kuibadilisha kuwa nambari 16 baada ya kushughulikia ishara. Niligundua kuwa laini moja ya nambari ilikuwa ikichukua mikrofoni 10 kusindika data ya stereo. Kama sauti ya stereo iliyoonyeshwa kwenye 44.1 KHz inaacha tu mikrofoni 11.3 tu kwa DSP hii ni polepole isiyokubalika… Walakini, kwa kuchanganya meza ndogo ya kutafuta (baiti 400) na utaratibu wa kuingiliana kulingana na tofauti zilizogawanywa za Netwon tunaweza kupata karibu bits 17 kwa mikrofoni 0.2.. Nimeambatanisha hati ya pdf na hesabu zote kwa wanaovutiwa kweli. Ni ngumu, umeonywa!

Hatua ya 9: Kiolesura cha Wifi

Kiolesura cha Wifi
Kiolesura cha Wifi
Kiolesura cha Wifi
Kiolesura cha Wifi

Sasa una mpokeaji wa Bluetooth anayeweza kuendesha DSP ya wakati halisi. Kwa kusikitisha, ikiwa unataka kubadilisha vigezo vyovyote vya DSP utahitaji kukatwa kutoka kwa HiFi yako, pakia mchoro mpya kisha uunganishe tena. Hii ni ngumu. Ili kurekebisha hii nilitengeneza seva ya wavuti ambayo unaweza kutumia kuhariri vigezo vyote vya DSP bila kuunganisha tena kwenye kompyuta yako. Mchoro wa kutumia seva ya wavuti uko chini.

# pamoja

# pamoja na audioAudio = btAudio ("ESP_Speaker"); wavuti ya webDSP; kuanzisha batili () {Serial.begin (115200); sauti.anza (); int bck = 26; ws = 27; dout = 25; sauti. I2S (bck, dout, ws); // badilisha na kitambulisho chako cha WiFi na nywila const char * ssid = "SSID"; const char * password = "NENO"; wavuti.anza (sid, nywila, na sauti); } kitanzi batili () {web._server.handleClient (); }

Nambari inapeana anwani ya IP kwa ESP32 yako ambayo unaweza kutumia kufikia ukurasa wa wavuti. Mara ya kwanza kuendesha nambari hii unapaswa kuiweka kwenye kompyuta yako. Kwa njia hiyo unaweza kuona anwani ya IP iliyopewa ESP32 yako kwenye mfuatiliaji wako wa serial. Ikiwa unataka kufikia ukurasa huu wa wavuti ingiza anwani hii ya IP kwa kivinjari chochote cha wavuti (iliyojaribiwa kwenye chrome).

Kufikia sasa tunapaswa kufahamiana na njia ya kuwezesha Bluetooth na I2S. Tofauti muhimu ni matumizi ya kitu cha webDSP. Kitu hiki kinachukua Wifi SSID yako na nywila kama hoja na vile vile kiashiria cha kitu cha btAudio. Katika kitanzi kuu, tunapata kila kitu wavuti wa DSP kusikiliza data zinazoingia kutoka kwa wavuti na kisha kusasisha vigezo vya DSP. Kama hatua ya kufunga, inapaswa kuzingatiwa kuwa wote wawili Bluetooth na Wifi hutumia redio sawa kwenye ESP32. Hii inamaanisha kuwa itabidi usubiri hadi sekunde 10 kutoka wakati unapoingiza vigezo kwenye ukurasa wa wavuti hadi wakati habari inafikia ESP32.

Hatua ya 10: Mipango ya Baadaye

Tunatumahi, umefurahiya hii inayoweza kufundishwa na sasa una Sauti ya Bluetooth na DSP imeongezwa kwa HiFi yako. Walakini, nadhani kuna nafasi nyingi ya ukuaji katika mradi huu na nilitaka tu kuonyesha miongozo ya baadaye ambayo ningeweza kuchukua.

  • Washa utiririshaji wa sauti ya Wifi (kwa ubora bora wa sauti)
  • Tumia maikrofoni ya I2S kuwezesha amri za sauti
  • kuendeleza kusawazisha kwa WiFi
  • Ifanye iwe nzuri (mkate haupigi kelele muundo mzuri wa bidhaa)

Ninapozunguka kutekeleza maoni haya nitatengeneza maelekezo zaidi. Au labda mtu mwingine atapata huduma hizi. Hiyo ndio furaha ya kufanya kila kitu kuwa chanzo wazi!

Ilipendekeza: