Мазмуну:

Bluetooth аудио жана санариптик сигналдарды иштетүү: Arduino алкагы: 10 кадам
Bluetooth аудио жана санариптик сигналдарды иштетүү: Arduino алкагы: 10 кадам

Video: Bluetooth аудио жана санариптик сигналдарды иштетүү: Arduino алкагы: 10 кадам

Video: Bluetooth аудио жана санариптик сигналдарды иштетүү: Arduino алкагы: 10 кадам
Video: Мыктынын мыктысы???. Радио приемник TECSUN PL680 FULL REVIEW!!! #tecsun 2024, Ноябрь
Anonim
Image
Image
Bluetooth аудио жана санариптик сигналдарды иштетүү: Arduino Framework
Bluetooth аудио жана санариптик сигналдарды иштетүү: Arduino Framework

Жыйынтык

Мен Bluetooth жөнүндө ойлогондо мен музыка жөнүндө ойлоном, бирок тилекке каршы көпчүлүк микроконтроллерлер Bluetooth аркылуу музыканы ойной алышпайт. Raspberry Pi алат, бирок бул компьютер. Мен Bluetooth аркылуу аудио ойнотуу үчүн микроконтроллерлер үчүн Arduino негизин түзгүм келет. Микроконтроллердин булчуңдарын толук ийкемдөө үчүн, мен аудиого реалдуу убакытта Digital Signal Processing (DSP) кошуп жатам (жогорку өткөрмө чыпкалоо, аз өткөрмө чыпкалоо жана динамикалык диапазонду кысуу). Үстүндөгү алча үчүн мен DSPди зымсыз конфигурациялоо үчүн колдонула турган веб -серверди кошом. Камтылган видео Bluetooth аудионун негиздерин көрсөтүп турат. Бул мага веб-серверди колдонуп, жогорку ылдамдыктагы чыпкалоону, аз өтмө чыпкалоону жана динамикалык диапазонду кыскартууну көрсөтөт. Динамикалык диапазонду кысууну биринчи жолу туура эмес тандоолордун мисалы катары атайылап бурмалоону пайда кылат. Экинчи мисал бул бурмалоону жок кылат.

Бул долбоор үчүн ESP32 - тандалган микроконтроллер. Бул 10 фунт стерлингден аз жана ADCs, DACs, Wifi, Bluetooth Low Energy, Bluetooth Classic жана 240MHz эки ядролук процессор менен толукталган. Борттогу DAC техникалык жактан аудиону ойното алат, бирок сонун болбойт. Анын ордуна, мен Adafruit I2S стерео декодерин колдонуп, линияны чыгарам. Бул сигналды учурдагы HiFi тутумуңузга зымсыз аудиону заматта кошуу үчүн каалаган HiFi системасына оңой эле жөнөтсө болот.

Жабдуулар

Үмүттөнөбүз, көпчүлүк өндүрүүчүлөрдүн табакчасы, секиргичтери, USB кабели, электр менен камсыздоочу ширеткичтери болот жана ESP32 менен стерео декодерге 15 фунт сарптоого туура келет. Болбосо, керектүү бардык бөлүктөр төмөндө келтирилген.

  • An ESP32 - ESP32 -PICO -KIT жана TinyPicoдо сыналган - £ 9.50/ £ 24
  • Adafruit I2S стерео декодери - £ 5.51
  • Нан тактасы - £ 3- £ 5 ар бири
  • Өткөргүч зымдар - 3 фунт
  • Зымдуу гарнитура/Hi -Fi системасы - £££
  • Push Headers же Soldering Iron - £ 2.10 / £ 30
  • Микро USB кабели - £ 2.10/ £ 3
  • 3.5mm RCA туташтыргычы/ 3.5мм джекке
  • USB Power Supply - £ 5

1 -кадам: Курулуш - Нан тактасы

Курулуш - Нан тактасы
Курулуш - Нан тактасы

Эгерде сиз ESP32-PICO-KITти сатып алган болсоңуз, анда эч кандай түйрөөчтөрдү ширетүүнүн кажети жок, анткени ал алдын ала ширетилген. Жөн эле нан тактасына кой.

