Mundarija:
- 1 -qadam: qismlar ro'yxati
- 2 -qadam: O'chirish diagrammasi
- 3 -qadam: nazariya
- 4 -qadam: Dizayn bo'yicha eslatmalar
- 5 -qadam: dasturiy ta'minot
- 6 -qadam: operatsiya
- 7 -qadam: Xulosa
Video: Binary Tree Morse Decoder: 7 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
Bu ko'rsatma Arduino Uno R3 yordamida Morz kodini qanday dekodlashni tushuntiradi.
Avtomatik yuborish tezligiga moslashtiruvchi dekoder, morsni bir daqiqada kamida 80 so'zgacha dekodlash imkoniyatiga ega.
Kiruvchi kod Arduino Serial monitorida (yoki o'rnatilgan bo'lsa TFT ekranida) matn sifatida ko'rsatiladi.
Agar siz mors yuborishni mashq qilmoqchi bo'lsangiz, osilator qo'shilgan.
Dekoderning xususiyatlari:
- 320 x 240 TFT displeyli modul [1]
- kiruvchi signallarni ajratish uchun Goertzel raqamli tarmoqli o'tkazgich filtri.
- signalni dekodlash uchun "Ikkilik morz daraxti"
- avtomatik tezlikni kuzatish
- morz mashq qilganda eshitiladigan ovoz
- kiruvchi va chiquvchi matn ko'rsatiladi.
Quyidagi belgilar va belgilar tan olinadi:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
TFT displeyini hisobga olmaganda, morse dekoder qalqonining taxminiy narxi 25 dollarni tashkil qiladi. [1]
Rasmlar
- Muqova fotosurati to'liq yig'ilgan birlikni ko'rsatadi
- Videoda dekoderning ishi ko'rsatilgan
Eslatmalar
[1]
- TFT displey moduli ixtiyoriy, chunki barcha matn Arduino "Serial monitor" ga yuboriladi.
- TFT moduli mening ko'rsatmali https://www.instructables.com/id/Arduino-TFT-Grap… da tasvirlangan.
1 -qadam: qismlar ro'yxati
Quyidagi qismlar https://www.aliexpress.com/ saytidan olingan.
Arduino UNO R3 uchun 2,54 mm balandlikdagi bitta prototipli qalqon
Quyidagi qismlar mahalliy darajada olingan:
- Faqat bitta LM358 dual opamp
- Faqat 1 ta yashil LED
- Faqat 1 ta LED klip
- 1 ta faqat elektret mikrofon kapsulasi
- 1 faqat oddiy ochiladigan tugma
- 1 ta 8 pinli DIP soket
- 2 ta atigi 330 ohmli rezistorlar
- 2 ta 2K2 rezistor
- 5 ta 10K ohmli rezistorlar
- 2 ta 56K ohmli rezistorlar
- 2 ta faqat 1 uF kondansatör
- 1 ta faqat 10 uF kondansatör
Quyidagi qismlar ixtiyoriy:
- Faqat 2,2 dyuymli TFT SPI LCD displeyli modul 240*320 ILI9341, SD karta uyasi bilan Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
- Morze tugmasi / tugma
- 1 faqat BC548 NPN tranzistor
- 1 faqat 1 dyuymli karnay
- Faqat 33K ohmli qarshilik
- 1 dona faqat 3,5 mm mono vilka (mors kaliti uchun)
- Faqat 3,5 mm mono soket (mors kaliti uchun)
- 3 ta faqat 9 mm M3 diametrli neylon ajratgichlar
- 1 ta faqat 130 x 68 x 44 mm ABS plastik quti
- 5 ta 2-pinli to'g'ri burchakli ulagichlar
Morse dekoder qalqonining taxminiy narxi, ixtiyoriy TFT -displeydan tashqari, 25 dollarni tashkil qiladi. [1]
Eslatmalar
[1]
Ixtiyoriy 320 x 240 TFT displeyli modul uchun ehtiyot qismlar ro'yxati
[2]
Agar siz jo'natuvchidan foydalanmoqchi bo'lsangiz, mors kaliti yoki mustahkam tugmacha kerak.
2 -qadam: O'chirish diagrammasi
Rasmlar
1 -rasmda Morse dekoderining sxemasi ko'rsatilgan. 330 ohmli qarshilik Mors tugmachasi bilan ketma -ket tasodifan erga qisqa tutashuvda D4 chiqish oqimini cheklaydi… uning qiymatini oshirish karnaydan ovoz chiqarilishini kamaytiradi. Shuning uchun men uni qalqonga qo'shmaganman, balki sozlashni osonlashtirish uchun uni to'g'ridan-to'g'ri mors-kalit uyasiga ulaganman
2 -rasmda mos keladigan qalqon ko'rsatilgan. Qalqon-bu menga ko'rsatiladigan https://www.instructables.com/id/Arduino-TFT-Grap…, men unga mikrofon kuchaytirgichi va ohang osilatorini qo'shdim. [1]
3 -rasmda Arduino -ga o'rnatilgan tugallangan qalqon ko'rsatilgan. Agar matnni Arduino "Serial monitor" da ko'rish kerak bo'lsa, boshqa komponentlar talab qilinmaydi
4 -rasmda dekoder qisman qutiga joylashtirilgan. Qopqoqda displeyni ko'rish uchun teshik kesilgan. Karnay va mikrofon korpusga mahkam yopishtirilgan. Karnayni o'rnatishdan oldin qopqog'ida bir nechta karnay teshiklarini burang. Qopqoqning markaziy rozetkasi kengaytma mikrofoni uchun mo'ljallangan … bu holda dekoder dinamikga yaqin joylashtirilishi kerak, bu har doim ham mumkin emas
5 -rasm TFT ekranini ko'rsatadi. Displey qirralariga qora elektr lenta yopishtirilgan … bu tasma yorug'lik oqishini oldini oladi va displey bilan qopqog'idagi teshik orasidagi har qanday noto'g'ri chiziqni yashiradi
Muhim
[1]
Katta USB ulagichi bo'lgan Arduinolar USB ulagichi va Arduino qalqoni o'rtasida elektr lenta qatlamini talab qiladi. Tasodifan qisqa chiziqlar tasmasiz mumkin, chunki bo'sh joy kichik. Kichik ulagichlari bo'lgan Arduinos uchun lenta kerak emas
3 -qadam: nazariya
Har bir morse kodi harfi "nuqta" va "chiziq" deb nomlangan qisqa va uzoq muddatli ohanglardan iborat.
- nuqta (.) uzunligi 1 birlik
- chiziq (_) uzunligi 3 birlik
- harf elementlari orasidagi bo'shliq 1 birlik
- harflar orasidagi bo'shliq - 3 birlik
- so'zlar orasidagi bo'shliq - 7 birlik
Biz kiruvchi ohangni nuqta yoki chiziqcha ekanligini aniqlashimiz mumkin, uning davomiyligini mos yozuvlar ohangining uzunligi 2 birlik bilan solishtirish orqali.
- nuqta 2 birlikdan kam
- chiziq 2 birlikdan katta
Kiruvchi nuqta va chiziq chizig'ini dekodlashning ikkita aniq usuli bor:
- chiziqli qidiruv
- ikkilik daraxt (dichotomic search deb ham ataladi)
Chiziqli qidiruv
Umumiy usullardan biri - belgilar majmuasini va ularga mos keladigan morz naqshlarini yaratishdir. Masalan, quyidagi belgilarning har biri quyidagicha saqlanadi:
- A. _
- B _…
- C _. _.
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Har bir harfga 6 ta hujayra kerak bo'ladi: harfning o'zi uchun 1 ta, (.) Va (_) harflari uchun 5 ta. Buni amalga oshirish uchun bizga 216 katakdan iborat harflar [36] [6] kerak. Foydalanilmaydigan hujayralar odatda nol yoki bo'sh joy bilan to'ldiriladi.
Kiruvchi nuqta va chiziqlarni dekodlash uchun har bir kiruvchi harfning nuqta/chiziq chizig'ini mos yozuvlar belgilarimiz bilan solishtirishimiz kerak.
Bu usul ishlayotgan bo'lsa -da, bu juda sekin.
Aytaylik, bizda 26 ta harf ('A',.. 'Z') va raqamlar ('0',… '9') saqlangan, keyin biz har biri 5 tagacha qidiruvga ega bo'lgan 36 ta qidiruvni bajarishimiz kerak. bu "9" raqamini hal qilish uchun jami 36*5 = 180 ta qidiruv.
Ikkilik daraxt
Ikkilik qidiruv ancha tezroq, chunki hech qanday qidirish talab qilinmaydi.
Chiziqli qidirishdan farqli o'laroq, ikkilik daraxt faqat belgilarni saqlaydi, ya'ni massiv kattaligi kichikroq bo'ladi.
Men o'qiy olishim uchun ikkilik daraxtimni (1 -rasm) ikkiga ajratdim (2 va 3 -rasmlar).
Belgini topish uchun biz har safar nuqta eshitganimizda ko'rsatgichni chapga siljitamiz va chiziqni har eshitganimizda ko'rsatgichni o'ngga siljitamiz. Har bir harakatdan so'ng, biz keyingi harakat uchun ko'rsatgich masofasini ikki baravar kamaytiramiz, shuning uchun ikkilik daraxt nomi berilgan.
"9" harfini (tire, tire, tire, tire, nuqta) dekodlash uchun o'ng tomonga 5 ta … 4 va chapga 1 ta harakat qilish kerak, bu ko'rsatgichni to'g'ridan -to'g'ri "9" ustidan qoldiradi.
Beshta harakat 180 ta qidiruvdan ancha tezroq !!!!!
Ikkilik belgilar qatori ham kichikroq … 26 ta harf va 10 ta raqam faqat 64 x 1 qatorli qatorni talab qiladi. Men tinish belgilarini ochish uchun 128 ta belgidan iborat qator yaratishni tanladim.
4 -qadam: Dizayn bo'yicha eslatmalar
Morsni aralashuvchi signallar mavjudligida dekodlash qiyin. Kiruvchi signallarni rad etish kerak … buning uchun qandaydir filtr kerak.
Ko'p imkoniyatlar mavjud:
- Faza bilan qulflangan halqalar
- Induktor-kondansatör filtrlari
- Rezistor-kondansatkichli faol filtrlar
- Fast Fourier Transform yoki Goertzel filtri kabi raqamli signallarni qayta ishlash.
1, 2, 3 -usullar katta hajmli tashqi komponentlarni talab qiladi.
4 -usul tashqi komponentlarni talab qilmaydi … chastotalar matematik algoritmlar yordamida aniqlanadi.
Tez Fourier transformatsiyasi (FFT)
Murakkab to'lqin shaklida ohang borligini aniqlashning bir usuli - Fast Fourier transformasidan foydalanish
1 -rasmda FFT (Fast Fourier Transform) audio spektrini "axlat qutilari" ga qanday ajratish ko'rsatilgan.
2 -rasmda FFT "qutilari" signalga qanday javob berishi ko'rsatilgan … bu holda 800 Gts. Agar 1500Hz chastotali ikkinchi signal mavjud bo'lsa, biz ikkita javobni ko'rardik: biri 800Hzda, ikkinchisi 1500Hzda.
Nazariy jihatdan, ma'lum bir FFT chastotali qutisining chiqish darajasini kuzatish orqali morz kodi dekoderini tuzish mumkin … ko'p sonli nuqta yoki tire borligini bildiradi … oz qismi signalni bildirmaydi.
Mors kodining bunday dekoderini 2 -rasmdagi "bin 6" ni kuzatish orqali amalga oshirish mumkin edi, lekin bu yondashuvda bir qancha xatoliklar bor:
- Biz faqat bitta chastota qutisini xohlaymiz … qolganlari behuda hisoblar
- chastota qutilari qiziqish chastotasida aniq ko'rinmasligi mumkin
- bu nisbatan sekin (Arduino loopiga 20 mS ()
Boshqa usul - Goertzel filtridan foydalanish.
Goertzel filtri
Goertzel filtri FFT -ga o'xshaydi, lekin faqat bitta chastota qutisi bor.
Photo3 Goertzel filtrining alohida ovozli bosqichlarga chastotali javobini ko'rsatadi.
4 -rasm - xuddi shu chastota diapazonida bir xil filtrni tozalash.
Men Goertzel algoritmi bilan "ketishga" qaror qildim:
- Goertzel algoritmidan foydalangan Arduino loop () vaqti Arduino "fix_FFT" kutubxonasi yordamida FFT yechimi uchun 14mS (millisekund) ga nisbatan 20mS (millisekund) ga teng edi.
- Goertzel tarmoqli o'tkazgich filtrining markaziy chastotasini o'rnatish oson.
- Tarmoqli kengligi taxminan 190 Gts.
5 -rasmda ohang aniqlanganda 900 gigagertsli Goertzel filtrining raqamli chiqishi ko'rsatilgan. Men ohang chegarasini 4000 ga qo'ydim … 4000 dan yuqori qiymatlar ohangni bildiradi.
Nazariy jihatdan, siz filtrni qulay tinglash chastotasiga sozlashingiz kerak. Afsuski, mening 1 dyuymli monitorimning ovoz chiqishi 900 gigagertsdan pastga tez tushib ketadi. Muammolarni oldini olish uchun men 950 Gts chastotali filtrdan foydalanaman. Muqobil filtr chastotalarini hisoblash uchun kerakli formulalar mening kodim sarlavhasida topilgan.
Dekodlash
Nuqtalar va chiziqlarni dekodlash birinchi qarashda ko'rinadigan darajada oson emas.
Mukammal morse quyidagicha ta'riflanadi:
- nuqta = 1 birlik
- harf ichidagi bo'shliqlar = 1 birlik
- chiziq = 3 birlik
- harflar orasidagi bo'shliq = 3 birlik
- so'zlar orasidagi bo'shliq = 7 birlik
Mukammal morzni dekodlash uchun bizga mos yozuvlar ohangining davomiyligi 2 birlik kerak
- nuqta <2 birlik
- elementlar maydoni <2 birlik
- chiziq> 2 birlik
- harfi _ bo'sh joy> 2 birlik
- word_space> 6 birlik (ya'ni 3 ta mos yozuvlar birligi)
Bu mashina morsi uchun ishlaydi, lekin "haqiqiy dunyoda":
- yuborish tezligi har xil
- har bir nuqtaning davomiyligi turlicha
- har bir chiziqning davomiyligi turlicha
- E, I, S, H, 5 harflari faqat nuqta davomiyligiga o'rtacha nuqtalarni o'z ichiga oladi
- T, M, O, 0 harflari faqat chiziq chizig'ining davomiyligiga to'g'ri keladigan chiziqlarni o'z ichiga oladi
- so'z bo'shliqlari kelmasligi mumkin
- so'nishi dekoder tiklanishi kerak bo'lgan xatolarni keltirib chiqaradi.
- shovqin tufayli buzilgan signallar
Faqat nuqta va chiziqlardan iborat harflar qisman hal qilinadi, agar:
biz aniq nuqta va to'g'ri chiziqni olmagunimizcha, ma'lumotnomaning davomiyligini hisoblaymiz. Men 200 millisekunddan foydalanaman, agar yuborish tezligi 6 WPM (daqiqada so'zlar) va 17 WPM orasida bo'lsa. Agar siz mors tilini o'rganayotgan bo'lsangiz, bu qiymatni oshirishingiz kerak bo'lishi mumkin. Tezlik jadvali dasturiy ta'minotga kiritilgan
Tezlikning o'zgarishi hal qilinadi, agar:
- biz har bir nuqta va har bir chiziq bo'yicha o'rtacha harakatni bajaramiz
- har bir belgi olinganidan keyin mos yozuvlar davomiyligini qayta hisoblang
So'z bo'shliqlari va kelmagan bo'shliqlar hal qilinadi, agar:
- oxirgi oxirgi (ohangdan ohanggacha) o'tish vaqtini eslang,
- har bir harfdan keyin algoritmni qayta ishga tushiring;
- keyingi vaqtni (ohangga ohangsiz) o'tishni kutayotganda o'tgan vaqtni hisoblang va
- agar 6 ta vaqt birligi oshib ketgan bo'lsa, bo'sh joy qo'shing.
Morz osilatori
Men dastlab ba'zi Piezo buzzerlarini sinab ko'rdim, lekin topdim:
- chastota aniqlandi
- chiqish chastotasi uzoq vaqt tinglash uchun juda yuqori edi
- piezolar Goertzel o'tish chizig'idan chiqib ketishga moyil edi
Keyin men 750 gigagertsli kvadrat to'lqinli akustik transduserni boshqarishga harakat qildim, lekin uning rezonansi borligini aniqladim, u 1 va 3 -chi harmonikalarni filtrladi. 6-rasmda 750 gigagertsli kvadrat to'lqinli mikrofon kuchaytirgichining chiqishi ko'rsatilgan … biz 5-garmonikni ko'ramiz !!!
Keyin men kichkina karnaydan foydalanardim. 7 -rasm mikrofonning 750 gigagertsli kvadrat to'lqinini ko'rsatadi, u kichik karnayga yuborilgan … bu safar biz 5 -garmonikni emas, balki asosiyini ko'ramiz. Goertzel filtri har qanday harmonikani hisobga olmaydi.
Eslatmalar
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
5 -qadam: dasturiy ta'minot
O'rnatish
- Qo'shilgan faylni yuklab oling MorseCodeDecoder.ino [1]
- Ushbu fayl tarkibini yangi Arduino eskiziga nusxalash
- Eskizni "MorseCodeDecoder" sifatida saqlang (tirnoqsiz)
- Eskizni kompilyatsiya qiling va Arduino -ga yuklang
Dasturiy ta'minot yangilanishi 2020 yil 23 -iyul
"MorseCodeDecoder6.ino" biriktirilgan faylga quyidagi funktsiyalar qo'shildi.
- "Aniq Blackman" oynasi [2]
- "shovqin_blanker"
Moslashish:
- LED miltillay boshlaguncha qabul qiluvchining ovozini oshiring va keyin o'chiring
- Endi LEDni milt -milt milt -milt keladigan miltillab yonib ketguncha qabul qilgichni sozlang
- Noise_blanker 8 mS gacha bo'lgan shovqinlarni e'tiborsiz qoldiradigan qilib o'rnatildi.
- Shovqin chegarasini Debug = true ni sozlash va Serial Plotterni kuzatish orqali sozlash mumkin
Eslatma
[1]
Agar siz ham matnni ko'rishni xohlasangiz, Arduino seriyali monitorini 115200 bodga o'rnating.
[2]
- 1 -rasm … Blekmenning aniq oynasi
- 2 -rasm … Aniq Blackman oynasi bo'lmagan Goertzel filtri
- Rasm 3,,, Goertzel filtri aniq Blackman oynasi bilan
6 -qadam: operatsiya
Dekoder
Mors tinglanayotganda jihozni karnay yoniga qo'ying.
- Elektret mikrofon kapsulasi karnaydan mors signalini oladi.
- Keyin elektrod mikrofonining chiqishi 647 marta (56dB) kuchaytiriladi va Arduino -ga qayta ishlash uchun yuboriladi.
- Goertzel raqamli tarmoqli o'tkazgichli filtri shovqindan mors signalini chiqaradi.
- Dekodlash ikkilik daraxt yordamida amalga oshiriladi.
- Dekoder chiqishi 320 x 240 pikselli TFT displeyda matn sifatida ko'rsatiladi. Agar siz displeydan foydalanishni xohlamasangiz, u sizning Arduino "Serial Monitor" ga ham yuboriladi.
Morse yuboruvchisi
Mors yuboruvchi ham kiritilgan. Bu sizga mors yuborish amaliyotini bajarishga imkon beradi va quyidagicha ishlaydi:
- Arduino pin 4 -da doimiy ovozli signal paydo bo'ladi.
- Biz bu ohangni mors-tugmachasini har bosganimizda dekoderning karnay orqali eshitamiz.
- Ohang Goertzel filtri bilan bir xil chastotada o'rnatiladi, bu dekoderni haqiqiy morzni tinglashiga aldanib qoladi … siz yuborgan har bir narsa displeyda bosma matn sifatida paydo bo'ladi.
Sizning yuborishingiz yaxshilanadi, chunki dekoder quyidagi kabi keng tarqalgan xatolarni oladi:
- belgilar orasidagi bo'shliq juda ko'p. (misol: Q MA sifatida belgilangan)
- harflar orasida juda ko'p bo'sh joy (masalan: NO W sifatida bosilgan)
- noto'g'ri kod
7 -qadam: Xulosa
Dekoder
Bu yo'riqnomada Morse kodini bosma matnga o'zgartiradigan Morse dekoderini qanday qilish kerakligi tasvirlangan.
- Dekoder morsni kamida 80 WPMgacha (daqiqada so'zlar) hal qila oladi.
- Dekoder avtomatik ravishda qabul qilingan yuborish tezligidagi o'zgarishlarni kuzatadi.
- Matn Serial monitoringizda (yoki o'rnatilgan bo'lsa, 320 x 240 TFT displeyli modulda) ko'rsatiladi [1]
Yuboruvchi
Mors yuboruvchi ham kiritilgan
- Yuboruvchi sizga mors yuborish sifatini yaxshilashga yordam beradi.
- Dekoder siz yuborgan narsaning to'g'riligini tasdiqlaydi
Qismlarning narxi
Morse dekoder qalqonining taxminiy narxi, ixtiyoriy TFT displeyidan tashqari, 25 dollarni tashkil qiladi.
Boshqa ko'rsatmalarni ko'rish uchun shu erni bosing.
Audio Challenge 2020 ikkinchi mukofoti
Tavsiya:
Ultimate Binary Watch: 12 qadam (rasmlar bilan)
Ultimate Binary Watch: Men yaqinda ikkilik soatlar kontseptsiyasi bilan tanishdim va o'zim uchun soat qura olamanmi yoki yo'qmi, deb tadqiq qila boshladim. Biroq, men bir vaqtning o'zida funktsional va zamonaviy bo'lgan mavjud dizaynni topa olmadim. Shunday qilib, men qaror qildim
5 $ PCB TAKVIMI BINARY SAATLI: 7 qadam (rasmlar bilan)
5 $ PCB TAKVIMI BINARY SAATLI: Salom! Men bu tenglikni taqvimi va ikkilik soatini Eagle CAD yordamida yaratdim. Men ATMEGA328P MCU (Arduino -dan) va 9x9 LED matritsasidan foydalandim. Mening taxtamning o'lchamlari 8 sm x 10 sm (3.14 dyuym x 3.34 dyuym). Bu juda kichik, lekin birinchi: Eagle CADning bepul versiyasi 80 sm^2 ga ruxsat beradi
Arduino Yun Morse generatori: 4 qadam (rasmlar bilan)
Arduino Yun Morse generatori: Siz hech qachon do'stingiz bilan gaplasha olmaydigan barda bo'lgansiz, chunki musiqa juda baland edi. Xo'sh, endi siz undan Morze kodida pivo so'rashingiz mumkin! Qani boshladik
Arduino Binary Clock - 3D bosma: 5 qadam (rasmlar bilan)
Arduino ikkilik soati - 3D bosma: Men ofis stolida uzoq vaqtdan beri ikkilik soatlarga qarayman, lekin ular juda qimmat va / yoki juda ko'p funktsiyalarga ega emas. Shunday qilib, men uning o'rniga birini yaratishga qaror qildim. Soat yasashda e'tiborga olish kerak bo'lgan bir nuqta, Arduino / Atmega328
Morse Code Touch Keyer/Avtokoder: 12 qadam (rasmlar bilan)
Morse Code Touch Keyer/Autocoder: Men bu loyihani bir muddat oldin qurganman, lekin kimdir bu g'oyadan foydalanishi mumkin deb o'ylaganman. Men xam radiochi odamman, va men nafaqaga chiqqanimda, vaqtimni biroz kechroq boshladim. Men hozirda umumiy guvohnomam bor va telefondan foydalanaman (vo