Satura rādītājs:
- Piegādes
- 1. solis: būvniecība - maizes dēlis
- 2. solis: būvniecība - stumšanas galvenes/lodēšana
- 3. solis: būvniecība - pievienojiet kontaktdakšas
- 4. solis: būvniecība - I2S elektroinstalācija
- 5. darbība: BtAudio bibliotēkas instalēšana
- 6. darbība: BtAudio bibliotēkas izmantošana
- 7. solis: DSP - filtrēšana
- 8. solis: DSP - dinamiskā diapazona saspiešana
- 9. darbība. Wifi saskarne
- 10. solis: nākotnes plāni
Video: Bluetooth audio un digitālo signālu apstrāde: Arduino sistēma: 10 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:53
Kopsavilkums
Kad es domāju par Bluetooth, es domāju par mūziku, bet diemžēl lielākā daļa mikrokontrolleru nevar atskaņot mūziku, izmantojot Bluetooth. Raspberry Pi var, bet tas ir dators. Es vēlos izstrādāt uz Arduino balstītu ietvaru, lai mikrokontrolleri varētu atskaņot audio, izmantojot Bluetooth. Lai pilnībā saliektu mikrokontrollera muskuļus, es pievienoju skaņai reāllaika digitālo signālu apstrādi (DSP) (augstfrekvences filtrēšana, zemas caurlaidības filtrēšana un dinamiskā diapazona saspiešana). Par ķiršu uz augšu, es pievienošu tīmekļa serveri, ko var izmantot, lai bezvadu režīmā konfigurētu DSP. Iegultais video parāda Bluetooth audio pamatus darbībā. Tas arī parāda, ka es izmantoju tīmekļa serveri, lai veiktu dažas augstfrekvences filtrēšanu, zemas caurlaidības filtrēšanu un dinamiskā diapazona saspiešanu. Pirmā dinamiskā diapazona saspiešanas izmantošana mērķtiecīgi izraisa traucējumus kā sliktas parametru izvēles piemērs. Otrais piemērs novērš šo izkropļojumu.
Šim projektam ESP32 ir izvēlētais mikrokontrolleris. Tas maksā mazāk par 10 sterliņu mārciņām un ir aprīkots ar ADC, DAC, Wifi, Bluetooth Low Energy, Bluetooth Classic un 240MHz divkodolu procesoru. Borta DAC var tehniski atskaņot audio, bet tas neizklausīsies lieliski. Tā vietā es izmantošu Adafruit I2S stereo dekodētāju, lai radītu līnijas izejas signālu. Šo signālu var viegli nosūtīt uz jebkuru HiFi sistēmu, lai uzreiz pievienotu bezvadu audio jūsu esošajai HiFi sistēmai.
Piegādes
Cerams, ka lielākajai daļai ražotāju būs maizes dēļi, džemperi, USB kabeļi, barošanas avota lodāmuri, un viņiem būs jāiztērē tikai 15 mārciņas par ESP32 un stereo dekodētāju. Ja nē, visas nepieciešamās detaļas ir uzskaitītas zemāk.
- ESP32 - pārbaudīts ar ESP32 -PICO -KIT un TinyPico - £ 9.50/ £ 24
- Adafruit I2S stereo dekodētājs - £ 5,51
- Maizes dēlis - £ 3–5 £ katrs
- Jumper vadi - £ 3
- Vadu austiņas/Hi -Fi sistēma - £ £ £
- Stumjamie galviņas vai lodāmurs - £ 2,10 / £ 30
- Mikro USB kabelis - £ 2,10/ £ 3
- 3,5 mm līdz RCA savienotājs/ 3,5 mm ligzda līdz ligzdai (vai jebkuram skaļruņa vajadzībām) - 2,40 £/ 1,50 £
- USB barošanas avots - £ 5
1. solis: būvniecība - maizes dēlis
Ja iegādājāties ESP32-PICO-KIT, jums nebūs jālodē tapas, jo tas ir iepriekš lodēts. Vienkārši novietojiet to uz maizes dēļa.
2. solis: būvniecība - stumšanas galvenes/lodēšana
Ja jums ir lodāmurs, lodējiet tapas pie stereo dekodētāja saskaņā ar norādījumiem Adafruit vietnē. Rakstīšanas laikā mans lodāmurs bija darbā, kas bija bloķēts. Es negribēju maksāt par pagaidu lodāmuru, tāpēc no pimoroni sagriezu dažas stumšanas galvenes. Es tos sagriezu, lai tie atbilstu stereo dekodētājam. Tas nav labākais risinājums (un nevis kā galvenes bija paredzēts izmantot), bet tā ir lētākā alternatīva lodāmurim. Ielieciet sagriezto galveni uz maizes dēļa. Dekodētājam jums ir nepieciešama tikai viena 6 tapu rinda. Lai nodrošinātu stabilitāti, otrā pusē varat pievienot vēl sešus, taču tas nav nepieciešams šai prototipa sistēmai. Tapas, kurās iedalīt galvenes, ir vin, 3vo, gnd, wsel, din un bclk.
3. solis: būvniecība - pievienojiet kontaktdakšas
Novietojiet stereo dekodētāju uz spiedpogām (vin, 3vo, gnd, wsel, din un bclk tapas) un stingri saspiediet tās kopā. Atkal, ideālā gadījumā tas būtu jādara ar lodāmuru, bet man vajadzēja improvizēt. Jūs pamanīsit, ka visi vadi šajā pamācībā ir zili. Tas ir tāpēc, ka man nebija džemperu vadu, tāpēc es sagriezu 1 garu vadu mazākos gabalos. Turklāt es esmu krāsu akla un man īsti nerūp vadu krāsa. Strāvas tapas ir piestiprinātas šādi:
3v3 (ESP32) -> vin uz stereo dekodētāju
gnd (ESP32) -> gnd uz stereo dekodētāja
4. solis: būvniecība - I2S elektroinstalācija
Lai nosūtītu Bluetooth audio no ESP32 uz stereo dekodētāju, mēs izmantosim digitālās saziņas metodi, ko sauc par I2S. Stereodekodētājs uztvers šo digitālo signālu un pārvērtīs to par analogo signālu, ko var pievienot skaļrunim vai HiFi. I2S ir nepieciešami tikai 3 vadi, un to ir viegli saprast. Bitu pulksteņa (bclk) līnija kļūst augsta un zema, norādot, ka tiek pārraidīts jauns bits. Datu izvades līnija (dout) kļūst augsta vai zema, lai norādītu, vai šī bita vērtība ir 0 vai 1, un vārdu atlases līnija (wsel) kļūst augsta vai zema, lai norādītu, vai tiek pārraidīts kreisais vai labais kanāls. Ne katrs mikrokontrolleris atbalsta I2S, bet ESP32 ir 2 I2S līnijas. Tas padara to par acīmredzamu izvēli šim projektam.
Elektroinstalācija ir šāda:
27 (ESP32) -> wsel (Stereo dekodētājs)
25 (ESP32) -> din (stereo dekodētājs)
26 (ESP32) -> bclk (stereo dekodētājs)
5. darbība: BtAudio bibliotēkas instalēšana
Ja tie vēl nav instalēti, instalējiet Arduino IDE un Arduino kodolu ESP32. Kad esat tos instalējis, apmeklējiet manu Github lapu un lejupielādējiet krātuvi. Arduino IDE sadaļā Skice >> Iekļaut bibliotēku >> atlasiet “Pievienot. ZIP bibliotēku”. Pēc tam atlasiet lejupielādēto zip failu. Tam vajadzētu pievienot manu btAudio bibliotēku jūsu Arduino bibliotēkām. Lai izmantotu bibliotēku, Arduino skicē ir jāiekļauj atbilstošā galvene. To redzēsit nākamajā darbībā.
6. darbība: BtAudio bibliotēkas izmantošana
Pēc instalēšanas pievienojiet ESP32 datoram, izmantojot mikro USB, un pēc tam pievienojiet stereo dekodētāju skaļrunim ar 3,5 mm vadu. Pirms skices augšupielādes jums būs jāmaina dažas lietas Arduino redaktorā. Kad esat izvēlējies savu dēli, jums būs jārediģē nodalījumu shēma sadaļā Rīki >> Sadalīšanās shēma un jāizvēlas vai nu "No OTA (Large APP)", vai "Minimal SPIFFS (Large APPS with OTA)". Tas ir nepieciešams, jo šis projekts izmanto gan WiFi, gan Bluetooth, kas ir ļoti atmiņas ietilpīgas bibliotēkas. Kad esat to izdarījis, augšupielādējiet šādu skici ESP32.
#iekļaut
// Iestata audioierīces nosaukumu btAudio audio = btAudio ("ESP_Speaker"); void setup () {// straumē audio datus uz ESP32 audio.begin (); // izvada saņemtos datus I2S DAC int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } void loop () {}
Skici kopumā var iedalīt 3 posmos:
- Izveidojiet globālu btAudio objektu, kas nosaka jūsu ESP32 Bluetooth nosaukumu
- Konfigurējiet ESP32 audio saņemšanai, izmantojot metodi btAudio:: begin
- Iestatiet I2S tapas ar btAudio:: I2S metodi.
Tas ir programmatūras pusē! Tagad viss, kas jums jādara, ir izveidot Bluetooth savienojumu ar savu ESP32. Vienkārši meklējiet tālrunī/klēpjdatorā/MP3 atskaņotājā jaunas ierīces, un parādīsies uzraksts "ESP_Speaker". Kad esat priecīgs, ka viss darbojas (tiek atskaņota mūzika), varat atvienot ESP32 no datora. Ieslēdziet to, izmantojot USB barošanas avotu, un tas atcerēsies pēdējo tajā augšupielādēto kodu. Tādā veidā jūs varat atstāt savu ESP32 uz visiem laikiem paslēptu aiz HiFi sistēmas.
7. solis: DSP - filtrēšana
Uztvērēja paplašināšana ar digitālo signālu apstrādi
Ja izpildījāt visas darbības (un es neko neatstāju), tagad jūsu HiFi sistēmai ir pilnībā funkcionējošs Bluetooth uztvērējs. Lai gan tas ir forši, tas īsti nepiespiež mikrokontrolleru līdz savām robežām. ESP32 ir divi kodoli, kas darbojas ar frekvenci 240 MHz. Tas nozīmē, ka šis projekts ir daudz vairāk nekā tikai uztvērējs. Tā spēj būt Bluetooth uztvērējs ar digitālo signālu procesoru (DSP). DSP būtībā reāllaikā veic signāla matemātiskas darbības. Viena noderīga darbība tiek saukta par digitālo filtrēšanu. Šis process vājina signāla frekvences zem vai virs noteiktas robežfrekvences atkarībā no tā, vai izmantojat augstās vai zemās caurlaides filtru.
Augstas caurlaides filtri
Augstas caurlaides filtri vājina frekvences zem noteiktas joslas. Esmu izveidojis filtru bibliotēku Arduino sistēmām, pamatojoties uz kodu no earlevel.com. Galvenā atšķirība ir tā, ka esmu mainījis klases struktūru, lai vieglāk varētu izveidot augstākas kārtas filtrus. Augstākas kārtas filtri efektīvāk nomāc frekvences, kas pārsniedz jūsu robežu, taču tām ir nepieciešams daudz vairāk aprēķinu. Tomēr, izmantojot pašreizējo ieviešanu, jūs pat varat izmantot 6. kārtas filtrus reāllaika skaņai!
Skice ir tāda pati kā iepriekšējā solī, izņemot to, ka esam mainījuši galveno cilpu. Lai iespējotu filtrus, mēs izmantojam metodi btAudio:: createFilter. Šī metode pieņem 3 argumentus. Pirmais ir filtru kaskāžu skaits. Filtru kaskāžu skaits ir puse no filtra kārtas. Sestās kārtas filtram pirmajam argumentam jābūt 3. 8. kārtas filtram tas būtu 4. Otrais arguments ir filtra nogriešana. Esmu iestatījis to uz 1000 Hz, lai patiešām dramatiski ietekmētu datus. Visbeidzot, ar trešo argumentu mēs norādām failu veidotāja veidu. Tam vajadzētu būt augstās caurlaides filtram un zemas caurlaides filtram zemas caurlaidības filtram. Zemāk esošais skripts pārslēdz šīs frekvences robežu no 1000 Hz līdz 2 Hz. Jums vajadzētu dzirdēt dramatisku ietekmi uz datiem.
#iekļaut
btAudio audio = btAudio ("ESP_Speaker"); void setup () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } void loop () {delay (5000); audio.createFilter (3, 1000, augsta caurlaide); kavēšanās (5000); audio.createFilter (3, 2, augsta caurlaide); }
Zemas caurlaidības filtri
Zemfrekvences filtri darbojas pretēji augstfrekvences filtriem un nomāc frekvences virs noteiktas frekvences. Tos var ieviest tāpat kā augstās caurlaidības filtrus, izņemot to, ka tiem ir jāmaina trešais arguments uz zemo caurlaidību. Zemāk esošajai skicei es mainu zemās caurlaidības robežu starp 2000 Hz un 20000 Hz. Cerams, ka dzirdēsit atšķirību. Tam vajadzētu izklausīties diezgan klusam, ja zemas caurlaidības filtrs ir 2000 Hz.
#iekļaut
btAudio audio = btAudio ("ESP_Speaker"); void setup () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } void loop () {delay (5000); audio.createFilter (3, 2000, zemā caurlaide); kavēšanās (5000); audio.createFilter (3, 20000, zemā caurlaide); }
8. solis: DSP - dinamiskā diapazona saspiešana
Fons
Dinamiskā diapazona saspiešana ir signālu apstrādes metode, kas mēģina izlīdzināt audio skaļumu. Tas saspiež skaļas skaņas, kas paceļas virs noteikta sliekšņa, līdz klusām skaņām un pēc tam pēc izvēles pastiprina abas. Rezultāts ir daudz vienmērīgāka klausīšanās pieredze. Tas ļoti noderēja, kad skatījos izrādi ar ļoti skaļu fona mūziku un ļoti klusu vokālu. Šajā gadījumā tikai skaļuma palielināšana nepalīdzēja, jo tas tikai pastiprināja fona mūziku. Ar dinamiskā diapazona saspiešanu es varētu samazināt skaļo fona mūziku līdz vokāla līmenim un atkal visu pareizi dzirdēt.
Kods
Dinamiskā diapazona saspiešana nenozīmē tikai skaļuma samazināšanu vai signāla sliekšņa noteikšanu. Tas ir mazliet gudrāks par to. Samazinot skaļumu, tiks izslēgtas klusās skaņas, kā arī skaļās. Viens veids, kā to novērst, ir signāla sliekšņa noteikšana, taču tas rada nopietnus traucējumus. Dinamiskā diapazona saspiešana ietver mīksta sliekšņa un filtrēšanas kombināciju, lai samazinātu izkropļojumus, kas varētu rasties, ja signālu slāpētu/apcirptu. Rezultāts ir signāls, kurā skaļās skaņas tiek “izgrieztas” bez izkropļojumiem un klusās tiek atstātas tādas, kādas tās ir. Tālāk esošais kods pārslēdzas starp trim dažādiem saspiešanas līmeņiem.
- Saspiešana ar izkropļojumiem
- Saspiešana bez izkropļojumiem
- Nav saspiešanas
#iekļaut
btAudio audio = btAudio ("ESP_Speaker"); void setup () {audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } void loop () {delay (5000); audio.compress (30, 0,0001, 0,0001, 10, 10, 0); kavēšanās (5000); audio.compress (30, 0,0001, 0,1, 10, 10, 0); kavēšanās (5000); audio.decompress (); }
Dinamiskā diapazona saspiešana ir sarežģīta, un btAudio:: compress metodēm ir daudz parametru. Es mēģināšu tos izskaidrot (secībā) šeit:
- Slieksnis - līmenis, kādā audio tiek samazināts (mērīts decibelos)
- Uzbrukuma laiks - laiks, kas nepieciešams, lai kompresors sāktu darboties pēc sliekšņa pārsniegšanas
- Izlaišanas laiks - laiks, kas nepieciešams kompresora darbības pārtraukšanai.
- Redukcijas koeficients - koeficients, pēc kura audio tiek saspiests.
- Ceļa platums - platums (decibelos) ap slieksni, pie kura daļēji darbojas kompresors (dabiskāka skaņa).
- Pēc kompresijas signālam pievienotais pastiprinājums (decibelos) (palielināt/samazināt skaļumu)
Ļoti dzirdami izkropļojumi, pirmo reizi izmantojot saspiešanu, ir tāpēc, ka slieksnis ir ļoti zems, un uzbrukuma laiks un atbrīvošanas laiks ir ļoti īss, kā rezultātā rodas stingra sliekšņa uzvedība. Otrajā gadījumā tas ir skaidri atrisināts, palielinot izlaišanas laiku. Tas būtībā liek kompresoram darboties daudz vienmērīgāk. Šeit es tikai parādīju, kā viena parametra maiņa var dramatiski ietekmēt skaņu. Tagad ir jūsu kārta eksperimentēt ar dažādiem parametriem.
Īstenošana (burvju matemātika - pēc izvēles)
Es atklāju, ka naivi īstenot dinamiskā diapazona saspiešanu ir izaicinoši. Algoritmam ir nepieciešams pārveidot 16 bitu veselu skaitli decibelos un pēc tam pārveidot to atpakaļ par 16 bitu veselu skaitli, kad esat apstrādājis signālu. Es pamanīju, ka stereo datu apstrādei viena koda rinda aizņem 10 mikrosekundes. Tā kā stereo audio paraugs 44,1 KHz atstāj tikai 11,3 mikrosekundes DSP, tas ir nepieņemami lēni … Tomēr, apvienojot nelielu uzmeklēšanas tabulu (400 baiti) un interpolācijas procedūru, kas balstīta uz Netwon dalītajām atšķirībām, mēs varam iegūt gandrīz 17 bitu precizitāti 0,2 mikrosekundēs. Es esmu pievienojis pdf dokumentu ar visu matemātiku patiesi ieinteresētajiem. Tas ir sarežģīti, jūs esat brīdināts!
9. darbība. Wifi saskarne
Tagad jums ir Bluetooth uztvērējs, kas spēj darbināt reālā laika DSP. Diemžēl, ja vēlaties mainīt kādu no DSP parametriem, jums būs jāatvienojas no HiFi, augšupielādējiet jaunu skici un pēc tam atkārtoti izveidojiet savienojumu. Tas ir neveikli. Lai to labotu, es izstrādāju tīmekļa serveri, kuru varat izmantot, lai rediģētu visus DSP parametrus, atkārtoti nepievienojoties datoram. Skice tīmekļa servera izmantošanai ir zemāk.
#iekļaut
#include btAudio audio = btAudio ("ESP_Speaker"); webDSP tīmeklis; void setup () {Serial.begin (115200); audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); // aizstāt ar savu WiFi ID un paroli const char* ssid = "SSID"; const char* parole = "PASSWORD"; web.begin (ssid, parole un audio); } void loop () {web._server.handleClient (); }
Kods jūsu ESP32 piešķir IP adresi, kuru varat izmantot, lai piekļūtu tīmekļa lapai. Pirmo reizi palaižot šo kodu, tas ir jāpievieno datoram. Tādā veidā seriālajā monitorā var redzēt jūsu ESP32 piešķirto IP adresi. Ja vēlaties piekļūt šai tīmekļa lapai, vienkārši ievadiet šo IP adresi jebkurā tīmekļa pārlūkprogrammā (pārbaudīta pārlūkā Chrome).
Tagad mums vajadzētu būt pazīstamam ar Bluetooth un I2S iespējošanas metodi. Galvenā atšķirība ir webDSP objekta izmantošana. Šis objekts ņem jūsu Wifi SSID un paroli kā argumentus, kā arī rādītāju uz objektu btAudio. Galvenajā ciklā mēs pastāvīgi liekam webDSP objektam noklausīties ienākošos datus no tīmekļa lapas un pēc tam atjaunināt DSP parametrus. Noslēgumā jāatzīmē, ka gan Bluetooth, gan Wifi izmanto vienu un to pašu radio ESP32. Tas nozīmē, ka, iespējams, būs jāgaida līdz 10 sekundēm no parametru ievadīšanas tīmekļa vietnē līdz brīdim, kad informācija faktiski sasniedz ESP32.
10. solis: nākotnes plāni
Cerams, ka jums patika šī pamācība un tagad HiFi ir pievienots Bluetooth audio un DSP. Tomēr es domāju, ka šajā projektā ir daudz izaugsmes iespēju, un es tikai gribēju norādīt dažus nākotnes virzienus, kurus es varētu veikt.
- Iespējot Wifi audio straumēšanu (lai iegūtu vislabāko audio kvalitāti)
- Izmantojiet I2S mikrofonu, lai iespējotu balss komandas
- izstrādāt WiFi kontrolētu ekvalaizeru
- Padariet to skaistu (maizes dēlis neizkliedz lielisku izstrādājuma dizainu)
Kad es sāku īstenot šīs idejas, es darīšu vairāk pamācību. Vai varbūt kāds cits ieviesīs šīs funkcijas. Tas ir prieks visu padarīt atvērtu!
Ieteicams:
Attēlu apstrāde ar Raspberry Pi: OpenCV un attēla krāsu atdalīšanas instalēšana: 4 soļi
Attēlu apstrāde ar Raspberry Pi: OpenCV un attēla krāsu atdalīšanas instalēšana: šī ziņa ir pirmā no vairākām attēlu apstrādes apmācībām, kas jāievēro. Mēs rūpīgāk aplūkojam attēla pikseļus, iemācāmies instalēt OpenCV uz Raspberry Pi, kā arī rakstām testa skriptus, lai uzņemtu attēlu, kā arī
Bluetooth un IMU ar Tactigon Board - apstrāde: 7 soļi
Bluetooth un IMU ar Tactigon dēli - apstrāde: Šajā rakstu sērijā tiks paskaidrots, kā izmantot Tactigon integrētos sensorus un sakaru saskarnes, lai izveidotu vienkāršu žestu kontrolieri. Avota kods pieejams šeit vietnē GitHub Šajā rakstā mēs uzzināsim, kā izmantot simp
Ievads attēlu apstrādē: Pixy un tā alternatīvas: 6 soļi
Ievads attēlu apstrādē. Šī raksta beigās jūs uzzināsit: kā veidojas digitālais attēls
Sirdsdarbības monitors AD8232, Arduino, apstrāde: 4 soļi
Sirdsdarbības monitors AD8232, Arduino, apstrāde: Analogās ierīces AD8232 ir pilnīga analogā priekšējā daļa, kas paredzēta, lai iegūtu miljonvolu līmeņa EKG (ElectroCardioGram) signālus. Lai gan ir vienkārši savienot AD8232 un redzēt iegūto EKG signālu osciloskopā, izaicinājums ir
3D AIR pele - Arduino + apstrāde: 5 soļi
3D AIR pele | Arduino + apstrāde: 3D AIR pele | Arduino + ProcessingEs esmu rūpnieciskā dizaina students, un pagājušajā gadā es piedalījos kursā "Tehnoloģija kā RAW materiāls". Es izveidoju šo projektu kā savu pēdējo darbu. Lielāko daļu laika strādāju ar SolidWorks, CAD programmatūru, kas paredzēta