2 -кадам: Курулуш - Баскычтарды басыңыз/ширетүү

Курулуш - Push Headers/soldering
Курулуш - Push Headers/soldering
Курулуш - Push Headers/soldering
Курулуш - Push Headers/soldering

Эгерде сизде ширетүүчү үтүк болсо, Adafruit веб -сайтындагы нускамаларга ылайык, стерео декодерге казыктарды ээрчиңиз. Жазуу учурунда менин ширетүүчү кулпумда болгон жумушта болчу. Мен убактылуу ширетүүчү үчүн акча төлөгүм келбеди, ошондуктан пиморониден бир нече түртүүчү баштарды кесип алдым. Мен аларды стерео декодерге туура келиши үчүн кесип алдым. Бул эң жакшы чечим эмес (жана аталыштар кандайча колдонулганы үчүн эмес), бирок бул ширетүүчү темирге эң арзан альтернатива. Кесилген башты нан тактасына салыңыз. Декодер үчүн сизге 6 казыктан турган 1 сап гана керек. Сиз туруктуулук үчүн башка тарапка дагы алты кошо аласыз, бирок бул бул прототип системасы үчүн керек эмес. Аталыштарды тешүү үчүн казыктар vin, 3vo, gnd, wsel, din жана bclk.

3 -кадам: Курулуш - Power Pins

Курулуш - Power Pins
Курулуш - Power Pins

Стерео декодерди түрткүчтөрдүн башына (vin, 3vo, gnd, wsel, din жана bclk pin) коюп, аларды бекем бириктириңиз. Дагы, бул идеалдуу түрдө ширетүүчү менен жасалышы керек, бирок мен импровизациялашым керек болчу. Сиз бул нускамада бардык зымдар көк экенин байкайсыз. Менде секирүүчү зымдар жок болгондуктан, 1 узун зымды майда бөлүктөргө бөлдүм. Ошондой эле, мен түстүү сокурмун жана чынында зымдын түсүнө маани бербейм. Күч казыктары төмөнкүчө тиркелет:

3v3 (ESP32) -> стерео декодер боюнча винге

gnd (ESP32) -> стерео декодер боюнча gnd

4 -кадам: Курулуш - I2S зымдары

Курулуш - I2S зымдары
Курулуш - I2S зымдары

Bluetooth аудиосун ESP32ден стерео декодерге жөнөтүү үчүн I2S деп аталган санариптик байланыштын ыкмасын колдонобуз. Стерео декодер бул санарип сигналды алып, аны динамикке же HiFiге туташтыра турган аналогдук сигналга айландырат. I2Sке 3 зым гана талап кылынат жана түшүнүү абдан жөнөкөй. Бит сааты (bclk) сызыгы жогору жана төмөн бурулуп, жаңы бит өткөрүлүп берилгенин билдирет. Берилиштер линиясы (доут) жогору же төмөн бурулуп, ал биттин мааниси 0 же 1 экенин көрсөтөт жана тандоо линиясы (wsel) солго же оңго каналдын берилип жатканын көрсөтүү үчүн жогору же төмөнгө бурулат. Ар бир микроконтроллер I2Sти колдобойт, бирок ESP32де 2 I2S линиясы бар. Бул бул долбоор үчүн ачык тандоо кылат.

Электр өткөргүчтөрү төмөнкүчө:

27 (ESP32) -> wsel (Стерео декодер)

25 (ESP32) -> дин (Стерео декодер)

26 (ESP32) -> bclk (стерео декодер)

5 -кадам: BtAudio китепканасын орнотуу

BtAudio китепканасын орнотуу
BtAudio китепканасын орнотуу
BtAudio китепканасын орнотуу
BtAudio китепканасын орнотуу

Эгерде сизде алар жок болсо, Arduino IDE жана ESP32 үчүн Arduino өзөгүн орнотуңуз. Сиз аларды орноткондон кийин менин Github баракчама кирип, репозиторийди жүктөп алыңыз. Arduino IDE ичинде Sketch >> Китепкананы кошуу >> астында ". ZIP китепканасын кошууну" тандаңыз. Андан кийин жүктөлүп алынган ZIP файлын тандаңыз. Бул менин btAudio китепканамды Arduino китепканаларыңызга кошушу керек. Китепкананы колдонуу үчүн Arduino эскизине тиешелүү башты кошушуңуз керек. Муну кийинки кадамда көрөсүз.

