Мазмұны:
- Жабдықтар
- 1 -қадам: Құрылыс - нан тақтасы
- 2 -қадам: Құрылыс - тақырыптарды итеру/дәнекерлеу
- 3 -қадам: Құрылыс - Қуат түйреуіштерін сыммен жалғаңыз
- 4 -қадам: Құрылыс - I2S сымдары
- 5 -қадам: BtAudio кітапханасын орнату
- 6 -қадам: BtAudio кітапханасын пайдалану
- 7 -қадам: DSP - сүзу
- 8 -қадам: DSP - динамикалық ауқымды қысу
- 9 -қадам: Wi -Fi интерфейсі
- 10 -қадам: Болашаққа жоспарлар
Бейне: Bluetooth дыбыстық және цифрлық сигналдарды өңдеу: Arduino негізі: 10 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:23
Қорытынды
Мен Bluetooth туралы ойлаған кезде мен музыка туралы ойлаймын, бірақ микроконтроллерлердің көпшілігі Bluetooth арқылы музыканы ойнай алмайды. Raspberry Pi жасай алады, бірақ бұл компьютер. Мен Bluetooth арқылы дыбысты ойнату үшін микроконтроллерлерге арналған Arduino негізін құрғым келеді. Микроконтроллердің бұлшықеттерін толық иілу үшін мен дыбысқа нақты уақыттағы сандық сигналды өңдеуді қосамын (жоғары өткізу сүзгісі, төмен өту сүзгісі және динамикалық диапазон қысымы). Шие үшін мен DSP -ді сымсыз конфигурациялауға болатын веб -серверді қосамын. Ендірілген бейнеде Bluetooth дыбысының әрекет ету негіздері көрсетілген. Сондай-ақ, бұл маған жоғары жылдамдықты сүзу, төмен өту сүзу және динамикалық диапазонды қысу үшін веб-серверді қолдануды көрсетеді. Динамикалық диапазонды қысуды бірінші рет қолдану параметрді нашар таңдау мысалы ретінде мақсатты түрде бұрмалануды тудырады. Екінші мысал бұл бұрмалануды жояды.
Бұл жоба үшін ESP32 - таңдаулы микроконтроллер. Оның бағасы 10 фунт стерлингтен аспайды және ADC, DAC, Wifi, Bluetooth төмен энергия, Bluetooth Classic және 240 МГц екі ядролы процессормен жабдықталған. Борттағы DAC техникалық түрде аудионы ойната алады, бірақ ол керемет естілмейді. Оның орнына мен Adafruit I2S стерео декодерін желілік сигнал шығару үшін қолданамын. Бұл сигналды кез келген HiFi жүйесіне оңай жіберуге болады, ол қазірдің өзінде бар HiFi жүйесіне сымсыз дыбысты қосады.
Жабдықтар
Өндірушілердің көпшілігінде тақталар, секіргіштер, USB кабельдері, электрмен жабдықтауға арналған дәнекерлеу үтіктері болады және тек ESP32 мен стерео декодерге 15 фунт жұмсауға тура келеді деп үміттенеміз. Олай болмаған жағдайда, барлық қажетті бөлшектер төменде берілген.
- ESP32 - ESP32 -PICO -KIT және TinyPico -де сыналған - £ 9.50/ £ 24
- Adafruit I2S стерео декодері - 5,51 фунт стерлинг
- Нан тақтасы - әрқайсысы 3-5 фунт стерлинг
- Өткізгіш сымдар - 3 фунт
- Сымды құлаққаптар/Hi -Fi жүйесі - £££
- Басу немесе дәнекерлеу темірі - 2,10 фунт / 30 фунт
- Микро USB кабелі - 2,10 фунт/ 3 фунт
- 3,5 мм RCA коннекторына/ 3,5 мм ұяға (немесе динамикке қажет нәрсеге) - 2,40 фунт/ 1,50 фунт
- USB қуат көзі - 5 фунт
1 -қадам: Құрылыс - нан тақтасы
Егер сіз ESP32-PICO-KIT сатып алсаңыз, ешқандай түйреуіштерді дәнекерлеуге тура келмейді, себебі ол алдын ала дәнекерленген түрде келеді. Оны жай ғана тақтаға қойыңыз.
2 -қадам: Құрылыс - тақырыптарды итеру/дәнекерлеу
Егер сізде дәнекерлеу үтігі болса, түйреуіштерді Adafruit веб -сайтындағы нұсқауларға сәйкес стерео декодерге дәнекерлеңіз. Жазу кезінде менің дәнекерлеу үтігі бекітілген жұмыста болды. Мен уақытша дәнекерлегішке ақша төлегім келмеді, сондықтан мен пиморониден бірнеше итергіш тақырыптарды кесіп алдым. Мен оларды стерео декодерге сәйкес келуі үшін кесіп алдым. Бұл ең жақсы шешім емес (және тақырыптар қалай пайдаланылатыны емес), бірақ бұл дәнекерлеуге арналған ең арзан балама. Кесілген тақырыпты тақтаға салыңыз. Декодер үшін сізге тек 6 істікшеден тұратын 1 жол қажет. Тұрақтылық үшін екінші жаққа тағы алты қосуға болады, бірақ бұл прототиптік жүйе үшін бұл қажет емес. Тақырыптарды тесуге арналған түйреуіштер - vin, 3vo, gnd, wsel, din және bclk.
3 -қадам: Құрылыс - Қуат түйреуіштерін сыммен жалғаңыз
Стерео декодерді итергіш тақырыптарға қойыңыз (vin, 3vo, gnd, wsel, din және bclk түйреуіштері) және оларды бір -біріне мықтап итеріңіз. Тағы да, бұл дәнекерлеуішпен жасалуы керек, бірақ мен импровизациялауға тура келді. Сіз бұл нұсқаулықтағы барлық сымдардың көк екенін байқайсыз. Менде секіргіш сым болмағандықтан, мен ұзын 1 сымды кішірек бөліктерге бөлдім. Сонымен қатар, мен түссізбін және сымның түсіне мән бермеймін. Қуат түйреуіштері келесі түрде бекітілген:
3v3 (ESP32) -> стерео декодерден винге дейін
gnd (ESP32) -> стерео дешифраторды қосу үшін
4 -қадам: Құрылыс - I2S сымдары
Bluetooth дыбысын ESP32 -ден стерео декодерге жіберу үшін біз I2S деп аталатын цифрлық байланыс әдісін қолданамыз. Стерео декодер бұл цифрлық сигналды қабылдайды және оны динамикке немесе HiFi -ге қосуға болатын аналогтық сигналға айналдырады. I2S тек 3 сымды қажет етеді және түсіну өте қарапайым. Биттік сағат (bclk) сызығы жоғары және төмен айналады және жаңа бит жіберілгенін көрсетеді. Деректер шығатын жол (нүкте) жоғары немесе төмен айналады, бұл бит 0 немесе 1 мәнін көрсетеді, ал сөз таңдау сызығы (wsel) жоғары немесе төмен айналады, солға немесе оңға арнаның берілуін көрсетеді. Әрбір микроконтроллер I2S -ке қолдау көрсетпейді, бірақ ESP32 -де 2 I2S желісі бар. Бұл бұл жоба үшін айқын таңдау жасайды.
Сымдар келесідей:
27 (ESP32) -> wsel (стерео декодер)
25 (ESP32) -> din (стерео декодер)
26 (ESP32) -> bclk (стерео декодер)
5 -қадам: BtAudio кітапханасын орнату
Егер сізде әлі орнатылмаған болса, Arduino IDE мен ESP32 үшін Arduino ядросын орнатыңыз. Сіз оларды орнатқаннан кейін менің Github бетіне кіріп, репозиторийді жүктеңіз. Arduino IDE ішінде эскиз >> Кітапхананы қосу >> астында «. ZIP кітапханасын қосу» тармағын таңдаңыз. Содан кейін жүктелген zip файлын таңдаңыз. Бұл менің btAudio кітапханамды Arduino кітапханаларына қосу керек. Кітапхананы пайдалану үшін Arduino эскизінде тиісті тақырыпты қосу қажет. Мұны келесі қадамда көресіз.
6 -қадам: BtAudio кітапханасын пайдалану
Орнатқаннан кейін ESP32 компьютеріңізге микро USB арқылы қосыңыз, содан кейін стерео декодерді 3,5 мм сыммен динамикке қосыңыз. Эскизді жүктемес бұрын Arduino редакторында кейбір нәрселерді өзгерту қажет болады. Сіз тақтаны таңдағаннан кейін сізге Tools >> Partition Scheme бөлімінің схемасын өңдеп, «OTA (Large APP) жоқ» немесе «Minimal SPIFFS (OTA бар үлкен APPS)» тармағын таңдауыңыз қажет. Бұл қажет, себебі бұл жоба WiFi мен Bluetooth -ды қолданады, олар жады өте ауыр кітапханалар. Сіз мұны жасағаннан кейін келесі эскизді ESP32 -ге жүктеңіз.
#қосу
// btAudio audio = btAudio («ESP_Speaker») аудио құрылғысының атауын орнатады; void setup () {// аудио деректерді ESP32 audio.begin () ішіне ағады; // алынған мәліметтерді I2S DAC шығарады int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); } void цикл () {}
Эскизді жалпы 3 кезеңге бөлуге болады:
- ESP32 «Bluetooth атауын» орнататын жаһандық btAudio нысанын жасаңыз
- BtAudio:: begin әдісімен дыбысты қабылдау үшін ESP32 конфигурациялаңыз
- BtAudio:: I2S әдісімен I2S түйреуіштерін орнатыңыз.
Бұл бағдарламалық қамтамасыз ету жағында! Енді сізге ESP32 -ге Bluetooth қосылымын қосу жеткілікті. Телефоннан/ноутбуктан/MP3 ойнатқыштан жаңа құрылғыларды іздеңіз, сонда «ESP_Speaker» пайда болады. Барлығы жұмыс істеп жатқанына қуанғаннан кейін (музыка ойнайды) ESP32 -ді компьютерден ажыратуға болады. Оны USB қуат көзімен қосыңыз, ол сіз жүктеген соңғы кодты есте сақтайды. Осылайша сіз ESP32 құрылғысын HiFi жүйесінің артында жасырын қалдыра аласыз.
7 -қадам: DSP - сүзу
Цифрлық сигналды өңдеу арқылы ресиверді кеңейту
Егер сіз барлық қадамдарды орындаған болсаңыз (мен ештеңе қалдырмадым), сізде HiFi жүйесі үшін толықтай жұмыс істейтін Bluetooth қабылдағышы бар. Бұл керемет болғанымен, ол микроконтроллерді өз шегіне шығармайды. ESP32 -де 240 МГц жиілікте жұмыс істейтін екі ядро бар. Бұл дегеніміз, бұл жоба тек қабылдаушыдан әлдеқайда көп. Ол цифрлық сигнал процессоры (DSP) бар Bluetooth қабылдағышы бола алады. DSPs нақты уақытта сигнал бойынша математикалық операцияларды орындайды. Бір пайдалы операция цифрлық сүзу деп аталады. Бұл процесс жоғары немесе төмен өту сүзгісін пайдаланатындығыңызға байланысты сигналдың белгілі бір жиіліктен төмен немесе жоғары жиіліктегі жиілігін әлсіретеді.
Жоғары өткізгішті сүзгілер
High-Pass сүзгілері белгілі бір диапазоннан төмен жиілікті әлсіретеді. Earlevel.com сайтынан алынған код негізінде Arduino жүйелері үшін сүзгі кітапханасын құрдым. Негізгі айырмашылық-мен жоғары деңгейлі сүзгілерді құруды жеңілдету үшін сынып құрылымын өзгерттім. Жоғары ретті сүзгілер жиілікті шектейді, бірақ олар әлдеқайда көп есептеулерді қажет етеді. Алайда, қазіргі кезде сіз аудио үшін 6-реттік сүзгілерді қолдана аласыз!
Эскиз алдыңғы қадамда табылғанмен бірдей, тек біз негізгі циклды өзгерттік. Сүзгілерді қосу үшін btAudio:: createFilter әдісін қолданамыз. Бұл әдіс 3 дәлелді қабылдайды. Біріншісі - сүзгі каскадтарының саны. Сүзгі каскадтарының саны сүзгінің тәртібінің жартысына тең. 6 -ретті сүзгі үшін бірінші аргумент 3 болуы керек. 8 -ші ретті сүзгі үшін 4 болады. Екінші аргумент - сүзгінің шектелуі. Мен бұл деректерді шынымен әсер ету үшін 1000 Гц етіп қойдым. Соңында, біз үшінші аргументі бар файл түрін көрсетеміз. Бұл жоғары өту сүзгісі үшін жоғары өту және төмен өту сүзгісі үшін төменгі өту болуы керек. Төмендегі сценарий бұл жиілікті 1000 Гц пен 2 Гц аралығында ауыстырады. Деректерге әсер етуді есту керек.
#қосу
btAudio аудио = 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, жоғары өту); кешіктіру (5000); audio.createFilter (3, 2, жоғары өту); }
Төмен өтетін сүзгілер
Төмен өту сүзгілері жоғары жиілікті сүзгілерге қарама -қарсы әрекет етеді және белгілі бір жиіліктен жоғары жиілікті басады. Оларды жоғары өту сүзгілері сияқты қолдануға болады, тек үшінші аргументті төменгі өту деңгейіне ауыстыруды талап етеді. Төмендегі эскиз үшін мен 2000 Гц пен 20000 Гц арасындағы төмен өту жиілігін ауыстырамын. Сіз айырмашылықты естисіз деп үміттенемін. Төмен өткізу сүзгісі 2000 Гц жиілікте болғанда, ол қатты дыбыс шығаруы керек.
#қосу
btAudio аудио = 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, төменгі өту); кешіктіру (5000); audio.createFilter (3, 20000, төменгі өту); }
8 -қадам: DSP - динамикалық ауқымды қысу
Фон
Динамикалық диапазонды сығу - бұл дыбыс қаттылығын теңестіруге тырысатын сигналды өңдеу әдісі. Ол белгілі бір табалдырықтан жоғары дыбыстарды дыбыс деңгейіне дейін қысады, содан кейін екеуін де күшейтеді. Нәтиже - тыңдау тәжірибесі. Бұл өте қатты фондық музыка мен өте тыныш вокалмен шоуды көргенде өте пайдалы болды. Бұл жағдайда дыбыс деңгейін жоғарылату көмектеспеді, себебі бұл тек фондық музыканы күшейте түсті. Динамикалық диапазонды қысу арқылы мен қатты фондық музыканы вокал деңгейіне дейін төмендетіп, бәрін қайтадан дұрыс ести аламын.
Кодекс
Динамикалық диапазонды қысу тек дыбыс деңгейін төмендетуді немесе сигналды шектеуді қамтымайды. Бұл одан да ақылды. Егер сіз дыбыс деңгейін төмендетсеңіз, тыныш дыбыстар да, қатты дыбыстар да азаяды. Мұның бір жолы - сигналды шектеу, бірақ бұл қатты бұрмалауға әкеледі. Динамикалық диапазонды қысу, егер сіз сигналды шектеу/қиып алу қажет болса, бұрмалануды азайту үшін жұмсақ шекті деңгей мен сүзгілеуді қамтиды. Нәтиже - бұл қатты дыбыстар бұрмаланбастан «қиылған» және тыныш дыбыстар сол күйінде қалатын сигнал. Төмендегі код қысудың үш түрлі деңгейін ауыстырады.
- Бұрмаланумен қысу
- Бұрмаланбай қысу
- Сығымдау жоқ
#қосу
btAudio аудио = 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); кешіктіру (5000); audio.compress (30, 0.0001, 0.1, 10, 10, 0); кешіктіру (5000); audio.decompress (); }
Динамикалық диапазонды қысу күрделі және btAudio:: compress әдістерінде көптеген параметрлер бар. Мен оларды осында (ретімен) түсіндіруге тырысамын:
- Табалдырық - дыбыстың төмендеу деңгейі (децибелмен өлшенеді)
- Шабуыл уақыты - шекті мәннен асқаннан кейін компрессордың жұмыс істей бастайтын уақыты
- Шығару уақыты - компрессордың жұмысын тоқтатуға кететін уақыт.
- Редукция коэффициенті - дыбыс сығылатын фактор.
- Тізе ені - компрессор ішінара жұмыс істейтін табалдырықтың ені (децибелмен) (табиғи дыбыс).
- Сығудан кейін сигналға қосылған кіріс (децибел) (көлемді ұлғайту/азайту)
Сығымдауды бірінші рет қолданғанда өте естілетін бұрмалау - бұл табалдырық өте төмен болғандықтан және шабуыл уақыты да, босату уақыты да өте қысқа болғандықтан, табалдырықты қатаң ұстауға әкеледі. Бұл екінші жағдайда шығару уақытын ұлғайту арқылы анық шешіледі. Бұл компрессордың біркелкі жұмыс істеуіне әкеледі. Мұнда мен тек 1 параметрді өзгерту дыбысқа қалай әсер ететінін көрсеттім. Енді әр түрлі параметрлермен тәжірибе жасау сіздің кезегіңіз.
Іске асыру (сиқырлы математика - міндетті емес)
Мен динамикалық диапазонды қысуды қарапайым түрде енгізу қиын екенін білдім. Алгоритм 16 биттік бүтін санды децибелге түрлендіруді және сигналды өңдегеннен кейін оны 16 биттік бүтін санға қайта өзгертуді қажет етеді. Мен стерео деректерді өңдеу үшін кодтың бір жолы 10 микросекундты алатынын байқадым. 44.1 КГц жиілігіндегі стерео дыбыс DSP үшін тек 11,3 микросекунд қалдыратындықтан, бұл өте баяу … Алайда, Netwon -дің бөлінген айырмашылығына негізделген шағын іздеу кестесін (400 байт) және интерполяция процедурасын біріктіру арқылы біз 0,2 микросекундта шамамен 17 бит дәлдікке қол жеткізе аламыз.. Мен шын қызығушылар үшін барлық математикадан тұратын pdf құжатын тіркедім. Бұл күрделі, сізге ескертілді!
9 -қадам: Wi -Fi интерфейсі
Енді сізде нақты уақыттағы DSP жұмыс істей алатын Bluetooth қабылдағышы бар. Өкінішке орай, егер сіз DSP параметрлерінің кез келгенін өзгерткіңіз келсе, HiFi -ден ажыратып, жаңа эскиз жүктеп, содан кейін қайта қосылыңыз. Бұл сұмдық. Мұны түзету үшін мен компьютерге қайта қосылмай барлық DSP параметрлерін өңдеуге болатын веб -сервер жасадым. Веб -серверді пайдалану нобайы төменде.
#қосу
#clude btAudio audio = btAudio («ESP_Speaker»); webDSP веб; void setup () {Serial.begin (115200); audio.begin (); int bck = 26; int ws = 27; int dout = 25; audio. I2S (bck, dout, ws); // WiFi идентификаторы мен парольмен ауыстырыңыз const char* ssid = «SSID»; const char* password = «PASSWORD»; web.begin (ssid, құпия сөз және аудио); } void loop () {web._server.handleClient (); }
Код ESP32 -ге веб -бетке кіру үшін пайдалануға болатын IP мекенжайын тағайындайды. Бұл кодты бірінші рет іске қосқанда, оны компьютерге бекіту керек. Осылайша сіз сериялық мониторда ESP32 -ге тағайындалған IP -адресті көре аласыз. Егер сіз осы веб -бетке кіргіңіз келсе, осы IP мекенжайды кез келген веб -шолғышқа енгізіңіз (хромда тексерілген).
Біз қазір Bluetooth мен I2S қосудың әдісімен таныс болуымыз керек. Негізгі айырмашылық - webDSP объектісін пайдалану. Бұл нысан Wifi SSID мен құпия сөзді аргумент ретінде, сонымен қатар btAudio нысанына көрсеткіш ретінде қабылдайды. Негізгі циклде біз үнемі webDSP объектісін веб -беттен кіретін деректерді тыңдаймыз, содан кейін DSP параметрлерін жаңартамыз. Соңғы нүкте ретінде Bluetooth мен Wifi екеуі де ESP32 -де бір радионы қолданатынын атап өткен жөн. Бұл веб -параққа параметрлерді енгізгеннен бастап ақпарат ESP32 жеткенше 10 секунд күтуге тура келетінін білдіреді.
10 -қадам: Болашаққа жоспарлар
Сізге бұл нұсқаулық ұнады деп үміттенеміз, енді Bluetooth -ге аудио және DSP HiFi -ге қосылды. Дегенмен, менің ойымша, бұл жобада өсуге көп мүмкіндік бар және мен болашақта алатын кейбір бағыттарды көрсеткім келді.
- Wifi дыбыс ағынын қосыңыз (ең жақсы дыбыс сапасы үшін)
- Дауыстық командаларды қосу үшін I2S микрофонын пайдаланыңыз
- WiFi басқарылатын эквалайзер жасау
- Әдемі етіп жасаңыз (нан тақтасы керемет өнім дизайнын айқайламайды)
Мен осы идеяларды жүзеге асыра бастағанда, мен көбірек нұсқаулықтар жасаймын. Немесе бұл мүмкіндікті басқа біреу қолдана алады. Бұл бәрін ашық көзге айналдырудың қуанышы!
Ұсынылған:
Дыбыстық қондырғы + 2 өткізгіш тақта = 24 енгізу цифрлық құралы: 7 қадам
Дыбыс қондырғысы + 2 өткізгіш тақталар = 24 енгізу цифрлық құралы: Бұл жоба CEISMC (Ғылым, математика және есептеулерді біріктіретін білім орталығы) жұмысым бойынша жұмыс жобасының құжаттамасы болып табылады. CEISMC - Атланта, Джорджия штатындағы Georgia Tech білім беру қанаты. Мен қатысатын бағдарлама " GoS
GSM және Bluetooth негізіндегі материалдарды өңдеу роботы: 7 қадам
GSM және Bluetooth негізіндегі материалдарды өңдеуге арналған робот: GSM (SMS) және Bluetooth басқарылатын сымсыз робот ” - бұл қысқа хабарлама қызметі түріндегі командалар/ нұсқаулар жиынтығын алуға қабілетті және қажетті әрекеттерді орындай алатын робот. Біз арнайы модемді/мобильді қолданамыз
Bluetooth және IMU Tactigon тақтасымен - өңдеу: 7 қадам
Tactigon тақтасы бар Bluetooth және IMU - Өңдеу: Бұл мақалалар сериясы қарапайым қимыл контроллерін жасау үшін Tactigon интеграцияланған сенсорлары мен байланыс интерфейстерін қалай қолдану керектігін түсіндіреді. Бұл жерде GitHub -те қол жетімді. Бұл мақалада біз қалай үйренетін боламыз. қарапайым пайдалану үшін
Температура мен ылғалдылықтың дисплейі және Arduino және өңдеу көмегімен деректерді жинау: 13 қадам (суреттермен)
Температура мен ылғалдылықтың дисплейі және Arduino мен өңдеумен мәліметтерді жинау: Кіріспе: Бұл жоба Arduino тақтасын, сенсорды (DHT11), Windows компьютерін және өңдеу (тегін жүктелетін) бағдарламасын пайдаланып, температураны, ылғалдылықты сандық және бар диаграмма формасы, уақыт пен күнді көрсету және санау уақытын іске қосу
Биоэлектрлік сигналдарды жазу: ЭКГ және жүрек соғу жиілігі мониторы: 7 қадам
Биоэлектрлік сигналдарды жазу: ЭКГ және жүрек соғу жиілігі мониторы: ЕСКЕРТУ: Бұл медициналық құрылғы емес. Бұл тек имитациялық сигналдарды қолдану арқылы білім беру мақсатында. Егер бұл тізбекті ЭКГ-ны нақты өлшеу үшін қолданатын болсаңыз, онда тізбек пен тізбек арасындағы байланыс дұрыс оқшаулауды қолданып жатқанын тексеріңіз