Sisukord:
- Samm: osade loend
- 2. samm: vooluahela skeem
- 3. samm: teooria
- 4. samm: kujundusmärkused
- Samm: tarkvara
- 6. samm: toimimine
- 7. samm: kokkuvõte
Video: Binaarpuumorse dekodeerija: 7 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
Selles juhendis selgitatakse, kuidas Morse koodi dekodeerida Arduino Uno R3 abil.
Dekooder, mis kohandub automaatselt saatekiirusega, on võimeline dekodeerima morse kuni 80 sõna minutis.
Sissetulev kood kuvatakse tekstina teie Arduino jadamonitoril (või TFT -ekraanil, kui see on paigaldatud)
Kui soovite morse saatmist harjutada, on lisatud toonostsillaator.
Dekooderil on järgmised omadused:
- 320 x 240 TFT ekraanimoodul [1]
- Goertzeli digitaalne ribalaiuse filter soovimatute signaalide eraldamiseks.
- „binaarne morsipuu” signaali dekodeerimiseks
- automaatne kiiruse jälgimine
- kuuldav väljund morse harjutamisel
- kuvatakse nii sissetulev kui ka väljaminev tekst.
Tuvastatakse järgmised märgid ja sümbolid:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
Morse dekoodri kilbi hinnanguline maksumus, millest on maha arvatud TFT -ekraan, on 25 dollarit. [1]
Pildid
- Kaanefoto näitab täielikult kokkupandud seadet
- Videol on näha, kuidas dekooder töötab
Märkused
[1]
- TFT -ekraanimoodul on valikuline, kuna kogu tekst saadetakse teie Arduino jadamonitorile.
- TFT-moodulit kirjeldatakse minu juhendis
Samm: osade loend
Järgmised osad saadi saidilt
1 ainult prototüübikilp Arduino UNO R3 jaoks, 2,54 mm helikõrgus
Kohapeal saadi järgmised osad:
- 1 ainult kahekordne opamp LM358
- 1 ainult roheline LED
- 1 ainult LED -klamber
- 1 ainult elektreetmikrofoni kapsel
- 1 ainult tavaliselt avatud nupp
- 1 ainult 8-kontaktiline DIP-pesa
- 2 ainult 330 oomi takistit
- 2 ainult 2K2 takistit
- 5 ainult 10K oomi takistit
- 2 ainult 56K oomi takistit
- 2 ainult 1uF kondensaator
- 1 ainult 10uF kondensaator
Järgmised osad on valikulised:
- Ainult 1 2,2 -tolline TFT SPI LCD -ekraanimoodul 240*320 ILI9341 koos SD -kaardi pesaga Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC jaoks [1]
- Morse võti / nupp
- 1 ainult BC548 NPN transistor
- 1 ainult 1 tolline kõlar
- 1 ainult 33K oomi takisti
- 1 ainult 3,5 mm monopistik (morse võtme jaoks)
- 1 ainult 3,5 mm monopesa (morse võtme jaoks)
- 3 ainult 9 mm M3 koputatud nailonist vahekaugust
- 1 ainult 130 x 68 x 44 mm ABS plastkarp
- 5 ainult 2-kontaktilist täisnurga pistikut
Morse dekoodri kilbi eeldatav maksumus, millest on lahutatud lisavarustusse kuuluv TFT -ekraan, on 25 dollarit. [1]
Märkused
[1]
Valikulise 320 x 240 TFT ekraanimooduli osade loend on loetletud minu juhendatavas
[2]
Saatja kasutamiseks on vaja morsevõtit või tugevat vajutusnuppu.
2. samm: vooluahela skeem
Pildid
Foto 1 näitab morse dekoodri lülitusskeemi. 330 oomine takisti koos morse võtmega piirab D4 väljundvoolu juhusliku maandusjuhtumi korral … selle väärtuse suurendamine vähendab kõlari heliväljundit. Sel põhjusel ei lisanud ma seda kilbile, vaid kinnitasin selle reguleerimise hõlbustamiseks otse morse-klahvipessa
Foto 2 näitab sobivat kilpi. Kilp pärineb minu juhendatavast https://www.instructables.com/id/Arduino-TFT-Grap…, millele olen lisanud mikrofoni võimendi ja toonostsillaatori. [1]
Foto 3 näitab Arduino külge kinnitatud valmis kilpi. Teksti vaatamiseks teie Arduino jadamonitoril pole vaja muid komponente
Foto 4 näitab dekoodrit osaliselt karbis. Ekraani vaatamiseks on kaanesse lõigatud auk. Kõlar ja mikrofon on korpusele kuumliimitud. Enne kõlari paigaldamist puurige kaane sisse mõned kõlariaugud. Kaane keskne pistikupesa on pikendusmikrofoni jaoks … ilma selleta tuleb dekooder paigutada kõlari lähedale, mis pole alati võimalik
Foto 5 näitab TFT -ekraani. Ekraani äärtele on kinnitatud must elektrilint … see lint hoiab ära valguse lekke ja varjab kõik kõrvalekalded ekraani ja kaaneava vahel
Oluline
[1]
Suure USB -pistikuga arduiinod vajavad USB -pistiku ja Arduino kilbi vahele elektrilindi kihti. Juhuslikud lühikesed püksid on ilma lindita võimalikud, kuna kliirens on väike. Lindi pole vaja väikeste pistikutega arduino jaoks
3. samm: teooria
Iga morse kooditäht sisaldab mitmeid lühi- ja pikaajalisi toone, mida nimetatakse punktideks ja kriipsudeks.
- punkt (.) on 1 ühiku pikkune
- kriips (_) on 3 ühikut pikk
- tähtede elementide vahe on 1 ühik
- tähtede vahe on 3 ühikut
- sõnade vahe on 7 ühikut
Me saame kindlaks teha, kas sissetulev toon on punkt või kriips, kui võrrelda selle kestust võrdlustooniga, mille pikkus on 2 ühikut.
- punkt on väiksem kui 2 ühikut
- kriips on suurem kui 2 ühikut
Punktide ja kriipsude saabuva mustri dekodeerimiseks on kaks selgelt erinevat meetodit:
- lineaarne otsing
- binaarpuu (tuntud ka kui dihhotoomiline otsing)
Lineaarne otsing
Üks levinud meetod on tähemärkide ja nende vastavate morsemustrite loomine. Näiteks salvestatakse kõik järgmised märgid järgmiselt:
- A. _
- B _…
- C _. _.
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Iga tähe jaoks on vaja 6 lahtrit… 1 tähe enda jaoks ja 5 tähe (.) Ja (_) jaoks. Selleks vajame tähtede [36] [6] massiivi, milles on kokku 216 lahtrit. Kasutamata lahtrid täidetakse tavaliselt nulliga või tühjaga.
Sissetulevate punktide ja kriipsude dekodeerimiseks peame võrdlema iga sissetuleva tähe punkti/kriipsu mustrit meie viitemärkide mustritega.
Kuigi see meetod töötab, on see äärmiselt aeglane.
Oletame, et massiivi on salvestatud 26 tähte („A”, „Z”) ja numbreid („0”,… „9”), siis peame tegema 36 otsingut, millest igaühel on kuni 5 alamotsingut, mis on kokku 36*5 = 180 otsingut numbrite '9' dekodeerimiseks.
Kahendpuu
Binaarotsing on palju kiirem, kuna otsinguid pole vaja.
Erinevalt lineaarsest otsimisest, mis nõuab nii märkide kui ka morsemustrite salvestamist, salvestab binaarpuu ainult märgid, mis tähendab, et massiivi suurus on väiksem.
Olen jaganud oma binaarpuu (foto1) kaheks pooleks (fotod 2 ja 3), et muuta see loetavamaks.
Tähemärgi leidmiseks liigutame kursorit vasakule iga kord, kui kuuleme punkti, ja liigutame kursorit paremale iga kord, kui kuuleme kriipsu. Pärast igat käiku vähendame poole võrra järgmise käigu osuti kaugust… siit ka nimi binaarpuu.
Tähe „9” (kriips, kriips, kriips, kriips, punkt) dekodeerimiseks on vaja 5 käiku… 4 paremale ja 1 vasakule, mis jätab kursori otse „9” kohale.
Viis käiku on oluliselt kiirem kui 180 otsingut !!!!!
Binaarmärkide massiiv on samuti väiksem… 26 tähte ja 10 numbrit nõuab ainult 64 x 1 rea massiivi. Olen valinud 128 tähemärgi massiivi loomise, et saaksin kirjavahemärke dekodeerida.
4. samm: kujundusmärkused
Morse on segavate signaalide juuresolekul raske dekodeerida. Soovimatud signaalid tuleb tagasi lükata … selleks on vaja mingit filtrit.
Võimalusi on palju:
- Faasilukuga aasad
- Induktori-kondensaatori filtrid
- Takisti-kondensaatori aktiivfiltrid
- Digitaalne signaalitöötlus, näiteks kiire Fourier -teisendus või Goertzeli filter.
Meetodite 1, 2, 3 jaoks on vaja väliseid komponente, mis on mahukad.
Meetod 4 ei vaja väliseid komponente… sagedused tuvastatakse matemaatiliste algoritmide abil.
Kiire Fourier 'teisendus (FFT)
Üks meetod tooni olemasolu tuvastamiseks keerulises lainekujus on kiire Fourier 'teisenduse kasutamine
Foto 1 näitab, kuidas FFT (Fast Fourier Transform) jagab helispektri prügikastideks.
Foto 2 näitab, kuidas FFT „prügikastid” reageerivad signaalile… antud juhul 800 Hz. Kui oleks olemas teine signaal, näiteks 1500 Hz, näeksime kahte vastust … üks 800 Hz ja teine 1500 Hz juures.
Teoreetiliselt saab morsekoodide dekoodrit teha, jälgides konkreetse FFT sagedusala väljundtaset … suur arv tähistab punkti või kriipsu … väike arv ei anna signaali.
Sellise morse koodide dekoodri saab teha, jälgides fotol 2 olevat prügikasti 6, kuid selle lähenemisviisiga on mitu asja valesti:
- me tahame ainult ühte sagedusanumat … ülejäänud on raisatud arvutused
- sageduskastid ei pruugi huvipakkuva sageduse juures täpselt ilmuda
- see on suhteliselt aeglane (20mS Arduino silmuse kohta)
Teine meetod on kasutada Goertzeli filtrit.
Goertzeli filter
Goertzeli filter sarnaneb FFT -ga, kuid sellel on ainult üks sagedusanum.
Foto 3 näitab Goertzeli filtri sagedusreaktsiooni diskreetsetele helisammudele.
Foto 4 on sama filtri pühkimine samal sagedusvahemikul.
Otsustasin Goertzeli algoritmiga minna:
- Arduino ahela () aeg, kasutades Goertzeli algoritmi, oli 14 ms (millisekundit) versus 20 mS (millisekundit) FFT lahenduse jaoks, kasutades Arduino "fix_FFT" raamatukogu.
- Goertzeli ribalaiuse filtri kesksagedust on lihtne seadistada.
- Ribalaius on umbes 190 Hz.
Foto 5 näitab 900 Hz Goertzeli filtri numbrilist väljundit tooni tuvastamisel. Olen seadnud oma tooni läve väärtuseks 4000… väärtused üle 4000 näitavad tooni.
Teoreetiliselt peate filtri lihtsalt häälestama mugavaks kuulamissageduseks. Kahjuks langeb minu 1 -tollise jälgimiskõlari heliväljund kiiresti alla 900 Hz. Probleemide vältimiseks kasutan filtrisagedust 950 Hz. Vajalikud valemid alternatiivsete filtrisageduste arvutamiseks on minu koodi päises.
Dekodeerimine
Punktide ja kriipsude dekodeerimine pole nii lihtne, kui esmapilgul tundub.
Täiuslik morse on määratletud järgmiselt:
- punkt = 1 ühik
- tühikud tähe sees = 1 ühik
- kriips = 3 ühikut
- tähtede vahe = 3 ühikut
- sõnade vahe = 7 ühikut
Täiusliku morsi dekodeerimiseks vajame lihtsalt võrdlustooni kestust 2 ühikut
- punkt <2 ühikut
- elemendi ruum <2 ühikut
- kriips> 2 ühikut
- täht _ruum> 2 ühikut
- word_space> 6 ühikut (st 3 x võrdlusühikut)
See töötab masina morse puhul, kuid "päris maailmas":
- saatmise kiirus on erinev
- iga punkti kestus varieerub
- iga kriipsu kestus on erinev
- tähed E, I, S, H, 5 sisaldavad ainult punkte, mis kestavad keskmiselt punktini
- tähed T, M, O, 0 sisaldavad ainult kriipsu, mille keskmine kestus on kriips
- sõnalüngad ei pruugi kohale jõuda
- tuhmumine tekitab vigu, millest dekooder peab taastuma.
- häiritud signaalid
Ainult täppe ja kriipsu sisaldavad tähed on osaliselt lahendatud, kui:
me hindame võrdluskestust, kuni oleme saanud kehtiva punkti ja kehtiva kriipsu. Kasutan 200 millisekundit, mis kehtib, kui saatmiskiirus on vahemikus 6 WPM (sõnad minutis) kuni 17 WPM. Morse õppimisel peate võib -olla seda väärtust suurendama. Tarkvara sisaldab kiiruse tabelit
Kiiruse kõikumised on lahendatud, kui:
- teostame iga punkti ja iga kriipsu korral jooksva keskmise ja
- arvutage võrdluskestus pärast iga sümboli saamist uuesti
Sõnalüngad ja saabumata sõnalüngad lahendatakse, kui:
- mäletate viimase ülemineku aega (toonilt toonile),
- taaskäivitage algoritm pärast iga tähte,
- arvutage möödunud aeg, oodates järgmist ülemist serva (toon-toon) üleminekut ja
- sisestage tühik, kui 6 ajaühikut on ületatud.
Morse ostsillaator
Algselt proovisin mõnda Piezo summeri, kuid leidsin:
- sagedus oli fikseeritud
- väljundsagedus oli pika kuulamise jaoks liiga kõrge
- piesod kippusid Goertzeli pääsuribast välja triivima
Proovisin siis juhtida 750Hz ruutlainega akustilist andurit, kuid leidsin, et sellel on resonants, mis filtreerib välja esimese ja kolmanda harmoonilise. Foto 6 näitab mikrofoni võimendi väljundit 750 Hz ruutlainele … me näeme viiendat harmoonilist !!!
Siis kasutasin väikese kõlari kasutamist. Foto 7 näitab mikrofoni väljundit 750 Hz ruutlainele, mis saadeti väikesele kõlarile … seekord näeme põhilist … mitte viiendat harmoonilist. Goertzeli filter ignoreerib kõiki harmoonilisi.
Märkused
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
Samm: tarkvara
Paigaldamine
- Laadige alla lisatud fail MorseCodeDecoder.ino [1]
- Kopeerige selle faili sisu uude Arduino visandisse
- Salvestage visand nimega "MorseCodeDecoder" (ilma jutumärkideta)
- Koostage ja laadige eskiis üles oma Arduinosse
Tarkvarauuendus 23. juulil 2020
Lisatud failile "MorseCodeDecoder6.ino" on lisatud järgmised funktsioonid
- aken "Täpne Blackman" [2]
- "müra tühjendaja"
Reguleerimine:
- suurendage oma vastuvõtja helitaset, kuni LED hakkab vilkuma ja seejärel kustub
- häälestage nüüd oma vastuvõtjat, kuni valgusdiood vilgub sissetuleva morsiga
- Noise_blanker on seadistatud ignoreerima kuni 8mS (ühe tsükli kestusega) mürapurske
- müra künnist saab reguleerida, seadistades Debug = true ja vaadates oma jadaplotterit
Märge
[1]
Kui soovite ka teksti vaadata, seadke oma Arduino jadamonitor 115200 baudile.
[2]
- Foto 1… Täpne Blackmani aken
- Foto 2… Goertzeli filter ilma täpse Blackmani aknata
- Foto 3,,, Goertzeli filter ja aken Exact Blackman
6. samm: toimimine
Dekooder
Morse kuulamisel asetage seade kõlari kõrvale.
- Elektreetmikrofoni kapsel võtab kõlarist vastu morse signaali.
- Seejärel võimendatakse elektreetmikrofoni väljundit 647 korda (56 dB), enne kui see edastatakse Arduinole töötlemiseks.
- Goertzeli digitaalne ribalaiuse filter eraldab mürast morsesignaali.
- Dekodeerimine toimub binaarpuu abil.
- Dekoodri väljund kuvatakse tekstina 320 x 240 piksliga TFT -ekraanil. See saadetakse ka teie Arduino jadamonitorile, kui te ei soovi ekraani kasutada.
Morse saatja
Kaasas on ka morsisaatja. See võimaldab teil harjutada morse saatmist ja töötab järgmiselt.
- Arduino tihvt 4 tekitab pideva helisignaali.
- Kuuleme seda tooni dekodeerija valjuhääldi kaudu, kui vajutame morse-klahvi.
- Toon on seatud samale sagedusele nagu Goertzeli filter, mis petab dekoodri mõtlema, et ta kuulab tõelist morset … kõik, mida saadate, kuvatakse ekraanil trükitud tekstina.
Teie saatmine paraneb, kuna dekooder leiab selliseid levinud vigu nagu:
- sümbolite vahel on liiga palju ruumi. (näide: Q on tähistatud MA -ga)
- tähtede vahel on liiga palju ruumi (näide: KOHE trükitakse kui NO W)
- Vale kood
7. samm: kokkuvõte
Dekooder
Selles juhendis kirjeldatakse, kuidas valmistada morsedekoodrit, mis teisendab morsekoodi trükitud tekstiks.
- Dekooder on võimeline dekodeerima morse kuni vähemalt 80 WPM (sõnad minutis)
- Dekooder jälgib automaatselt vastuvõetud saatekiiruse variatsioone.
- Tekst kuvatakse teie jadamonitoril (või 320 x 240 TFT -ekraanimoodulil, kui see on paigaldatud) [1]
Saatja
Kaasas on ka morsisaatja
- Saatja aitab teil parandada oma morse saatmise kvaliteeti.
- Dekooder kinnitab, et teie saadetud andmed on õiged
Osade maksumus
Morse dekoodri kilbi eeldatav maksumus, millest on lahutatud lisavarustusse kuuluv TFT -ekraan, on 25 dollarit.
Muude juhendite vaatamiseks klõpsake siin.
Audioväljakutse 2020 teine auhind
Soovitan:
Kuidas: Raspberry PI 4 peata (VNC) installimine RPI-pildistaja ja piltidega: 7 sammu (koos piltidega)
Kuidas: Raspberry PI 4 peata (VNC) installimine Rpi-pildistaja ja piltidega: kavatsen seda Rapsberry PI-d kasutada oma blogis hunniku lõbusate projektide jaoks. Vaadake seda julgelt. Tahtsin uuesti oma Raspberry PI kasutamist alustada, kuid mul polnud uues asukohas klaviatuuri ega hiirt. Vaarika seadistamisest oli tükk aega möödas
LabDroid: Morse koodi kodeerija/dekodeerija: 4 sammu
LabDroid: Morse koodi kodeerija/dekodeerija: Märkus. Seda juhist ei saa rakendada 1: 1 LabDroidi uusimas versioonis. Ma värskendan seda varsti. See projekt näitab teile, mida saate LabDroidiga teha. Kuna Hello World on tavaliselt tehtud teksti, valguse või heli põhjal, mõtlesin LabDri jaoks
Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)
Atari punkkonsool koos beebi 8-astmelise sekveneerijaga: see vaheehitus on kõik-ühes Atari punk-konsool ja beebi 8-astmeline järjestus, mida saate freesida Bantam Tools töölaua PCB-freespingis. See koosneb kahest trükkplaadist: üks on kasutajaliidese (UI) plaat ja teine on utiliit
Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)
Bolt - DIY juhtmeta laadimise öökell (6 sammu): Induktiivsed laadimised (tuntud ka kui juhtmeta laadimine või juhtmeta laadimine) on traadita jõuülekande tüüp. See kasutab kaasaskantavatele seadmetele elektrit pakkumiseks elektromagnetilist induktsiooni. Kõige tavalisem rakendus on Qi traadita laadimisst
Arvuti demonteerimine lihtsate sammude ja piltidega: 13 sammu (piltidega)
Arvuti demonteerimine lihtsate sammude ja piltidega: see on juhis arvuti demonteerimiseks. Enamik põhikomponente on modulaarsed ja kergesti eemaldatavad. Siiski on oluline, et oleksite selles osas organiseeritud. See aitab vältida osade kaotamist ja ka kokkupanekut