6 -кадам: BtAudio китепканасын колдонуу

BtAudio китепканасын колдонуу
BtAudio китепканасын колдонуу
BtAudio китепканасын колдонуу
BtAudio китепканасын колдонуу

Орнотулгандан кийин, ESP32 компьютериңизге микро USB аркылуу туташтырыңыз, андан кийин стерео декодерди 3.5мм зым менен динамикке туташтырыңыз. Эскизди жүктөөдөн мурун Arduino редакторунда кээ бир нерселерди өзгөртүү керек болот. Тактаңызды тандагандан кийин, Tools >> Partition Scheme бөлүмүнүн схемасын түзөтүп, же "No 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 loop () {}

Эскизди жалпысынан 3 баскычка бөлүүгө болот:

  1. ESP32 "Bluetooth атын" орноткон глобалдык btAudio объектисин түзүңүз
  2. BtAudio:: begin методу менен аудио алуу үчүн ESP32ди конфигурациялаңыз
  3. BtAudio:: I2S ыкмасы менен I2S казыктарын коюңуз.

Бул программалык камсыздоо жагында! Эми сиз ESP32 менен Bluetooth байланышын баштооңуз керек. Телефонуңуздан/ноутбугуңуздан/MP3 ойноткучуңуздан жаңы түзмөктөрдү издеңиз жана "ESP_Speaker" пайда болот. Баары иштеп жатканына кубангандан кийин (музыка ойнойт) ESP32ди компьютериңизден ажыратсаңыз болот. Аны USB кубаты менен кубаттаңыз жана ал сиз жүктөгөн акыркы кодду эстеп калат. Ошентип, сиз ESP32ди HiFi системаңыздын артында түбөлүккө жашыруун калтыра аласыз.

7 -кадам: DSP - Чыпкалоо

Санариптик сигналды иштетүү менен алуучуну кеңейтүү

Эгерде сиз бардык кадамдарды аткарсаңыз (жана мен эч нерсе калтырган эмесмин), анда сиздин HiFi системаңыз үчүн толугу менен иштеп жаткан Bluetooth кабылдагычы бар. Бул салкын болгону менен, ал микроконтроллерди чегине жеткирбейт. ESP32де 240 МГцте иштеген эки өзөк бар. Бул бул долбоор жөн эле алуучу эмес экенин билдирет. Бул санариптик сигнал процессору (DSP) менен Bluetooth кабыл алуучу болуу мүмкүнчүлүгүнө ээ. DSPs негизинен реалдуу убакытта сигнал боюнча математикалык операцияларды аткарышат. Бир пайдалуу операция Digital Filtering деп аталат. Бул процесс жогорку же төмөн өтүү чыпкасын колдонуп жатканыңызга жараша, белгилүү бир чектик жыштыктын астындагы же андан жогору жыштыктарды начарлатат.

Жогорку өтмө чыпкалар

Жогорку өткөрмө чыпкалар белгилүү бир диапазондогу жыштыктарды начарлатат. 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, lowpass); кечигүү (5000); audio.createFilter (3, 20000, төмөн өтүү); }

8 -кадам: DSP - Динамикалык диапазондогу кысуу

Фон

Динамикалык диапазонду кысуу - бул сигналды иштетүү ыкмасы, ал үндүн катуулугун бир калыпка келтирүүгө аракет кылат. Бул белгилүү бир босогодон жогору турган катуу үндөрдү басат, анан үнсүздөрдүн деңгээлине чейин, анан кааласа экөөнү тең күчөтөт. Натыйжада угуу тажрыйбасы бир топ жакшырат. Бул абдан катуу фон музыкасы жана абдан тынч вокалы бар шоуну көрүп жатканда абдан пайдалуу болду. Бул учурда, жөн гана үндү жогорулатуу жардам берген жок, анткени бул фон музыкасын гана күчөттү. Динамикалык диапазонду кысуу менен мен катуу фон музыкасын вокалдын деңгээлине чейин түшүрүп, баарын кайра туура угам.

