Sisukord:

Binaarpuumorse dekodeerija: 7 sammu (piltidega)
Binaarpuumorse dekodeerija: 7 sammu (piltidega)

Video: Binaarpuumorse dekodeerija: 7 sammu (piltidega)

Video: Binaarpuumorse dekodeerija: 7 sammu (piltidega)
Video: ❤️💥 𝗦𝗘𝗣𝗧𝗘𝗠𝗕𝗥𝗜𝗘 𝗣𝗘𝗡𝗧𝗥𝗨 𝗧𝗜𝗡𝗘 💥❤️ 𝗗𝗘 𝗟𝗔 𝗩𝗢𝗥𝗕𝗔 𝗟𝗔 𝗙𝗔𝗣𝗧𝗔! 2024, November
Anonim
Image
Image
Lülitusskeem
Lülitusskeem

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

Lülitusskeem
Lülitusskeem
Lülitusskeem
Lülitusskeem
Lülitusskeem
Lülitusskeem

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

Teooria
Teooria
Teooria
Teooria
Teooria
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

Disaini märkmed
Disaini märkmed
Disaini märkmed
Disaini märkmed
Disaini märkmed
Disaini märkmed
Disaini märkmed
Disaini märkmed

Morse on segavate signaalide juuresolekul raske dekodeerida. Soovimatud signaalid tuleb tagasi lükata … selleks on vaja mingit filtrit.

Võimalusi on palju:

  1. Faasilukuga aasad
  2. Induktori-kondensaatori filtrid
  3. Takisti-kondensaatori aktiivfiltrid
  4. 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

Tarkvara
Tarkvara
Tarkvara
Tarkvara
Tarkvara
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.

Heliväljakutse 2020
Heliväljakutse 2020
Heliväljakutse 2020
Heliväljakutse 2020

Audioväljakutse 2020 teine auhind

Soovitan: