Satura rādītājs:
- 1. darbība: detaļu saraksts
- 2. darbība: shēmas shēma
- 3. solis: teorija
- 4. solis: dizaina piezīmes
- 5. solis: programmatūra
- 6. darbība: darbība
- 7. darbība. Kopsavilkums
Video: Binārais koku morzes dekodētājs: 7 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:52
Šajā pamācībā ir paskaidrots, kā atšifrēt Morzes kodu, izmantojot Arduino Uno R3.
Dekodētājs, kas automātiski pielāgojas sūtīšanas ātrumam, spēj atšifrēt morzi līdz vismaz 80 vārdiem minūtē.
Ienākošais kods tiek parādīts kā teksts jūsu Arduino seriālajā monitorā (vai TFT ekrānā, ja tāds ir)
Ja vēlaties praktizēt morzes nosūtīšanu, ir iekļauts toņu oscilators.
Dekodētāja funkcijas:
- 320 x 240 TFT displeja modulis [1]
- Goertzel digitālais joslas caurlaides filtrs nevēlamu signālu atdalīšanai.
- “Binārs Morzes koks” signāla dekodēšanai
- automātiska ātruma izsekošana
- dzirdama izeja, praktizējot morzi
- tiek parādīts gan ienākošais, gan izejošais teksts.
Tiek atpazītas šādas rakstzīmes un simboli:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
Morzes dekodētāja vairoga paredzamās izmaksas, atskaitot TFT displeju, ir 25 ASV dolāri. [1]
Attēli
- Vāka fotoattēls parāda pilnībā samontētu vienību
- Video parāda, kā darbojas dekodētājs
Piezīmes
[1]
- TFT displeja modulis nav obligāts, jo viss teksts tiek nosūtīts uz jūsu Arduino “Serial Monitor”.
- TFT modulis ir aprakstīts manā pamācībā
1. darbība: detaļu saraksts
Šādas daļas tika iegūtas vietnē
1 tikai prototipa vairogs Arduino UNO R3, 2.54mm Pitch
Vietēji tika iegūtas šādas daļas:
- 1 tikai LM358 dubultā opamp
- 1 tikai zaļa gaismas diode
- 1 tikai LED klipsis
- 1 tikai elektreta mikrofona kapsula
- 1 tikai parasti atverama spiedpoga
- 1 tikai 8 kontaktu DIP ligzda
- 2 tikai 330 omu rezistori
- 2 tikai 2K2 rezistori
- 5 tikai 10K omu rezistori
- 2 tikai 56K omi rezistori
- 2 tikai 1uF kondensators
- 1 tikai 10uF kondensators
Šādas daļas nav obligātas:
- Tikai 1 2,2 collu TFT SPI LCD displeja modulis 240*320 ILI9341 ar SD kartes slotu Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
- Morzes taustiņš / spiedpoga
- 1 tikai BC548 NPN tranzistors
- 1 tikai 1 collu skaļrunis
- 1 tikai 33K omu rezistors
- 1 tikai 3,5 mm mono spraudnis (Morzes atslēgai)
- 1 tikai 3,5 mm mono ligzda (Morzes atslēgai)
- 3 tikai 9 mm neilona starplikas ar M3
- 1 tikai 130 x 68 x 44 mm ABS plastmasas kaste
- 5 tikai 2 kontaktu taisnā leņķa savienotāji
Morzes dekodētāja vairoga paredzamās izmaksas, atskaitot papildu TFT displeju, ir 25 ASV dolāri. [1]
Piezīmes
[1]
Papildu 320 x 240 TFT displeja moduļa detaļu saraksts ir norādīts manā pamācībā
[2]
Ja vēlaties izmantot sūtītāju, nepieciešama morzes atslēga vai izturīga spiedpoga.
2. darbība: shēmas shēma
Attēli
1. fotoattēls parāda morzes dekodētāja shēmu. 330 omu rezistors sērijveidā ar morzes taustiņu ierobežo D4 izejas strāvu nejauša zemējuma īssavienojuma gadījumā … tā vērtības palielināšana samazina skaļruņa audio izvadi. Šī iemesla dēļ es to neesmu pievienojis vairogam, bet piestiprinājis tieši pie morzes taustiņa domkrata, lai atvieglotu regulēšanu
2. fotoattēlā redzams atbilstošs vairogs. Vairogs ir no mana pamācāmā https://www.instructables.com/id/Arduino-TFT-Grap…, kuram esmu pievienojis mikrofona pastiprinātāju un toņu oscilatoru. [1]
3. fotoattēlā parādīts pabeigtais vairogs, kas piestiprināts Arduino. Ja teksts ir jāskata jūsu Arduino “Sērijas monitorā”, nav nepieciešami citi komponenti
4. fotoattēlā redzams daļēji iesaiņots dekodētājs. Vāciņā ir izgriezts caurums displeja apskatei. Skaļrunis un mikrofons ir karsti pielīmēti pie korpusa. Pirms skaļruņa uzstādīšanas vāciņā urbiet dažus skaļruņu caurumus. Centrālā kontaktligzda uz vāka ir paredzēta pagarinājuma mikrofonam … bez tā dekodētājs jānovieto skaļruņa tuvumā, kas ne vienmēr ir iespējams
5. fotoattēlā redzams TFT ekrāns. Displeja malām ir piestiprināta melna elektriskā lente … šī lente novērš gaismas noplūdi un maskē neatbilstību starp displeju un vāka atveri
Svarīgs
[1]
Arduinos ar lielu USB savienotāju ir nepieciešams elektriskās lentes slānis starp USB savienotāju un Arduino vairogu. Bez lentes ir iespējami nejauši šorti, jo atstarpe ir maza. Lente nav nepieciešama Arduinos, kuriem ir mazi savienotāji
3. solis: teorija
Katrs morzes koda burts satur virkni īsu un garu toņu, ko sauc par “punktiem” un “domuzīmēm”.
- punkts (.) ir 1 vienības garš
- domuzīme (_) ir 3 vienības gara
- atstarpe starp burtu elementiem ir 1 vienība
- atstarpe starp burtiem ir 3 vienības
- atstarpe starp vārdiem ir 7 vienības
Mēs varam noteikt, vai ienākošais signāls ir punkts vai domuzīme, salīdzinot tā ilgumu ar atsauces signālu 2 vienību garumā.
- punkts ir mazāks par 2 vienībām
- domuzīme ir lielāka par 2 vienībām
Ienākošā punktu un domuzīmju raksta atšifrēšanai ir divas izteikti atšķirīgas metodes:
- lineāra meklēšana
- binārais koks (pazīstams arī kā dihotomisks meklējums)
Lineārā meklēšana
Viena no izplatītākajām metodēm ir izveidot rakstzīmju masīvu un tiem atbilstošus morzes modeļus. Piemēram, katra no šīm rakstzīmēm tiks saglabāta kā:
- A. _
- B _…
- C _. _.
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Katram burtam ir vajadzīgas 6 šūnas… 1 pašam burtam un 5 (.) Un (_). Lai to izdarītu, mums ir nepieciešams burtu [36] [6] masīvs ar 216 šūnām. Neizmantotās šūnas parasti tiek aizpildītas ar nulli vai tukšu.
Lai atšifrētu ienākošos punktus un domuzīmes, mums jāsalīdzina katra ienākošā burta punktu/domuzīmju modelis ar mūsu atsauces rakstzīmju rakstiem.
Lai gan šī metode darbojas, tā ir ārkārtīgi lēna.
Pieņemsim, ka masīvā ir saglabāti 26 burti (“A”, “Z”) un cipari (“0”,… “9”), tad mums ir jāveic 36 meklējumi, katrs ar ne vairāk kā 5 apakšmeklējumiem, kas kopā ir 36*5 = 180 meklējumi, lai atšifrētu ciparu “9”.
Binārais koks
Binārā meklēšana ir daudz ātrāka, jo nav nepieciešama meklēšana.
Atšķirībā no lineārās meklēšanas, kurā ir jāsaglabā gan rakstzīmju, gan morzes raksti, binārais koks saglabā tikai rakstzīmes, kas nozīmē, ka masīva izmērs ir mazāks.
Esmu sadalījis savu bināro koku (foto1) divās daļās (2. un 3. fotoattēls), lai tas būtu vieglāk lasāms.
Lai atrastu rakstzīmi, mēs katru reizi, kad dzirdam punktu, pārvietojam rādītāju pa kreisi, un katru reizi, kad dzirdam domuzīmi, pārvietojam rādītāju pa labi. Pēc katra gājiena mēs uz pusi samazinām rādītāja attālumu nākamajam gājienam … līdz ar to nosaukums binārais koks.
Lai atšifrētu burtu “9” (domuzīme, domuzīme, domuzīme, domuzīme, punkts), ir nepieciešami 5 gājieni… 4 pa labi un 1 pa kreisi, kas atstāj rādītāju tieši virs “9”.
Pieci gājieni ir ievērojami ātrāk nekā 180 meklējumi !!!!!
Bināro rakstzīmju masīvs ir arī mazāks… 26 burtiem un 10 cipariem ir nepieciešams tikai 64 x 1 rindu masīvs. Esmu izvēlējies izveidot 128 rakstzīmju masīvu, lai varētu atšifrēt pieturzīmes.
4. solis: dizaina piezīmes
Morzi ir grūti atšifrēt traucējošu signālu klātbūtnē. Nevēlamie signāli ir jānoraida … tas prasa sava veida filtru.
Ir daudz iespēju:
- Fāzes bloķētas cilpas
- Induktora-kondensatora filtri
- Rezistoru-kondensatoru aktīvie filtri
- Digitālā signāla apstrāde, piemēram, ātrā Furjē transformācija vai Gertzela filtrs.
1., 2., 3. metodei ir nepieciešami ārēji komponenti, kas ir apjomīgi.
Metodei 4 nav nepieciešami ārēji komponenti… frekvences tiek noteiktas, izmantojot matemātiskos algoritmus.
Ātrā Furjē transformācija (FFT)
Viena metode, kā noteikt toņa klātbūtni sarežģītā viļņu formā, ir izmantot ātro Furjē transformāciju
1. fotoattēls parāda, kā FFT (ātrā Furjē transformācija) sadala audio spektru “tvertnēs”.
2. fotoattēls parāda, kā FFT “tvertnes” reaģē uz signālu… šajā gadījumā 800 Hz. Ja būtu otrs signāls, piemēram, 1500 Hz, mēs redzētu divas atbildes … vienu pie 800 Hz un otru pie 1500 Hz.
Teorētiski morzes koda dekodētāju var izgatavot, uzraugot konkrētas FFT frekvences tvertnes izvades līmeni … liels skaitlis apzīmē punkta vai domuzīmes klātbūtni … mazs skaitlis nav signāla.
Šādu morzes koda dekodētāju var izgatavot, uzraugot 2. bin 6. attēlu, taču ar šo pieeju ir vairākas lietas:
- mēs vēlamies tikai vienu frekvenču tvertni … pārējie ir lieki aprēķini
- frekvenču tvertnes var neparādīties tieši interesējošajā frekvencē
- tas ir salīdzinoši lēns (20mS uz Arduino cilpu ()
Vēl viena metode ir izmantot Goertzel filtru.
Goertzel filtrs
Goertzel filtrs ir līdzīgs FFT, bet tam ir tikai viena frekvences tvertne.
Foto3 parāda Goertzel filtra frekvences reakciju uz diskrētiem audio soļiem.
4. fotoattēls ir tā paša filtra slaucīšana vienā un tajā pašā frekvenču diapazonā.
Es nolēmu “iet” ar Goertzel algoritmu šādi:
- Arduino cilpas () laiks, izmantojot Goertzel algoritmu, bija 14mS (milisekundes) pret 20mS (milisekundēm) FFT risinājumam, izmantojot Arduino “fix_FFT” bibliotēku.
- Ir viegli iestatīt Goertzel joslas caurlaidības filtra centrālo frekvenci.
- Joslas platums ir aptuveni 190 Hz.
5. fotoattēls parāda 900 Hz Goertzel filtra skaitlisko izvadi, kad tiek konstatēts signāls. Esmu iestatījis toņa slieksni uz vērtību 4000 … vērtības virs 4000 norāda uz signālu.
Teorētiski jums vienkārši jāpielāgo filtrs ērtai klausīšanās frekvencei. Diemžēl audio izeja no mana 1 collu monitoringa skaļruņa strauji nokrītas zem 900 Hz. Lai izvairītos no problēmām, es izmantoju filtra frekvenci 950 Hz. Nepieciešamās formulas alternatīvo filtru frekvenču aprēķināšanai ir atrodamas manā koda galvenē.
Atšifrēšana
Punktu un domuzīmju atšifrēšana nav tik vienkārša, kā šķiet sākumā.
Ideāls mors tiek definēts kā:
- punkts = 1 vienība
- atstarpes burta iekšpusē = 1 vienība
- domuzīme = 3 vienības
- atstarpe starp burtiem = 3 vienības
- atstarpe starp vārdiem = 7 vienības
Lai atšifrētu perfektu morzi, mums vienkārši nepieciešams atsauces signāla ilgums 2 vienības
- punkts <2 vienības
- elementu telpa <2 vienības
- domuzīme> 2 vienības
- burts _space> 2 vienības
- word_space> 6 vienības (t.i., 3 x atsauces vienības)
Tas darbojas mašīnas morzes gadījumā, bet “reālajā pasaulē”:
- nosūtīšanas ātrums ir atšķirīgs
- katra punkta ilgums ir atšķirīgs
- katras svītras ilgums ir atšķirīgs
- burti E, I, S, H, 5 satur tikai punktus, kuru vidējais ilgums ir līdz punktam
- burti T, M, O, 0 satur tikai svītras, kuru vidējais ilgums ir svītra
- vārdu nepilnības var nesanākt
- izbalēšana rada kļūdas, no kurām dekodētājam ir jāatgūst.
- bojāti signāli traucējumu dēļ
Burti, kuros ir tikai punkti un domuzīmes, ir daļēji atrisināti, ja:
mēs aprēķinām atsauces ilgumu, līdz esam saņēmuši derīgu punktu un derīgu domuzīmi. Es izmantoju 200 milisekundes, kas ir derīgas, ja sūtīšanas ātrums ir no 6 WPM (vārdi minūtē) līdz 17 WPM. Jums var būt nepieciešams palielināt šo vērtību, ja mācāties morzi. Ātruma tabula ir iekļauta programmatūrā
Ātruma izmaiņas tiek atrisinātas, ja:
- mēs veicam slīdošo vidējo rādītāju katram punktam un katrai svītrai un
- pēc katra simbola saņemšanas pārrēķiniet atsauces ilgumu
Vārdu nepilnības un vārda nepilnības, kas netiek saņemtas, tiek atrisinātas, ja mēs:
- atcerieties pēdējās pārejas laiku no malas (tonis bez toņa),
- pēc katra burta restartējiet algoritmu,
- aprēķiniet pagājušo laiku, gaidot nākamo priekšējo malu pāreju (bez toņa uz toni) un
- ievietojiet atstarpi, ja ir pārsniegtas 6 laika vienības.
Morzes oscilators
Sākumā es izmēģināju dažus pjezo skaņas signālus, bet atradu:
- biežums tika fiksēts
- izvades frekvence bija pārāk augsta ilgstošai klausīšanai
- pjezos bija tendence izkļūt no Gērcela caurlaides joslas
Pēc tam es mēģināju vadīt akustisko devēju ar 750 Hz kvadrātviļņu, bet atklāju, ka tam ir rezonanse, kas filtrē 1. un 3. harmoniku. 6. fotoattēlā redzama mikrofona pastiprinātāja izeja uz 750 Hz kvadrātviļņu … mēs redzam piekto harmoniku !!!
Pēc tam es izmantoju nelielu skaļruni. 7. fotoattēlā ir redzama mikrofona izeja uz 750 Hz kvadrātviļņu, kas tika nosūtīts uz nelielu skaļruni … šoreiz mēs redzam pamata … nevis piekto harmoniku. Goertzel filtrs ignorē visas harmonikas.
Piezīmes
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
5. solis: programmatūra
Uzstādīšana
- Lejupielādējiet pievienoto failu MorseCodeDecoder.ino [1]
- Kopējiet šī faila saturu jaunā Arduino skicē
- Saglabājiet skici kā "MorseCodeDecoder" (bez pēdiņām)
- Apkopojiet un augšupielādējiet skici savā Arduino
Programmatūras atjauninājums 2020. gada 23. jūlijā
Pievienotajam failam "MorseCodeDecoder6.ino" ir pievienotas šādas funkcijas
- logs "Precīzs melnādainais" [2]
- "Trokšņu slāpētājs"
Pielāgošana:
- palieliniet uztvērēja skaņas līmeni, līdz gaismas diode sāk mirgot, un pēc tam atkal izslēdzas
- tagad noregulējiet uztvērēju, līdz gaismas diode mirgo vienlaikus ar ienākošo morsu
- Noise_blanker ir iestatīts tā, lai ignorētu trokšņa pārrāvumus līdz 8 mS (vienas cilpas laikā)
- trokšņa slieksni var noregulēt, iestatot Debug = true un skatoties seriālo ploteri
Piezīme
[1]
Iestatiet savu Arduino sērijas monitoru uz 115200 bodu, ja arī vēlaties apskatīt tekstu.
[2]
- 1. foto… Precīzs Blekmena logs
- 2. fotoattēls… Gērcela filtrs bez Exact Blackman loga
- Foto 3,,, Gertzela filtrs ar piemērotu logu Precīzs Blekmens
6. darbība: darbība
Dekodētājs
Klausoties morzi, novietojiet ierīci blakus skaļrunim.
- Elektreta mikrofona kapsula uztver morzes signālu no jūsu skaļruņa.
- Pēc tam elektreta mikrofona izeja tiek pastiprināta 647 reizes (56 dB), pirms tā tiek nodota apstrādei Arduino.
- Goertzel digitālais joslas caurlaidības filtrs no trokšņa iegūst morzes signālu.
- Atšifrēšana tiek veikta, izmantojot bināro koku.
- Dekodētāja izeja tiek parādīta kā teksts 320 x 240 pikseļu TFT displejā. Tas arī tiek nosūtīts uz jūsu Arduino “sērijas monitoru”, ja nevēlaties izmantot displeju.
Morzes sūtītājs
Ir iekļauts arī morzes sūtītājs. Tas ļauj praktizēt morzes sūtīšanu un darbojas šādi:
- Arduino tapā 4 tiek ģenerēts nemainīgs skaņas signāls.
- Šo signālu mēs dzirdam, izmantojot dekodētāja skaļruni, kad nospiežam morzes taustiņu.
- Tonis ir iestatīts tādā pašā frekvencē kā Goertzel filtrs, kas liek dekodētājam domāt, ka tas klausās īstu morzi … viss, ko sūtīsit, parādīsies displejā kā drukāts teksts.
Jūsu sūtīšana uzlabosies, jo dekodētājs uztver bieži sastopamas kļūdas, piemēram:
- pārāk daudz vietas starp simboliem. (piemērs: Q attēlots kā MA)
- pārāk daudz vietas starp burtiem (piemērs: TAGAD izdrukāts kā NO W)
- nepareizs kods
7. darbība. Kopsavilkums
Dekodētājs
Šajā pamācībā aprakstīts, kā izveidot morzes dekodētāju, kas pārvērš morzes kodu drukātā tekstā.
- Dekodētājs spēj atšifrēt morzi līdz vismaz 80 WPM (vārdi minūtē)
- Dekodētājs automātiski izseko saņemtā nosūtīšanas ātruma izmaiņas.
- Teksts tiek parādīts jūsu seriālajā monitorā (vai 320 x 240 TFT displeja modulī, ja tāds ir) [1]
Sūtītājs
Ir iekļauts arī morzes sūtītājs
- Sūtītājs palīdz uzlabot morzes sūtīšanas kvalitāti.
- Dekodētājs apstiprina, ka jūsu nosūtītais ir pareizs
Daļu izmaksas
Morzes dekodētāja vairoga paredzamās izmaksas, atskaitot papildu TFT displeju, ir 25 ASV dolāri.
Noklikšķiniet šeit, lai skatītu citus manus norādījumus.
Otrā balva audio izaicinājumā 2020
Ieteicams:
LabDroid: Morzes koda kodētājs/dekodētājs: 4 soļi
LabDroid: Morzes koda kodētājs/dekodētājs: Piezīme. Šo norādījumu nevar izpildīt 1: 1 jaunākajā LabDroid versijā. Es drīz to atjaunināšu. Šis projekts parādīs, ko jūs varat darīt ar LabDroid. Tā kā Hello World parasti tiek veidots, pamatojoties uz tekstu, gaismu vai skaņu, es domāju par LabDr
Koku piekariņi: 6 soļi (ar attēliem)
Koku piekariņi: izmantojot e-atkritumus vai jebkuru citu rokdarbu materiālu un saliekamu stiepli, jūs varat izveidot savu talismanu līdzīgu veidojumu, ko izmanto, lai atzīmētu vietu, notikumu vai laiku; sarunvalodā pazīstams kā koku piekariņi. Šī ideja man radās vidusskolā, bet lielākā daļa
Basys 3 Morzes dekodētājs: 11 soļi
Basys 3 Morse dekodētājs: Šis ir projekts koledžas klasei. Šis projekts ir uzrakstīts VHDL programmā ar nosaukumu Vivado. Uzdevumi izveidot visus moduļus, kas nepieciešami Morzes dekodētāja ieviešanai, izmantojot Basys 3 plāksni. Tāfele tiek izmantota, lai no swi ņemtu morzes kodu
Ar USB darbināms deglis! Šis projekts var izdegt caur plastmasu / koku / papīru (arī jautram projektam jābūt ļoti smalkam kokam): 3 soļi
Ar USB darbināms deglis! Šis projekts var izdegt caur plastmasu / koku / papīru (arī jautram projektam jābūt ļoti smalkam kokam): NEDARIET ŠO, LIETOT USB! es uzzināju, ka tas var sabojāt jūsu datoru no visiem komentāriem. ar manu datoru viss ir kārtībā. Izmantojiet 600m 5v tālruņa lādētāju. Es to izmantoju, un tas darbojas labi, un nekas nevar tikt sabojāts, ja strāvas padevei izmantojat drošības kontaktdakšu
Arduino magnētisko svītru dekodētājs: 4 soļi (ar attēliem)
Arduino magnētisko svītru dekodētājs: šī pamācība parāda, kā izmantot kādu brīvi pieejamu kodu, arduino un standarta magnētisko joslu lasītāju, lai skenētu un parādītu magnētisko joslu kartēs, piemēram, kredītkartēs, studentu apliecībās, saglabātos datus. Mani iedvesmoja ievieto šo pēc