Mündəricat:
- Addım 1: Parça siyahısı
- Addım 2: Dövrə Şeması
- Addım 3: nəzəriyyə
- Addım 4: Dizayn Qeydləri
- Addım 5: Proqram təminatı
- Addım 6: Əməliyyat
- Addım 7: Xülasə
Video: İkili Ağacı Mors Dekoder: 7 Adım (Şəkillərlə birlikdə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
Bu təlimat, bir Arduino Uno R3 istifadə edərək Mors Kodunu necə deşifr etməyi izah edir.
Göndərmə sürətini avtomatik tənzimləyən dekoder, dəqiqədə ən az 80 sözə qədər morsun kodunu aça bilir.
Gələn kod Arduino Serial Monitorunuzda (və ya varsa TFT ekranında) mətn olaraq göstərilir.
Mors göndərməklə məşğul olmaq istəsəniz bir ton osilator daxil edilmişdir.
Dekoderin xüsusiyyətləri:
- 320 x 240 TFT ekran modulu [1]
- istenmeyen siqnalları ayırmaq üçün Goertzel rəqəmsal bant filtri.
- siqnalın deşifr edilməsi üçün "İkili Mors Ağacı"
- avtomatik sürət izləmə
- morse tətbiq edərkən səsli bir çıxış
- həm gələn, həm də gedən mətn göstərilir.
Aşağıdakı simvollar və simvollar tanınır:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
TFT ekranından çıxarılan mors dekoder qalxanının təxmini dəyəri 25 dollardır. [1]
Şəkillər
- Qapaq fotoşəkili tam yığılmış bir qurğunu göstərir
- Videoda dekoderin işlədiyi görünür
Qeydlər
[1]
- TFT ekran modulu isteğe bağlıdır, çünki bütün mətn Arduino "Serial Monitorunuza" göndərilir.
- TFT modulu mənim göstərişli
Addım 1: Parça siyahısı
Aşağıdakı hissələr https://www.aliexpress.com/ saytından əldə edilmişdir.
Arduino UNO R3, 2.54mm Pitch üçün yalnız 1 prototip qalxan
Aşağıdakı hissələr yerli olaraq alındı:
- 1 yalnız LM358 ikili opamp
- 1 yalnız yaşıl LED
- Yalnız 1 LED klipi
- Yalnız 1 elektret mikrofon kapsulu
- 1 yalnız normal olaraq açılan düymə
- 1 yalnız 8 pinli DIP yuvası
- 2 cəmi 330 ohm rezistor
- 2 yalnız 2K2 rezistor
- 5 yalnız 10K ohm rezistor
- Yalnız 56K ohm müqavimət
- 2 yalnız 1 uF kondansatör
- 1 yalnız 10 uF kondansatör
Aşağıdakı hissələr isteğe bağlıdır:
- 1 Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC üçün SD Kart Yuvası olan yalnız 2.2 İnç TFT SPI LCD Ekran Modulu 240*320 ILI9341 [1]
- Mors düyməsi / düymə
- 1 yalnız BC548 NPN tranzistor
- 1 yalnız 1 düymlük dinamik
- 1 yalnız 33K ohm müqavimət
- 1 ədəd yalnız 3,5 mm mono fiş (mors düyməsi üçün)
- 1 yalnız 3,5 mm mono priz (mors düyməsi üçün)
- 3 ədəd yalnız 9 mm M3 ölçülü neylon boşluqlar
- 1 ədəd yalnız 130 x 68 x 44 mm ABS plastik qutu
- 5 yalnız 2 pinli sağ açılı bağlayıcılar
İsteğe bağlı TFT ekranı çıxılmadan, mors dekoder qalxanının təxmini dəyəri 25 dollardır. [1]
Qeydlər
[1]
İsteğe bağlı 320 x 240 TFT ekran modulu üçün hissələr siyahısı mənim göstərişli
[2]
Göndəricidən istifadə etmək istəyirsinizsə, mors düyməsi və ya möhkəm bir düymə tələb olunur.
Addım 2: Dövrə Şeması
Şəkillər
Şəkil 1, mors dekoderinin dövrə diaqramını göstərir. 330 ohm rezistor, mors açarı ilə birlikdə yerə təsadüfən qısaqalma halında D4 çıxış cərəyanını məhdudlaşdırır… dəyərinin artması dinamikdən gələn səs çıxışını azaldır. Bu səbəbdən onu qalxana əlavə etmədim, ancaq tənzimlənmənin asan olması üçün birbaşa mors açarına bağladım
Şəkil 2 uyğun bir qalxan göstərir. Qalxan, mikrofon gücləndiricisini və ton osilatorunu əlavə etdiyim təlimatlı https://www.instructables.com/id/Arduino-TFT-Grap…. [1]
Şəkil 3, bir Arduinoya bağlanmış tamamlanmış qalxanı göstərir. Mətn Arduino "Serial Monitorunuzda" görünəcəksə, digər komponentlərə ehtiyac yoxdur
Şəkil 4, dekoderin qismən qutulu olduğunu göstərir. Qapaqda ekrana baxmaq üçün bir çuxur kəsilmişdir. Dinamik və mikrofon çantaya yapışdırılıb. Dinamik quraşdırmadan əvvəl qapaqda bir neçə delik açın. Qapağın ortasındakı yuva uzatma mikrofonu üçündür … bu olmadan dekoder həmişə mümkün olmayan dinamikə yaxın yerləşdirilməlidir
Şəkil 5 TFT ekranını göstərir. Ekranın kənarlarına qara elektrik lenti yapışdırılıb … bu lent işıq sızıntısının qarşısını alır və ekranla qapağın açılması arasındakı hər hansı bir uyğunsuzluğu maskalayır
Əhəmiyyətli
[1]
Böyük bir USB konnektoru olan Arduinos, USB konnektoru ilə Arduino qalxanı arasında bir elektrik lenti qatına ehtiyac duyur. Boşluq kiçik olduğu üçün təsadüfən şort bant olmadan mümkündür. Kiçik bağlayıcıları olan Arduinos üçün bant tələb olunmur
Addım 3: nəzəriyyə
Hər bir morse kodu hərfi, "nöqtələr" və "tire" adlanan qısa və uzun müddətli tonlardan ibarətdir.
- bir nöqtə (.) 1 vahid uzunluqdadır
- tire (_) 3 ədəd uzunluqdadır
- hərf elementləri arasındakı boşluq 1 ədəddir
- hərflər arasındakı boşluq 3 ədəddir
- sözlər arasındakı boşluq 7 vahiddir
Gələn tonun nöqtə və ya tire olub olmadığını, müddətini 2 ədəd uzunluqlu istinad tonu ilə müqayisə edərək müəyyən edə bilərik.
- bir nöqtə 2 ədəddən azdır
- tire 2 ədəddən çoxdur
Daxil olan nöqtə və tire nümunələrini deşifr etmək üçün iki fərqli fərqli üsul var:
- xətti axtarış
- ikili ağac (ikiqat axtarış kimi də tanınır)
Xətti Axtarış
Ümumi bir üsul, bir sıra simvollar və onların uyğun morz nümunələri yaratmaqdır. Məsələn, aşağıdakı simvolların hər biri belə qeyd olunacaq:
- A. _
- B _…
- C _. _.
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Hər bir hərf üçün hərfin özü üçün 6,… 1 və (.) Və (_) hərfləri üçün 5 hüceyrə lazımdır. Bunu etmək üçün cəmi 216 xanadan ibarət hərflərə [36] [6] ehtiyac var. İstifadə edilməmiş hüceyrələr ümumiyyətlə sıfır və ya boşluqla doldurulur.
Gələn nöqtələri və tireləri deşifr etmək üçün hər gələn məktubun nöqtə/tire modelini istinad xarakter nümunələrimizlə müqayisə etməliyik.
Bu üsul işləsə də son dərəcə ləngdir.
Deyək ki, 26 hərfimiz var ('A',.. 'Z') və rəqəmlər ('0',… '9') bir sıra içərisində saxlanılır, sonra hər biri 5-ə qədər alt axtarış olan 36 axtarış etməliyik. cəmi 36*5 = 180 '9' rəqəminin kodunu açmaq üçün edilən axtarışlardır.
İkili ağac
Axtarış tələb olunmadığı üçün ikili axtarış daha sürətli olur.
Həm xarakterin, həm də morz nümunələrinin saxlanılmasını tələb edən xətti axtarışdan fərqli olaraq, ikili ağac yalnız simvolları saxlayır, bu da massivin daha kiçik olması deməkdir.
Daha oxunaqlı olması üçün ikili ağacımı (şəkil1) iki yarıya bölmüşəm (şəkillər 2 və 3).
Bir xarakter tapmaq üçün hər dəfə bir nöqtə eşitdiyimiz zaman bir göstərici sola, hər dəfə tire eşitdikdə göstərici sağa hərəkət edirik. Hər hərəkətdən sonra bir sonrakı hərəkət üçün göstərici məsafəsini yarıya endiririk … buna görə də ikili ağac adı verilir.
'9' hərfini deşifrə etmək üçün (tire, tire, tire, tire, nöqtə) 5 sağa doğru hərəkət etmək lazımdır … 4 sağa və 1 işarəni birbaşa '9' üzərində qoyur.
Beş hərəkət 180 axtarışdan xeyli sürətlidir !!!!!
İkili simvol dizisi də kiçikdir … 26 hərf və 10 rəqəm yalnız 64 x 1 sətirlik bir sıra tələb edir. Durğu işarələrini deşifr edə bilmək üçün 128 simvollu bir sıra yaratmağı seçdim.
Addım 4: Dizayn Qeydləri
Morsun müdaxilə edən siqnalların iştirakı ilə kodunu açmaq çətindir. İstenmeyen siqnallar rədd edilməlidir … bunun üçün bir növ filtr lazımdır.
Bir çox ehtimal var:
- Faza kilidli döngələr
- İndüktör-kondansatör filtrləri
- Rezistor-kondansatör aktiv filtrlər
- Fast Fourier Transform və ya Goertzel filtri kimi rəqəmsal siqnal emalı.
Metodlar 1, 2, 3 həcmli xarici komponentlər tələb edir.
Metod 4 heç bir xarici komponent tələb etmir … tezliklər riyazi alqoritmlərdən istifadə etməklə aşkarlanır.
Sürətli Fourier Dönüşümü (FFT)
Mürəkkəb bir dalğa formasında bir tonun varlığını aşkar etməyin bir yolu Fast Fourier Transformunu istifadə etməkdir
Şəkil 1, FFT (Fast Fourier Transform) audio spektrini "zibil qutularına" necə böldüyünü göstərir.
Şəkil 2, FFT "qutularının" bir siqnala necə cavab verdiyini göstərir … bu halda 800Hz. 1500Hz deyən ikinci bir siqnal olsaydı, iki cavab görərdik … biri 800Hz -də, digəri 1500Hz -də.
Teorik olaraq, müəyyən bir FFT tezlik qutusunun çıxış səviyyəsini izləməklə bir mors kodu deşifratoru hazırlana bilər … çox sayda nöqtə və ya tire varlığını ifadə edir… az sayı heç bir siqnalı ifadə etmir.
Belə bir mors kodu kod çözücü, fotoşəkil 2 -də "bin 6" izlənilərək edilə bilər, lakin bu yanaşmanın bir sıra səhvləri var:
- yalnız bir tezlik qutusu istəyirik … qalanları boş hesablamalardır
- tezlik qutuları tam olaraq faiz tezliyində görünə bilməz
- nisbətən yavaşdır (Arduino döngəsi başına 20mS ()
Başqa bir üsul Goertzel filtrindən istifadə etməkdir.
Goertzel Filtri
Goertzel filtri FFT -yə bənzəyir, lakin yalnız bir tezlik qutusuna malikdir.
Photo3, Goertzel filtrinin ayrı -ayrı səs addımlarına tezlik reaksiyasını göstərir.
Şəkil 4, eyni frekans aralığında eyni filtrin silinməsidir.
Goertzel alqoritmi ilə "getmək" qərarına gəldim:
- Goertzel alqoritmini istifadə edən Arduino loop () vaxtı, Arduino "fix_FFT" kitabxanasından istifadə edərək bir FFT həlli üçün 14mS (milisaniyə) ilə 20mS (milisaniyə) arasında idi.
- Goertzel bandpass filtrinin mərkəzi tezliyini təyin etmək asandır.
- Bant genişliyi təxminən 190Hz -dir.
Şəkil 5, bir ton algılandığında 900Hz Goertzel filtrindən gələn rəqəmsal çıxışı göstərir. Ton eşiğimi 4000 olaraq təyin etdim … 4000 -dən yuxarı olan dəyərlər bir tonu göstərir.
Nəzəri olaraq filtrinizi rahat bir dinləmə tezliyinə uyğunlaşdırmalısınız. Təəssüf ki, 1 düymlük monitor dinamikimin səs çıxışı sürətlə 900Hz -dən aşağı düşür. Hər hansı bir problemin qarşısını almaq üçün 950Hz filtr tezliyindən istifadə edirəm. Alternativ filtr tezliklərinin hesablanması üçün lazım olan düsturlar kod başlığımda tapılmışdır.
Kod çözmə
Nöqtələrin və tirelərin deşifr edilməsi ilk göründüyü qədər asan deyil.
Mükəmməl morse aşağıdakı kimi təyin olunur:
- nöqtə = 1 ədəd
- məktub daxilində boşluqlar = 1 ədəd
- tire = 3 ədəd
- hərflər arasındakı boşluq = 3 ədəd
- sözlər arasındakı boşluq = 7 ədəd
Mükəmməl morse kodunu deşifrə etmək üçün sadəcə 2 ədədlik bir istinad tonuna ehtiyacımız var
- nöqtə <2 ədəd
- element sahəsi <2 ədəd
- tire> 2 ədəd
- hərf _ boşluq> 2 ədəd
- word_space> 6 ədəd (yəni 3 x istinad vahidi)
Bu maşın morsu üçün işləyir, ancaq "real dünyada":
- göndərmə sürəti dəyişir
- hər nöqtənin müddəti dəyişir
- hər tire müddəti dəyişir
- E, I, S, H, 5 hərflərində yalnız nöqtə müddətinin ortasında olan nöqtələr var
- T, M, O, 0 hərfləri yalnız tire müddətinin ortasında olan tire işarələrini ehtiva edir
- söz boşluqları gəlməyə bilər
- solma, dekoderin bərpa etməli olduğu səhvlər yaradır.
- müdaxilə səbəbindən pozulmuş siqnallar
Yalnız nöqtələr və tire olan məktublar qismən həll olunur, əgər:
etibarlı bir nöqtə və etibarlı bir tire alana qədər istinad müddətini təxmin edirik. Göndərmə sürəti 6 WPM (dəqiqədə söz) və 17 WPM arasında olduqda etibarlı olan 200 milisaniyədən istifadə edirəm. Mors öyrənirsinizsə bu dəyəri artırmalısınız. Proqramda sürət cədvəli var
Sürət fərqləri aşağıdakı hallarda həll olunur:
- hər nöqtədə və hər bir tire üzərində yuvarlanan ortalamanı yerinə yetiririk
- hər bir simvol alındıqdan sonra istinad müddətini yenidən hesablayın
Söz boşluqları və çatmayan söz boşluqları həll edilir, əgər:
- sonuncu (tondan tonsuz) keçidin vaxtını xatırlayın,
- hər hərfdən sonra alqoritmi yenidən başladın;
- Növbəti qabaqcıl (tondan tona keçid) keçidini gözləyərkən keçən vaxtı hesablayın və
- 6 vaxt vahidi aşıldıqda boşluq qoyun.
Mors Osilatoru
Əvvəlcə bəzi Piezo buzzerlərini sınadım, amma tapdım:
- tezliyi təyin olundu
- çıxış tezliyi uzun müddət dinləmək üçün çox yüksək idi
- piezos Goertzel ötürmə zolağından çıxmağa meylli idi
Daha sonra 750Hz kvadrat dalğası olan bir akustik çeviricini idarə etməyə çalışdım, amma 1 -ci və 3 -cü harmonikləri süzən bir rezonansa sahib olduğunu gördüm. Şəkil 6, 750Hz kvadrat dalğasına mikrofon gücləndiricisinin çıxışını göstərir … 5-ci harmonik görürük !!!
Sonra kiçik bir dinamikdən istifadə etdim. Şəkil 7, mikrofonun çıxışını kiçik bir dinamikə göndərilən 750Hz kvadrat dalğasına göstərir … bu dəfə 5 -ci harmonik deyil, əsasını görürük. Goertzel filtri hər hansı bir harmonikaya məhəl qoymur.
Qeydlər
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
Addım 5: Proqram təminatı
Quraşdırma
- Əlavə edilmiş faylı yükləyin MorseCodeDecoder.ino [1]
- Bu faylın məzmununu yeni bir Arduino eskizinə kopyalayın
- Eskizi "MorseCodeDecoder" olaraq qeyd edin (alıntılar olmadan)
- Eskizi tərtib edin və Arduino -ya yükləyin
Proqram Yeniləməsi 23 İyul 2020
Əlavə edilmiş "MorseCodeDecoder6.ino" faylına aşağıdakı xüsusiyyətlər əlavə edildi
- "Tam Blackman" pəncərəsi [2]
- "Noise_blanker"
Düzəliş:
- LED yanıb -sönməyə başlayana qədər geri dönənə qədər qəbuledicinizin səs səviyyəsini artırın
- LED daxil olan mors ilə addım -addım yanıp sönənə qədər alıcınızı tənzimləyin
- Noise_blanker, 8mS -ə qədər səs -küy partlayışlarına məhəl qoymamaq üçün qurulmuşdur (bir döngü vaxtı)
- səs -küy həddi Debug = true olaraq təyin olunaraq və Serial Plotterinizi izləyərək tənzimlənə bilər
Qeyd
[1]
Mətni də görmək istəyirsinizsə Arduino Serial Monitorunuzu 115200 baud olaraq təyin edin.
[2]
- Şəkil 1… Tam Blackman pəncərəsi
- Şəkil 2… Tam Blackman pəncərəsi olmayan Goertzel filtri
- Şəkil 3,,, Tam Blackman pəncərəsi olan Goertzel filtri tətbiq edildi
Addım 6: Əməliyyat
Dekoder
Morsa qulaq asarkən cihazı dinamikin yanına qoyun.
- Elektret mikrofon kapsulu dinamikdən mors siqnalını alır.
- Elektret mikrofonunun çıxışı daha sonra 647 dəfə (56dB) gücləndirilərək Arduino -ya işlənilir.
- Goertzel rəqəmsal bant keçid filtri səs -küydən mors siqnalını çıxarır.
- Dekodlaşdırma ikili ağacdan istifadə etməklə aparılır.
- Dekoder çıxışı 320 x 240 piksel TFT displeydə mətn olaraq göstərilir. Ekrandan istifadə etmək istəmirsinizsə, Arduino "Serial Monitor" a da göndərilir.
Mors göndərən
Mors göndərən də daxil edilmişdir. Bu, mors göndərmək və aşağıdakı kimi işləmək imkanı verir:
- Arduino pin 4 -də daimi səs tonu yaranır.
- Mors düyməsini hər dəfə basdığımızda bu tonu dekoderin yüksək dinamikindən eşidirik.
- Səs, dekoderin əsl morse dinlədiyini düşünməsinə səbəb olan Goertzel filtri ilə eyni tezliyə qurulmuşdur … göndərdiyiniz hər şey ekranda çap edilmiş mətn kimi görünəcək.
Dekoder aşağıdakı kimi ümumi səhvləri aldıqda göndərməyiniz yaxşılaşacaq:
- simvollar arasında çox boşluq. (məsələn: Q MA kimi yazılıb)
- məktublar arasında çox yer var (məsələn: NOW W olaraq yazılır)
- səhv kod
Addım 7: Xülasə
Dekoder
Bu təlimat mors kodunu çap edilmiş mətnə çevirən bir mors dekoderinin necə hazırlanacağını təsvir edir.
- Dekoder ən az 80 WPM (dəqiqədə sözlər) qədər morsu deşifr edə bilir.
- Dekoder alınan göndərmə sürətindəki dəyişiklikləri avtomatik olaraq izləyir.
- Mətn Serial Monitorunuzda (və ya varsa 320 x 240 TFT ekran modulunda) göstərilir [1]
Göndərən
Mors göndərən də daxil edilmişdir
- Göndərən, mors göndərməyinizin keyfiyyətini yaxşılaşdırmağa kömək edir.
- Dekoder göndərdiyinizin doğru olduğunu təsdiqləyir
Parçaların dəyəri
İsteğe bağlı TFT ekranı çıxılmadan, mors dekoder qalxanının təxmini dəyəri 25 dollardır.
Digər təlimatlarımı görmək üçün bura vurun.
Audio Challenge 2020 -də İkinci Mükafat
Tövsiyə:
CPE 133 İkili İkili Onlu Final Layihəsi: 5 Addım
CPE 133 Final Projesi İkili İkili: İkili Nömrələr rəqəmsal məntiq düşünərkən ağla gələn ilk şeylərdən biridir. Bununla birlikdə, İkili Nömrələr yeni başlayanlar üçün çətin bir anlayış ola bilər
DIY Arduino İkili Zəngli Saat: 14 Adım (Şəkillərlə birlikdə)
DIY Arduino İkili Zəngli Saat: Yenidən klassik ikili saatdır! Ancaq bu dəfə daha çox əlavə funksiya ilə! Bu təlimatda, sizə Arduino ilə nəinki vaxtı, həm də tarixi, ayı, hətta taymer və həyəcan əyləncəsi ilə göstərə biləcək ikili zəngli saat qurmağı göstərəcəyəm
İkili Bantlı Gitar/Bas Kompressoru: 4 Adım (Şəkillərlə birlikdə)
Dual-Band Guitar/Bass Kompressor: Ümumi məlumat: Bas ifaçısı dostum evlənir və ona orijinal bir şey qurmaq istəyirdim. Bir dəstə gitara/bas effekti pedalı olduğunu bilirdim, amma kompressor istifadə etdiyini heç görmədim, ona görə soruşdum. O, bir az özəllik aludəçisidir, ona görə də
Basys 3 Mors Dekoder: 11 addım
Basys 3 Morse Decoder: Bu, bir kollec sinfi üçün bir layihədir. Bu layihə VHDL -də Vivado adlı bir proqramda yazılmışdır. Basys 3 lövhəsini istifadə edərək Morse Decoder tətbiq etmək üçün lazım olan bütün modulları yaratmaq vəzifələri. Lövhə, bir mişardan mors kodu almaq üçün istifadə olunur
Mors Kodu Tuş Açar/Avtokoder: 12 Addım (Şəkillərlə birlikdə)
Morse Code Touch Keyer/Autocoder: Əslində bu layihəni bir müddət əvvəl qurmuşdum, amma kiminsə bu ideyadan istifadə edə biləcəyini düşünürdüm. Mən ham radio adamıyam və təqaüdə çıxanda və vaxtım olanda həyatımda bir az gec məşğul oldum. İndi ümumi lisenziyam var və telefondan istifadə edirəm (vo