Кодекс

Динамикалык диапазонду кысуу сигналдын көлөмүн азайтууну же чектөөнү камтыбайт. Бул бир аз акылдуу. Эгерде сиз үн көлөмүн төмөндөтсөңүз, тынч үндөр да, катуу үндөр да азаят. Мунун бир жолу - бул сигналды чектөө, бирок бул катуу бурмалоого алып келет. Динамикалык диапазонду кысуу жумшак босоголордун жана чыпкалоонун айкалышын камтыйт, эгерде сиз сигналды чектөө/кыскартууңуз керек болгон бурмалоону азайтуу үчүн. Жыйынтык - бул катуу үндөр бурмаланбастан "кыркылып", тынч үндөр кандай болсо ошол бойдон калтырылган сигнал. Төмөндөгү код үч түрдүү кысуу деңгээлин алмаштырат.

  1. Бузуу менен кысуу
  2. Бузулуусуз кысуу
  3. Кысуу жок

#кошуу

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:: press ыкмалары көптөгөн параметрлерге ээ. Мен аларды бул жерде (ирети менен) түшүндүрүүгө аракет кылам:

  1. Босого - Аудио азайган деңгээл (децибел менен өлчөнөт)
  2. Чабуул убактысы - босогодон ашкандан кийин компрессордун иштей башташы
  3. Бошотуу убактысы - компрессордун иштебей калышы үчүн керектүү убакыт.
  4. Редукция коэффициенти - аудио кысылган фактор.
  5. Тизе туурасы - компрессор жарым -жартылай иштеген босогонун тегереги (децибел менен) (табигый үн).
  6. Кысуудан кийин сигналга кошулган киреше (децибелдер) (көлөмүн көбөйтүү/азайтуу)

Кысууну биринчи колдонгондо абдан уккулуктуу бурмалоо, анткени босого өтө төмөн жана чабуул убактысы да, бошотуу убактысы да өтө кыска болгондуктан натыйжалуу катуу босого жүрүм -турумуна алып келет. Бул экинчи учурда чыгаруу убактысын көбөйтүү менен ачык чечилет. Бул негизинен компрессордун бир кыйла жумшак иштешине себеп болот. Бул жерде мен 1 параметрди өзгөртүү аудиого кескин таасир этерин гана көрсөттүм. Эми сизде ар кандай параметрлер менен эксперимент жүргүзүү.

Ишке ашыруу (сыйкырдуу математика - милдеттүү эмес)

Динамикалык диапазонду кысууну жөнөкөйлүк менен ишке ашыруу кыйын экенин байкадым. Алгоритм 16 биттик бүтүн санды децибелге айландырууну жана сигналды иштеткенден кийин аны кайра 16 биттик бүтүн санга айландырууну талап кылат. Мен коддун бир сабы стерео маалыматтарды иштетүү үчүн 10 микросекунд алып жатканын байкадым. 44.1 КГцте алынган стерео аудио DSP үчүн болгону 11.3 микросекундду калтырат, бул кабыл алынгыс жай … Бирок, чакан издөө столун (400 байт) жана Netwonдун бөлүнгөн айырмачылыгына негизделген интерполяциялык процедураны айкалыштыруу менен биз 0,2 микросекундда дээрлик 17 бит тактыкты ала алабыз.. Мен чындап кызыккандар үчүн бардык математика менен pdf документти тиркеп койдум. Бул татаал, сизге эскертүү берилди!

9 -кадам: Wifi интерфейси

Wifi интерфейси
Wifi интерфейси
Wifi интерфейси
Wifi интерфейси

Эми сизде реалдуу убакытта 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 көзөмөлдөгөн эквалайзерди иштеп чыгуу
  • Аны сулуу кылып жасаңыз (нандын үстөлү сонун продукт дизайнын кыйкырбайт)

Мен бул идеяларды ишке ашырууга келгенде, мен көбүрөөк көрсөтмөлөрдү жасайм. Же, балким, башка бирөө бул функцияларды ишке ашырат. Баарын ачык булак кылуу кубанычы!

Сунушталууда: