Mundarija:

Karnay yoki Flyback transformatorida PWM yordamida Arduino yordamida qo'shiqlarni (MP3) ijro etish: 6 qadam (rasmlar bilan)
Karnay yoki Flyback transformatorida PWM yordamida Arduino yordamida qo'shiqlarni (MP3) ijro etish: 6 qadam (rasmlar bilan)

Video: Karnay yoki Flyback transformatorida PWM yordamida Arduino yordamida qo'shiqlarni (MP3) ijro etish: 6 qadam (rasmlar bilan)

Video: Karnay yoki Flyback transformatorida PWM yordamida Arduino yordamida qo'shiqlarni (MP3) ijro etish: 6 qadam (rasmlar bilan)
Video: Этот простой трюк превращает старые КЛЛ-лампы в потрясающие индукционные нагреватели 2024, Iyul
Anonim
Qo'shiqlarni (MP3) Arduino yordamida dinamik yoki Flyback transformatorida PWM yordamida ijro etish
Qo'shiqlarni (MP3) Arduino yordamida dinamik yoki Flyback transformatorida PWM yordamida ijro etish
Qo'shiqlarni (MP3) Arduino yordamida dinamik yoki Flyback transformatorida PWM yordamida ijro etish
Qo'shiqlarni (MP3) Arduino yordamida dinamik yoki Flyback transformatorida PWM yordamida ijro etish
Qo'shiqlarni (MP3) Arduino yordamida dinamik yoki Flyback transformatorida PWM yordamida ijro etish
Qo'shiqlarni (MP3) Arduino yordamida dinamik yoki Flyback transformatorida PWM yordamida ijro etish
Qo'shiqlarni (MP3) Arduino yordamida dinamik yoki Flyback transformatorida PWM yordamida ijro etish
Qo'shiqlarni (MP3) Arduino yordamida dinamik yoki Flyback transformatorida PWM yordamida ijro etish

Salom bolalar, Bu mening birinchi ko'rsatmam, umid qilamanki sizga yoqadi !!

Asosan, men ushbu loyihada Arduino va noutbuk o'rtasidagi ketma -ket aloqadan foydalanib, musiqiy ma'lumotlarni noutbukdan Arduino -ga uzatdim. Ma'lumotlarni PWM signali sifatida ijro etish uchun Arduino TIMERS -dan foydalanish.

Shuni aytib o'tmoqchimanki, bu loyiha yangi boshlanuvchilar uchun emas !!!.

Aslida, bu loyiha eng uzun loyihalardan biri edi, chunki biz uning ishlashi uchun ko'p ishlarni bajarishimiz kerak.

DIQQAT

Men bu ko'rsatmaning ikkinchi qismini qildim, bu osonroq va ishlash uchun minimal qiyinchiliklarga muhtoj

Ikkinchi qismga havola (eng oson).

1 -qadam: Ushbu loyihaga kerak bo'lgan narsalar (talablar)

1. Arduino kengashi (biz har qanday taxtadan (328, 2560) foydalanishimiz mumkin, ya'ni Mega, Uno, Mini va hk.

2. Linux bilan kompyuter yoki noutbuk (men Fedora 29 dan foydalanganman) yoki Linux bilan Live USB

3. Breadboard yoki Perfboard

4. Simlarni ulash

5. TC4420 (Mosfet haydovchisi yoki shunga o'xshash)

6. Mosfet Power (N yoki P kanali, iltimos, shunga mos ravishda sim o'tkazing) (men N-kanalni ishlatganman)

7. Karnay yoki Flyback transformatori (Ha, siz uni to'g'ri o'qidingiz !!)

8. Mos keladigan quvvat manbai (0-12V) (men o'z ATX quvvat manbaidan foydalanganman)

9. Isitgich (men eski kompyuterimdan qutqarib qoldim)

10. Windows va ruchkali diskli kompyuter.

Har bir komponentning batafsil ishlashini va ushbu loyihani bilish uchun keyingi bosqichni o'qing.

Men bu ko'rsatmaning ikkinchi qismini qildim, bu osonroq va ishlash uchun minimal qiyinchiliklarga muhtoj. Ikkinchi bo'limga havola (eng oson).

2 -qadam: Ish printsipini tushunish

Ahh !! bu bo'limni o'qish va yozishning eng uzun qismi ham zerikarli.

Birinchidan, biz bu narsaning aslida qanday ishlashini ko'rib chiqishimiz kerak.

biz bu erda nima qilmoqchimiz, avvalo, biz MP3 qo'shig'imizni WAV fayliga va bu faylni havoladagi dastur yordamida C nomli faylga aylantirmoqdamiz. Bu C kodi aslida 8-bitli (nima uchun 8-bitli? O'qing) ma'lumotlar namunalarini o'z ichiga oladi, biz Arduino-dan foydalanib namuna olish tezligimizga muvofiq belgilangan tezlikda yoki tezlikda o'ynashimiz kerak.

Audio signal nazariyasi.

Namuna olish tezligi yoki bit tezligi nima ekanligini bilmaganlar uchun:-

Namuna olish tezligi, biz bir soniyada o'ynaymiz (odatda Hz yoki KHzda o'lchanadi).

Batafsil ma'lumot uchun:-Bu erni bosing

Standart namuna olish tezligi 44100 Gts (eng yaxshi sifat), 32000 Gts, 22050 Gts va boshqalar

demak, to'lqin hosil qilish uchun 44100 ta namuna bir soniyada ishlatiladi.

Ya'ni, har bir namunani 1/44100 = 22.67 uS oralig'ida o'ynash kerak.

Keyin ovoz signalining bit chuqurligi keladi, bu odatda raqamli audioda tovush qanchalik aniq ifodalanganligini ko'rsatadi. Bit chuqurligi qanchalik baland bo'lsa, raqamli tovush aniqroq bo'ladi.

Ammo Arduino yoki 16 MGts chastotali boshqa har qanday mikro-nazorat moslamasi bizni faqat 8 bitgacha ishlatishga imkon beradi. Buning sababini tushuntirib beraman.

1028-sahifada 328p ma'lumotlar sahifasida formula mavjud:- ma'lumotlar jadvali

Men nima uchun bu formuladan foydalanayotganimni batafsil aytmayman.

Signal chastotasi = Soat signali / N x (1+TOP)

Soat signali = 16 MGts (Arduino platasi)

N = prescaler (1 - loyihamiz uchun qiymat)

TOP = qiymati 0 dan 2^16 gacha (16-bitli taymer hisoblagichi uchun) (loyihamiz uchun 255 = 2^8 (8-bit))

biz Signal = 62,5 kHz chastotasining qiymatini olamiz

Bu shuni anglatadiki, tashuvchi to'lqin chastotasi Bit chuqurligiga bog'liq.

Aytaylik, agar biz TOP qiymatidan foydalansak = 2^16 = 65536 (ya'ni bit chuqurligi 16-bit)

keyin biz signal = 244 Hz chastotasining qiymatini olamiz (biz foydalana olmaymiz)

OKK … Shunday qilib, "Audio signallar qanday ishlaydi" degan nazariya etarli, shuning uchun loyihaga qaytamiz.

Qo'shiq uchun yaratilgan C kodi Arduino-ga ko'chirilishi mumkin va uni ijro etish mumkin, lekin biz 8000 Gts chastotali 3 sekundgacha audio ijro etishga cheklanganmiz. Chunki bu C kodi matnli fayl va shuning uchun siqilmagan, balki ochiladi. Va u juda ko'p joy oladi. (masalan, 44 soniyali 43 soniyali ovozli C kodli fayl, 1 KGts namunalari 23 MB gacha bo'sh joy oladi). Va bizning Arduino Mega bizga taxminan 256 Kb bo'sh joy beradi.

Shunday qilib, biz Arduino yordamida qo'shiqlarni qanday ijro etamiz. Bu mumkin emas. Bu ko'rsatma soxta. Xavotir olmang, o'quvchilar, Shuning uchun biz Arduino -ga audio ma'lumotlarni yuborish uchun juda yuqori tezlikda (1 Mbit/s gacha) Arduino o'rtasida qandaydir aloqa turidan foydalanishimiz kerak.

Lekin buning uchun bizga qancha tezlik kerak?

Javob sekundiga 44000 baytni tashkil etadi, bu 44000*8 = 325 000 Bit/s dan yuqori tezlikni bildiradi.

Bu ma'lumotlarni Arduino -ga yuborish uchun bizga katta hajmli boshqa periferiya kerak. Va bu Linux bilan ishlaydigan kompyuterimiz bo'ladi (nima uchun Linux bilan kompyuter ??? bu haqda ko'proq bilish uchun iltimos o'qing.)

Ahaa … Demak, biz ketma -ket aloqadan foydalanishimiz mumkin … Lekin kuting … ketma -ket 115200 Bits/s gacha tezlikda bo'lishi mumkin, ya'ni (325000/115200 = 3), bu talab qilinganidan uch baravar sekin.

Yo'q, do'stlarim, unday emas. Biz tezlikni yoki Baud tezligini 500 000 Bit/s tezlikda ishlatamiz, simi 20-30 sm gacha, bu talab qilinganidan 1,5 barobar tezroq.

Nega Linux emas, Windows emas ???

Shunday qilib, biz namunalarni shaxsiy kompyuterimiz bilan 1/44100 = 22.67 uS oralig'ida (yuqorida ham ko'rsatilgan) yuborishimiz kerak.

Xo'sh, buni qanday dasturlashimiz mumkin ???

Biz uyqu funktsiyasidan foydalangan holda ma'lumotlar baytini ketma -ket yuborish uchun C ++ dan foydalanishimiz mumkin

nanosleep, Chrono va boshqalar va boshqalar.

uchun (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

LEKIN WINDOWSda ishlamaydi, Linuxda ham shunday ishlamadi (lekin men o'z kodimga biriktirilgan boshqa usulni topdim.)

Chunki biz derazalar yordamida bunday tafsilotlarga erisha olmaymiz. Bunday aniqlikka erishish uchun sizga Linux kerak.

Linuxda ham topilgan muammolar …

biz Linux yordamida bunday tafsilotlarga erishishimiz mumkin, lekin men 22uS uchun dasturimni uxlash uchun bunday funktsiyani topmadim.

Nanosleep, Chrono nanosleep va boshqalar kabi funktsiyalar ishlamaydi, chunki ular faqat 100 AQShdan ko'proq uyquni ta'minlaydi. Lekin menga aynan 22 AQSh kerak edi. Men Google -ning har bir sahifasini o'rganib chiqdim va C/C ++ da mavjud bo'lgan barcha mumkin bo'lgan funktsiyalarni sinab ko'rdim, lekin men uchun hech narsa ishlamadi. Keyin men o'z vazifamni o'ylab topdim, bu men uchun haqiqiy joziba sifatida ishladi.

Va mening kodim hozirda aniq 1uS yoki undan yuqori uyquni ta'minlaydi !!!!

Shunday qilib, biz qiyin qismini bosib o'tdik, qolganlari oson …

Va biz Arduino yordamida ma'lum bir chastotali va tashuvchi to'lqin chastotasi bilan PWM signalini ishlab chiqarishni xohlaymiz.

Shunday qilib, biz PWM yaratish uchun Arduino-ning TIMERS deb nomlanganidan foydalanishimiz kerak. Aytgancha, men bu haqda batafsil ma'lumot bermayman, chunki siz TIMERS mavzusida ko'plab darsliklarni topasiz, lekin agar topa olmasangiz, quyida izoh qoldiring.

Men Arduino pinlarini saqlash uchun TC4420 Mosfet drayveridan foydalandim, chunki ular ba'zan MOSFETni haydash uchun juda ko'p oqim etkazib bera olmaydi.

Shunday qilib, bu loyihaning deyarli nazariyasi edi, endi biz sxemani ko'rishimiz mumkin.

DIQQAT DIQQAT DIQQAT

Aslida, bu loyiha qasddan juda qiyin bo'lgan (nima uchun buni aytaman), noPC talab qiladigan boshqa usul bor, faqat Arduino va spiker mening keyingi o'qitiladigan joyimda.

*Loyihaning asosiy maqsadi - ketma -ket aloqadan foydalanish, uning kuchini bilish va kompyuterni vazifalarni aniq vaqt oralig'ida bajarishga qanday dasturlash mumkinligini bilish.

3 -qadam: sxematik

Sxematik
Sxematik

Sxemada ko'rsatilganidek, barcha komponentlarni ulang. Shunday qilib, sizda ikkita variant bor:-

1. Karnayni ulang (5V ga ulangan)

2. Flyback transformatorini ulang (12V ga ulangan)

Men ikkalasini ham sinab ko'rdim. Va ikkalasi ham juda yaxshi ishlaydi.

Ogohlantirishlar:-

*Men Flyback transformatorini ehtiyotkorlik bilan ishlatishni maslahat beraman, chunki u xavfli bo'lishi mumkin, chunki u yuqori kuchlanish hosil qiladi. Va men hech qanday zarar ko'rmayman*.

4 -qadam: Audacity yordamida MP3ni WAV faylga aylantirish

Audacity yordamida MP3ni WAV faylga aylantirish
Audacity yordamida MP3ni WAV faylga aylantirish
Audacity yordamida MP3ni WAV faylga aylantirish
Audacity yordamida MP3ni WAV faylga aylantirish
Audacity yordamida MP3ni WAV faylga aylantirish
Audacity yordamida MP3ni WAV faylga aylantirish

Shunday qilib, birinchi navbatda, dasturiy ta'minotni yuklab oling

1. Audacity, Google -dan qidirish va yuklab olish

2. WAV faylini C kodiga aylantirish uchun WAVToCode deb nomlangan oyna dasturini yuklab oling

Siz WAVToCode dasturidan foydalanishni ushbu havoladan o'rganishingiz va uni havoladan yuklab olishingiz mumkin.

Men ikkala dasturni qanday ishlatishni batafsil ko'rsataman.

Iltimos, ushbu ko'rsatma bilan bog'langan fotosuratlarni ko'ring.

Ushbu bosqichda biz MP3ni Wav -ga o'zgartiramiz. (Suratlarga rioya qiling, loyiha tezligi 44100Hz bo'lishi kerak)

Keyingi bosqichda biz wav faylini C kodiga o'zgartiramiz.

5-qadam: WAV-dan C-kodga o'tish

W-dan C-kodgacha
W-dan C-kodgacha
W-dan C-kodgacha
W-dan C-kodgacha
W-dan C-kodgacha
W-dan C-kodgacha

Fotosuratlarni kuzatib boring.

Oxirgi ikkita rasmga qarang, o'zgarishlar bir xil bo'lishi kerak, bosh harflar katta va kichik bo'lishi kerak, aks holda kompilyatsiya paytida sintaksik xato bo'ladi.

(Ko'ryapsizmi, 1min 41s qo'shiq 23mb bo'sh joyni egallagan.)

Qo'shiq nomi va uzunligini mos ravishda qo'shiqning nomi va davomiyligi bilan o'zgartiring.

Va C kod faylini saqlang.

Buni Arduino bilan o'ynashni xohlagan barcha qo'shiqlarga qiling

6 -qadam: Yakuniy faylni yarating va Linuxni yoqing

Oxirgi faylni yarating va Linuxni yoqing
Oxirgi faylni yarating va Linuxni yoqing
Oxirgi faylni yarating va Linuxni yoqing
Oxirgi faylni yarating va Linuxni yoqing
Oxirgi faylni yarating va Linuxni yoqing
Oxirgi faylni yarating va Linuxni yoqing

O'zingiz aylantirgan barcha qo'shiqlarni ushbu havolada keltirilgan Faylga qo'shing.

Va rasmlarni kuzatib boring.

Kodni men biriktirgan Arduino -ga yuklang.

C kod fayl nomlarini eslang.

Oxirida Fedora Live USB -ni yoki boshqasini yoqing va gcc kompilyatorini o'rnating, so'ngra papkadagi kompilyatsiya ko'rsatmalaridan foydalanib dasturni kompilyatsiya qiling va ishga tushiring.

Oxir -oqibat, siz Speaker yoki Flyback qo'shiqlarini tinglashingiz mumkin bo'ladi.

Ushbu ko'rsatmalarni o'qiganingiz uchun tashakkur va agar sizga yoqsa, sharh bering.

DIQQAT Men bu ko'rsatmaning ikkinchi qismini qildim, bu osonroq va ishlash uchun minimal qiyinchiliklarga muhtoj. Ikkinchi qismga havola (eng oson)

Tavsiya: