Obsah:
- Krok 1: Seznam dílů
- Krok 2: Schéma zapojení
- Krok 3: Teorie
- Krok 4: Poznámky k návrhu
- Krok 5: Software
- Krok 6: Provoz
- Krok 7: Shrnutí
Video: Binary Tree Morse Decoder: 7 kroků (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:19
Tento návod vysvětluje, jak dekódovat morseovku pomocí Arduino Uno R3.
Dekodér, který se automaticky přizpůsobuje rychlosti odesílání, je schopen dekódovat více než 80 slov za minutu.
Příchozí kód je zobrazen jako text na vašem sériovém monitoru Arduino (nebo obrazovce TFT, pokud je k dispozici)
Tónový oscilátor byl zahrnut, pokud si přejete procvičovat posílání morse.
Funkce dekodéru:
- zobrazovací modul 320 x 240 TFT [1]
- digitální pásmový filtr Goertzel pro oddělení nežádoucích signálů.
- „binární strom Morse“pro dekódování signálu
- automatické sledování rychlosti
- při cvičení morse slyšitelný výstup
- zobrazí se příchozí i odchozí text.
Jsou rozpoznány následující znaky a symboly:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
Odhadovaná cena štítu dekodéru Morse, bez displeje TFT, je 25 $. [1]
snímky
- Na titulní fotografii je plně sestavená jednotka
- Video ukazuje, jak dekodér pracuje
Poznámky
[1]
- Modul displeje TFT je volitelný, protože veškerý text je odesílán do vašeho „sériového monitoru“Arduino.
- Modul TFT je popsán v mém instruktážním
Krok 1: Seznam dílů
Následující části byly získány z
1 pouze prototyp štítu pro Arduino UNO R3, rozteč 2,54 mm
Následující části byly získány lokálně:
- 1 pouze duální operační zesilovač LM358
- 1 pouze zelená LED
- 1 pouze LED klip
- 1 pouze elektretová kapsle mikrofonu
- 1 pouze normálně otevřené tlačítko
- 1 pouze 8kolíková zásuvka DIP
- 2 pouze 330 ohmové odpory
- 2 pouze 2K2 odpory
- 5 pouze 10K ohmové odpory
- 2 pouze odpory 56K ohmů
- 2 pouze 1uF kondenzátor
- 1 pouze 10uF kondenzátor
Následující díly jsou volitelné:
- 1 pouze 2,2 palce TFT SPI LCD zobrazovací modul 240*320 ILI9341 se slotem pro kartu SD pro Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
- Morseova klávesa / tlačítko
- 1 pouze tranzistor BC548 NPN
- 1 pouze 1palcový reproduktor
- 1 pouze odpor 33K ohmů
- 1 pouze 3,5 mm mono konektor (pro morseův klíč)
- 1 pouze 3,5 mm mono zásuvka (pro morseový klíč)
- 3 pouze 9mm M3 závitové nylonové podložky
- 1 pouze plastový box ABS 130 x 68 x 44 mm
- 5 pouze 2kolíkové pravoúhlé konektory
Odhadovaná cena štítu dekodéru Morse, snížená o volitelný displej TFT, je 25 USD. [1]
Poznámky
[1]
Seznam dílů pro volitelný modul displeje TFT 320 x 240 je uveden v mém instruktážním
[2]
Pokud chcete použít odesílatele, je vyžadován morseův klíč nebo robustní tlačítko.
Krok 2: Schéma zapojení
snímky
Fotografie 1 ukazuje schéma zapojení pro Morseův dekodér. Rezistor 330 ohmů v sérii s morseovou klávesou omezuje výstupní proud D4 v případě náhodného zkratu k zemi … zvýšení jeho hodnoty snižuje zvukový výstup z reproduktoru. Z tohoto důvodu jsem jej nepřidal na štít, ale připojil jsem ho přímo ke konektoru morseových klíčů, aby bylo nastavení snadné
Fotografie 2 ukazuje odpovídající štít. Štít je z mého instruktážního https://www.instructables.com/id/Arduino-TFT-Grap…, do kterého jsem přidal zesilovač mikrofonu a tónový oscilátor. [1]
Fotografie 3 ukazuje dokončený štít připevněný k Arduinu. Pokud chcete text zobrazit na svém „sériovém monitoru“Arduino, nejsou vyžadovány žádné další součásti
Na fotografii 4 je dekodér částečně zabalený. Ve víku byl vyříznut otvor pro sledování displeje. Reproduktor a mikrofon byly na pouzdro přilepeny za tepla. Před montáží reproduktoru vyvrtejte do víka několik otvorů pro reproduktory. Středová zásuvka na víku je pro rozšiřující mikrofon … bez toho musí být dekodér umístěn blízko reproduktoru, což není vždy možné
Na fotografii 5 je obrazovka TFT. K okrajům displeje byla připevněna černá elektrická páska … tato páska zabraňuje úniku světla a maskuje jakékoli nesouosost mezi displejem a otvorem ve víku
Důležité
[1]
Arduino s velkým USB konektorem vyžaduje vrstvu elektrické pásky mezi USB konektorem a štítem Arduino. Náhodné šortky jsou možné bez pásky, protože vůle je malá. Páska není vyžadována pro Arduino, které mají malé konektory
Krok 3: Teorie
Každé písmeno morseovky obsahuje řadu krátkých a dlouhých tónů nazývaných „tečky“a „pomlčky“.
- tečka (.) je 1 jednotka na délku
- pomlčka (_) má délku 3 jednotky
- mezera mezi písmeny je 1 jednotka
- mezera mezi písmeny je 3 jednotky
- mezera mezi slovy je 7 jednotek
Můžeme určit, zda je příchozí tón tečka nebo pomlčka, porovnáním jeho trvání s referenčním tónem o délce 2 jednotek.
- tečka je menší než 2 jednotky
- pomlčka je větší než 2 jednotky
Existují dvě zřetelně odlišné metody pro dekódování příchozího vzoru teček a pomlček:
- lineární vyhledávání
- binární strom (také známý jako dichotomické vyhledávání)
Lineární vyhledávání
Jednou z běžných metod je vytvoření řady postav a jejich odpovídajících morseových vzorů. Například každý z následujících znaků by byl uložen jako:
- A. _
- B _…
- C _. _.
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Každé písmeno vyžaduje 6 buněk… 1 pro samotné písmeno a 5 pro (.)’A (_)’ s. K tomu potřebujeme pole znaků [36] [6] s celkem 216 buňkami. Nepoužité buňky jsou obvykle vyplněny nulou nebo prázdným místem.
Abychom dekódovali příchozí tečky a pomlčky, musíme porovnat vzor teček/pomlček každého příchozího písmene s našimi vzory referenčních znaků.
I když tato metoda funguje, je extrémně pomalá.
Řekněme, že máme 26 písmen ('A',.. 'Z') a číslice ('0', … '9') uložených v poli, pak musíme provést 36 vyhledávání, každé s až 5 dílčími vyhledáváními, což je celkem 36*5 = 180 vyhledávání k dekódování číslice '9'.
Binární strom
Binární vyhledávání je mnohem rychlejší, protože není nutné žádné vyhledávání.
Na rozdíl od lineárního vyhledávání, které vyžaduje uložení znakových i morseových vzorů, binární strom ukládá pouze znaky, což znamená, že velikost pole je menší.
Rozdělil jsem svůj binární strom (foto1) na dvě poloviny (fotografie 2 a 3), aby byl čitelnější.
Abychom našli postavu, posuneme ukazatel doleva pokaždé, když uslyšíme tečku, a posuneme ukazatel doprava pokaždé, když uslyšíme pomlčku. Po každém tahu snížíme vzdálenost ukazatele na další tah na polovinu… odtud název binární strom.
K dekódování písmene „9“(pomlčka, pomlčka, pomlčka, pomlčka, tečka) je zapotřebí 5 tahů … 4 doprava a 1 doleva, což ponechá ukazatel přímo nad „9“.
Pět tahů je výrazně rychlejší než 180 vyhledávání !!!!!
Pole binárních znaků je také menší … 26 písmen a 10 číslic vyžaduje pouze pole řádků 64 x 1. Rozhodl jsem se vytvořit pole se 128 znaky, abych mohl dekódovat interpunkci.
Krok 4: Poznámky k návrhu
Morse je obtížné dekódovat v přítomnosti rušivých signálů. Nežádoucí signály musí být odmítnuty … to vyžaduje nějaký filtr.
Existuje mnoho možností:
- Smyčky fázového závěsu
- Filtry induktor-kondenzátor
- Aktivní filtry rezistor-kondenzátor
- Digitální zpracování signálu, jako je Fast Fourierova transformace nebo Goertzelův filtr.
Metody 1, 2, 3 vyžadují externí součásti, které jsou objemné.
Metoda 4 nevyžaduje žádné externí komponenty … frekvence jsou detekovány pomocí matematických algoritmů.
Rychlá Fourierova transformace (FFT)
Jednou z metod detekce přítomnosti tónu v komplexním průběhu je použití rychlé Fourierovy transformace
Fotografie 1 ukazuje, jak FFT (Fast Fourierova transformace) rozděluje zvukové spektrum na „koše“.
Fotografie 2 ukazuje, jak „zásobníky“FFT reagují na signál … v tomto případě 800 Hz. Pokud by byl přítomen druhý signál, řekněme 1 500 Hz, viděli bychom dvě reakce … jednu při 800 Hz a druhou při 1500 Hz.
Teoreticky lze dekodér morseovky vytvořit monitorováním výstupní úrovně konkrétního frekvenčního zásobníku FFT … velké číslo představuje přítomnost tečky nebo pomlčky … malé číslo představuje žádný signál.
Takový dekodér morseovky by mohl být vyroben monitorováním „bin 6“na fotografii 2, ale s tímto přístupem je několik věcí špatně:
- chceme pouze jeden frekvenční bin … zbytek jsou zbytečné výpočty
- frekvenční přihrádky se nemusí objevit přesně na frekvenci zájmu
- je relativně pomalý (20 mS na smyčku Arduino ()
Další metodou je použít Goertzelův filtr.
Goertzelův filtr
Goertzelův filtr je podobný FFT, ale má pouze jeden frekvenční zásobník.
Foto3 ukazuje frekvenční odezvu Goertzelova filtru na diskrétní zvukové kroky.
Fotografie 4 je pohybem stejného filtru ve stejném frekvenčním rozsahu.
Rozhodl jsem se „jít“s Goertzelovým algoritmem jako:
- Doba smyčky Arduino () pomocí Goertzelova algoritmu byla 14 mS (milisekund) oproti 20 mS (milisekund) pro řešení FFT využívající knihovnu Arduino „fix_FFT“.
- Střední frekvenci pásmového filtru Goertzel lze snadno nastavit.
- Šířka pásma je přibližně 190 Hz.
Fotografie 5 ukazuje numerický výstup z 900Hz Goertzelova filtru, když je detekován tón. Nastavil jsem svůj práh tónu na hodnotu 4000… hodnoty nad 4000 označují tón.
Teoreticky stačí vyladit filtr na příjemnou poslechovou frekvenci. Bohužel zvukový výstup z mého 1palcového monitorovacího reproduktoru rychle klesá pod 900Hz. Abych se vyhnul problémům, používám filtrační frekvenci 950 Hz. Potřebné vzorce pro výpočet alternativních frekvencí filtrů najdete v záhlaví mého kódu.
Dekódování
Dekódování teček a pomlček není tak snadné, jak se na první pohled zdá.
Dokonalá morse je definována jako:
- tečka = 1 jednotka
- mezery uvnitř písmene = 1 jednotka
- pomlčka = 3 jednotky
- mezera mezi písmeny = 3 jednotky
- mezera mezi slovy = 7 jednotek
K dekódování dokonalé morse jednoduše potřebujeme trvání referenčního tónu 2 jednotky
- tečka <2 jednotky
- prostor prvků <2 jednotky
- pomlčka> 2 jednotky
- písmeno _prostor> 2 jednotky
- word_space> 6 jednotek (tj. 3 x referenční jednotky)
To funguje pro strojovou morse, ale v „reálném světě“:
- rychlost odesílání se liší
- doba trvání jednotlivých teček se liší
- doba trvání každé pomlčky se liší
- písmena E, I, S, H, 5 obsahují pouze tečky, které jsou průměrné k délce bodů
- písmena T, M, O, 0 obsahují pouze pomlčky, které jsou průměrem délky pomlčky
- mezery ve slovech nemusí přijít
- blednutí vytváří chyby, ze kterých se dekodér musí obnovit.
- poškozené signály v důsledku rušení
Písmena obsahující pouze tečky a pomlčky jsou částečně vyřešena, pokud:
odhadujeme referenční dobu, dokud neobdržíme platnou tečku a platnou pomlčku. Používám 200 milisekund, což je platné, pokud je rychlost odesílání mezi 6 WPM (slova za minutu) a 17 WPM. Pokud se učíte morse, bude možná nutné tuto hodnotu zvýšit. Součástí softwaru je tabulka rychlostí
Změny rychlosti jsou vyřešeny, pokud:
- provádíme klouzavý průměr pro každou tečku a každou pomlčku a
- přepočítat referenční dobu po přijetí každého symbolu
Mezery ve slovech a mezery ve slovech, které nepřicházejí, jsou vyřešeny, pokud:
- pamatujte si čas posledního přechodu na zadní hraně (tón na žádný tón),
- restartujte algoritmus po každém písmenu,
- vypočítat uplynulý čas při čekání na další přechod náběžné hrany (bez tónu k tónu) a
- pokud bylo překročeno 6 časových jednotek, vložte mezeru.
Morseův oscilátor
Zpočátku jsem zkoušel některé piezo bzučáky, ale našel jsem:
- frekvence byla pevná
- výstupní frekvence byla příliš vysoká pro delší poslech
- piezos měl tendenci odcházet z Goertzelova pásma
Potom jsem zkusil řídit akustický měnič s 750Hz čtvercovou vlnou, ale zjistil jsem, že má rezonanci, která odfiltruje 1. a 3. harmonickou. Fotografie 6 ukazuje výstup zesilovače mikrofonu na 750Hz čtvercovou vlnu … vidíme 5. harmonickou !!!
Pak jsem se uchýlil k použití malého reproduktoru. Fotografie 7 ukazuje výstup mikrofonu na 750Hz čtvercovou vlnu, která byla odeslána do malého reproduktoru … tentokrát vidíme základní … ne 5. harmonickou. Filtr Goertzel ignoruje všechny harmonické.
Poznámky
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
Krok 5: Software
Instalace
- Stáhněte si přiložený soubor MorseCodeDecoder.ino [1]
- Zkopírujte obsah tohoto souboru do nové skici Arduino
- Uložte skicu jako „MorseCodeDecoder“(bez uvozovek)
- Zkompilujte a nahrajte skicu do svého Arduina
Aktualizace softwaru 23. července 2020
Do přiloženého souboru "MorseCodeDecoder6.ino" byly přidány následující funkce
- okno „Exact Blackman“[2]
- „Noise_blanker“
Nastavení:
- zvyšte úroveň zvuku přijímače, dokud LED dioda nezačne blikat, a pak zhasněte
- nyní nalaďte svůj přijímač, dokud LED dioda nebliká v kroku s přicházející morseou
- Noise_blanker byl nastaven tak, aby ignoroval hlukové záblesky až 8 mS (čas jedné smyčky)
- prahovou hodnotu hluku lze upravit nastavením Debug = true a sledováním vašeho sériového plotru
Poznámka
[1]
Pokud si přejete zobrazit text, nastavte svůj sériový monitor Arduino na 115200 baudů.
[2]
- Foto 1… Přesné Blackmanovo okno
- Foto 2… Goertzelův filtr bez okna Exact Blackman
- Photo 3,,, Goertzel filter with Exact Blackman window applied
Krok 6: Provoz
Dekodér
Při poslechu morse umístěte jednotku vedle reproduktoru.
- Elektretová mikrofonní kapsle zachytí morseův signál z vašeho reproduktoru.
- Výstup elektretového mikrofonu je poté 647krát (56 dB) zesílen, než je předán do Arduina ke zpracování.
- Digitální pásmový filtr Goertzel extrahuje signál Morse z hluku.
- Dekódování se provádí pomocí binárního stromu.
- Výstup dekodéru je zobrazen jako text na TFT displeji 320 x 240 pixelů. Pokud si nepřejete používat displej, je také odeslán do vašeho „sériového monitoru“Arduino.
Morse Sender
Zahrnut byl také odesílatel morse. To vám umožní procvičovat odesílání morse a funguje následovně:
- Na pinu Arduino 4 je generován konstantní slyšitelný tón.
- Tento tón slyšíme prostřednictvím reproduktoru dekodéru, kdykoli stiskneme morseovu klávesu.
- Tón je nastaven na stejnou frekvenci jako Goertzelův filtr, který oklamá dekodér, aby si myslel, že poslouchá skutečnou morse … cokoli, co odešlete, se na displeji zobrazí jako tištěný text.
Vaše odesílání se zlepší, když dekodér zachytí běžné chyby, jako například:
- příliš mnoho prostoru mezi symboly. (příklad: Q pinted as MA)
- příliš mnoho mezery mezi písmeny (příklad: NYNÍ vytištěno jako ŽÁDNÝ W)
- nesprávný kód
Krok 7: Shrnutí
Dekodér
Tento návod popisuje, jak vytvořit dekodér morse, který převádí morseovku na tištěný text.
- Dekodér je schopen dekódovat morse až minimálně 80 WPM (slova za minutu)
- Dekodér automaticky sleduje změny přijaté rychlosti odesílání.
- Text se zobrazí na vašem sériovém monitoru (nebo na zobrazovacím modulu 320 x 240 TFT, je -li součástí) [1]
Odesílatel
Zahrnut byl také odesílatel morse
- Odesílatel vám pomůže zlepšit kvalitu odesílání morse.
- Dekodér potvrzuje, že to, co jste odeslali, je správné
Náklady na díly
Odhadovaná cena štítu dekodéru Morse, snížená o volitelný TFT displej, je 25 $.
Kliknutím sem zobrazíte mé další pokyny.
Druhá cena v Audio Challenge 2020
Doporučuje:
Creative Switch Fairy Tree: 23 kroků (s obrázky)
Creative Switch Fairy Tree: Ukážu vám, jak vytvořit tento zářící pohádkový strom. Přepínač je víla sama a světla se rozsvítí, pokud je umístěna na svém místě, a znovu se vypne, pokud je přesunuta.TIP: Záře není ve světle dobře vidět, takže ji zapněte v
The Ultimate Binary Watch: 12 kroků (s obrázky)
The Ultimate Binary Watch: Nedávno jsem se seznámil s konceptem binárních hodinek a začal jsem provádět průzkum, abych zjistil, jestli bych si je mohl postavit sám. Nebyl jsem však schopen najít existující design, který by byl funkční i stylový zároveň. Tak jsem se rozhodl
IR DÁLKOVÝ DECODER S POUŽITÍM ARDUINO .: 4 kroky (s obrázky)
IR DÁLKOVÝ DECODER S POUŽITÍM ARDUINO .: Toto je další uživatelsky přívětivý návod na výrobu velmi jednoduchého IR dálkového dekodéru pomocí Arduina a IR přijímače. Tento tutoriál bude pokrývat vše od nastavení softwaru až po používání IR přijímače a dekódování signálů. Tyto
Mho Better Resistor Value Decoder Plushie: 4 kroky (s obrázky)
Mho Better Resistor Value Decoder Plushie: Odpor je marný, přinejmenším ve snaze zjistit hodnotu vašeho rezistoru, pokud nemáte kód barvy uložený v paměti. Nechal jsem ležet jednoho z těchto plyšáků elektronických součástek Adafruit Circuit Playground, kteří jen čekali na hacking
K-2 Robotics First Day: The Power of the Project Tree !: 8 kroků (s obrázky)
K-2 Robotics First Day: The Power of the Project Tree !: První den Robotics Level 1 (pomocí Racer Pro-bots ®) seznamujeme studenty s " jejich roboty " a poté jim ukázat Project Challenge-Tree ™ Ne 1. Projektová výzva-stromy vytvářejí podmínky pro aktivní vzdělávací zónu &obchod;