INHOUDSOPGAWE:
- Stap 1: Onderdele lys
- Stap 2: Kringdiagram
- Stap 3: Teorie
- Stap 4: Ontwerpnotas
- Stap 5: sagteware
- Stap 6: Bediening
- Stap 7: Opsomming
Video: Binary Tree Morse Decoder: 7 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:24
Hierdie instruksie verduidelik hoe u Morse -kode kan ontsyfer met 'n Arduino Uno R3.
Die dekodeerder, wat outomaties aanpas by die stuurspoed, kan morse tot ten minste 80 woorde per minuut dekodeer.
Die inkomende kode word as teks op u Arduino Serial Monitor (of TFT -skerm as dit aangebring is) vertoon
'N Toon -ossillator is ingesluit as u wil oefen om morse te stuur.
Die dekodeerder beskik oor:
- 'n 320 x 240 TFT -vertoningsmodule [1]
- 'n Goertzel digitale bandpasfilter vir die skeiding van ongewenste seine.
- 'n 'Binary Morse Tree' vir die dekodering van die sein
- outomatiese spoedopsporing
- 'n hoorbare uitset by die beoefening van morse
- beide inkomende en uitgaande teks word vertoon.
Die volgende karakters en simbole word herken:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
Die beraamde koste van die morse -dekodeerderskerm, minus die TFT -skerm, is $ 25. [1]
Beelde
- Die voorbladfoto toon 'n volledig saamgestelde eenheid
- Die video wys hoe die dekodeerder werk
Notas
[1]
- Die TFT -vertoningsmodule is opsioneel, aangesien alle teks na u Arduino "Serial Monitor" gestuur word.
- Die TFT-module word beskryf in my instruksionele
Stap 1: Onderdele lys
Die volgende onderdele is verkry vanaf
1 enigste prototipe skild vir Arduino UNO R3, 2,54 mm steek
Die volgende dele is plaaslik verkry:
- 1 slegs LM358 dubbele opamp
- 1 slegs LED groen
- 1 slegs LED -clip
- 1 kapsule slegs met elektretmikrofoon
- 1 slegs die knoppie wat normaalweg oop is
- 1 slegs 8-pins DIP-aansluiting
- 2 slegs 330 ohm weerstande
- 2 slegs 2K2 weerstande
- 5 slegs 10K ohm weerstande
- 2 slegs 56K ohm weerstande
- 2 slegs 1uF kapasitor
- 1 slegs 10uF kapasitor
Die volgende dele is opsioneel:
- 1 slegs 2,2 duim TFT SPI LCD -skermmodule 240*320 ILI9341 met SD -kaartgleuf vir Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
- Morssleutel / drukknop
- 1 slegs BC548 NPN transistor
- 1 slegs 1 duim luidspreker
- 1 weerstand slegs 33K ohm
- 1 slegs 3,5 mm mono -prop (vir morse -sleutel)
- 1 slegs 3,5 mm mono -aansluiting (vir morse -sleutel)
- 3 slegs 9 mm M3 -tapafstandhouers van M3
- 1 slegs 130 x 68 x 44 mm ABS -plastiekboks
- 5 slegs 2-pins reghoekige verbindings
Die beraamde koste van die morse -dekodeerderskerm, minus die opsionele TFT -skerm, is $ 25. [1]
Notas
[1]
Die onderdele-lys vir die opsionele 320 x 240 TFT-vertoningsmodule word in my instruksionele
[2]
'N Morsleutel of 'n stewige drukknop is nodig as u die sender wil gebruik.
Stap 2: Kringdiagram
Beelde
Foto 1 toon die kringdiagram van die morse -dekodeerder. Die weerstand van 330 ohm in serie met die morse -sleutel beperk die D4 -uitsetstroom in die geval van 'n toevallige kort tot grond … die verhoging van die waarde verminder die klankuitset van die luidspreker. Om hierdie rede het ek dit nie by die skild gevoeg nie, maar dit direk aan die moersleutelaansluiting gekoppel om dit makliker te stel
Foto 2 toon 'n bypassende skild. Die skild is van my instrukteerbare https://www.instructables.com/id/Arduino-TFT-Grap … waaraan ek die mikrofoonversterker en toon-ossillator bygevoeg het. [1]
Foto 3 toon die voltooide skild wat aan 'n Arduino geheg is. Geen ander komponente is nodig om die teks op u Arduino "Serial Monitor" te sien nie
Foto 4 toon die dekodeerder gedeeltelik in boks. 'N Gat is in die deksel gesny om die skerm te sien. Die luidspreker en die mikrofoon is vasgeplak aan die tas. Boor 'n paar luidsprekergate in die deksel voordat u die luidspreker monteer. Die middelste aansluiting op die deksel is vir 'n verlengbare mikrofoon … sonder hierdie moet die dekodeerder naby die luidspreker geplaas word, wat nie altyd moontlik is nie
Foto 5 toon die TFT -skerm. Swart elektriese band is aan die rande van die skerm vasgemaak … hierdie band voorkom lekkasie en verdoesel die verkeerde posisie tussen die skerm en die opening in die deksel
Belangrik
[1]
Arduino's met 'n groot USB -aansluiting benodig 'n laag elektriese band tussen die USB -aansluiting en die Arduino -skild. Toevallige kortbroek is moontlik sonder die band, aangesien die speling klein is. Die band is nie nodig vir Arduinos met klein verbindings nie
Stap 3: Teorie
Elke morse -kode letter bevat 'n reeks kort- en langduurstone wat "kolletjies" en "strepies" genoem word.
- 'n punt (.) is 1 eenheid lank
- 'n streep (_) is 3 eenhede lank
- die spasie tussen letterelemente is 1 eenheid
- die spasie tussen letters is 3 eenhede
- die spasie tussen woorde is 7 eenhede
Ons kan bepaal of die inkomende toon 'n punt of 'n streep is, deur die duur daarvan te vergelyk met 'n verwysingstoon van 2 eenhede lank.
- 'n kolletjie is minder as 2 eenhede
- 'n streep is groter as 2 eenhede
Daar is twee verskillende metodes om die inkomende patroon van kolletjies en strepies te ontsyfer:
- lineêre soektog
- binêre boom (ook bekend as 'n digotomiese soektog)
Lineêre soektog
'N Algemene metode is om 'n verskeidenheid karakters en hul bypassende morspatrone te skep. Elkeen van die volgende karakters word byvoorbeeld gestoor as:
- A. _
- B _…
- C _. _.
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Elke letter benodig 6 selle … 1 vir die letter self en 5 vir die (.) En (_) s. Om dit te kan doen, benodig ons 'n reeks letters [36] [6] met 'n totaal van 216 selle. Ongebruikte selle word gewoonlik gevul met 'n nul of 'n leegte.
Om die inkomende kolletjies en strepies te dekodeer, moet ons die kolletjie/streeppatroon van elke inkomende letter met ons verwysingskarakterpatrone vergelyk.
Alhoewel hierdie metode werk, is dit baie stadig.
Gestel ons het 26 letters ('A',.. 'Z') en die syfers ('0', … '9') in 'n skikking gestoor, dan moet ons 36 soektogte uitvoer, elk met tot 5 sub-soektogte, Dit is 'n totaal van 36*5 = 180 soektogte om die getal '9' te dekodeer.
Binêre Boom
'N Binêre soektog is baie vinniger, aangesien dit nie nodig is om te soek nie.
Anders as die lineêre soektog, wat beide die karakter en die morse -patrone moet stoor, stoor die binêre boom slegs die karakters, wat beteken dat die skikkinggrootte kleiner is.
Ek het my binêre boom (foto1) in twee helftes verdeel (foto's 2 en 3) om dit meer leesbaar te maak.
Om 'n karakter te vind, skuif ons 'n wyser na links elke keer as ons 'n kolletjie hoor en beweeg die wyser elke keer as ons 'n streep hoor. Na elke beweging halveer ons die wyserafstand vir die volgende stap … vandaar die naam binêre boom.
Om die letter '9' (streep, streep, streep, streep, kolletjie) te ontsyfer, benodig 5 bewegings … 4 na regs en 1 na links, wat die wyser direk oor die '9' laat.
Vyf bewegings is aansienlik vinniger as 180 soektogte !!!!!
Die binêre karakterskikking is ook kleiner … 26 letters en 10 syfers benodig slegs 'n 64 x 1 reëlreeks. Ek het gekies om 'n skikking van 128 tekens te skep sodat ek leestekens kan dekodeer.
Stap 4: Ontwerpnotas
Morse is moeilik om te dekodeer in die teenwoordigheid van interfererende seine. Die ongewenste seine moet verwerp word … dit verg 'n soort filter.
Daar is baie moontlikhede:
- Faseslote lusse
- Induktor-kapasitor filters
- Weerstand-kondensator aktiewe filters
- Digitale seinverwerking soos Fast Fourier Transform, of die Goertzel -filter.
Metodes 1, 2, 3 vereis eksterne komponente wat lywig is.
Metode 4 vereis geen eksterne komponente nie … die frekwensies word opgespoor met behulp van wiskundige algoritmes.
Fast Fourier Transform (FFT)
Een metode om die teenwoordigheid van 'n toon in 'n komplekse golfvorm op te spoor, is om die Fast Fourier -transformasie te gebruik
Foto 1 toon aan hoe FFT (Fast Fourier Transform) die klankspektrum in “asblikke” verdeel.
Foto 2 toon hoe die FFT "asblikke" reageer op 'n sein … in hierdie geval 800Hz. As 'n tweede sein van sê 1500Hz teenwoordig was, sou ons twee reaksies sien … een by 800Hz en 'n ander op 1500Hz.
In teorie kan 'n morse -kode -dekodeerder gemaak word deur die uitsetvlak van 'n spesifieke FFT -frekwensiebak te monitor … 'n groot getal verteenwoordig die teenwoordigheid van 'n kolletjie of 'n streep … 'n klein getal stel geen sein voor nie.
So 'n morse -kode -dekodeerder kan gemaak word deur 'bin 6' op foto 2 te monitor, maar daar is 'n aantal dinge wat verkeerd is met hierdie benadering:
- ons wil net een frekwensiebak hê … die res is verspilde berekeninge
- die frekwensiebakke verskyn moontlik nie presies op die frekwensie van rente nie
- dit is relatief stadig (20mS per Arduino -lus ()
'N Ander metode is om 'n Goertzel -filter te gebruik.
Goertzel filter
Die Goertzel -filter is soortgelyk aan FFT, maar het slegs 'n enkele frekwensiebak.
Foto3 toon die frekwensierespons van 'n Goertzel -filter op diskrete klankstappe.
Foto 4 is 'n sweep van dieselfde filter oor dieselfde frekwensiebereik.
Ek het besluit om te gaan met die Goertzel -algoritme as:
- Die tyd van die Arduino -lus () met behulp van die Goertzel -algoritme was 14mS (millisekondes) teenoor 20mS (millisekondes) vir 'n FFT -oplossing met behulp van die Arduino 'fix_FFT' -biblioteek.
- Dit is maklik om die middelfrekwensie van 'n Goertzel -banddeurlaatfilter in te stel.
- Die bandwydte is ongeveer 190 Hz.
Foto 5 toon die numeriese uitset van 'n 900Hz Goertzel -filter wanneer 'n toon opgespoor word. Ek het my toondrempel ingestel op 'n waarde van 4000 … waardes bo 4000 dui 'n toon aan.
In teorie hoef u net u filter op 'n gemaklike luisterfrekwensie in te stel. Ongelukkig daal die klankuitset van my 1 duim moniteringsluidspreker vinnig onder 900Hz. Om probleme te vermy, gebruik ek 'n filterfrekwensie van 950Hz. Die nodige formules vir die berekening van alternatiewe filterfrekwensies word in my kodeopskrif gevind.
Dekodering
Dit is nie so maklik om die kolletjies en strepies te ontsyfer as wat dit eers lyk nie.
Perfekte morse word gedefinieer as:
- kolletjie = 1 eenheid
- spasies binne letter = 1 eenheid
- streep = 3 eenhede
- spasie tussen letters = 3 eenhede
- spasie tussen woorde = 7 eenhede
Om die perfekte morse te ontsyfer, benodig ons eenvoudig 'n verwysingstoonduur van 2 eenhede
- kolletjie <2 eenhede
- elementruimte <2 eenhede
- streep> 2 eenhede
- letter _ruimte> 2 eenhede
- woordruimte> 6 eenhede (dit wil sê 3 x verwysingseenhede)
Dit werk vir masjienmors, maar in die 'regte wêreld':
- die stuurspoed wissel
- die duur van elke kolletjie wissel
- die duur van elke streep wissel
- die letters E, I, S, H, 5 bevat slegs kolletjies wat gemiddeld is tot die puntduur
- die letters T, M, O, 0 bevat slegs strepies wat gemiddeld is tot die strepiesduur
- woordgapings kom moontlik nie aan nie
- vervaag skep foute waaruit die dekodeerder moet herstel.
- korrupte seine as gevolg van inmenging
Letters wat slegs kolletjies en strepies bevat, word gedeeltelik opgelos as:
ons skat die verwysingsduur totdat ons 'n geldige punt en 'n geldige streep ontvang het. Ek gebruik 200 millisekondes, wat geldig is as die stuurspoed tussen 6 WPM (woorde per minuut) en 17 WPM is. Miskien moet u hierdie waarde verhoog as u morse leer. 'N Sneltabel is by die sagteware ingesluit
Spoedvariasies word opgelos as:
- ons voer 'n rollende gemiddelde op elke punt en elke streep en
- herbereken die verwysingsduur nadat elke simbool ontvang is
Woordgapings en woordgapings wat nie kom nie, word opgelos as ons:
- onthou die tyd van die laaste oorgang (toon tot no-toon)
- herbegin die algoritme na elke letter,
- bereken die tyd wat verloop het terwyl u wag op die volgende oorgang (sonder toon tot toon) en
- voeg 'n spasie in as 6 tydseenhede oorskry is.
Morse Ossillator
Ek het aanvanklik 'n paar Piezo -gonsers probeer, maar gevind:
- die frekwensie is vasgestel
- die uitsetfrekwensie was te hoog vir lang luister
- die piezos het geneig om uit die Goertzel -band te dryf
Ek het toe probeer om 'n akoestiese transducer met 'n vierkante golf van 750 Hz te bestuur, maar ek het gevind dat dit 'n resonansie het wat die eerste en derde harmonie uitfiltreer. Foto 6 toon die mikrofoonversterker se uitvoer na 'n 750Hz vierkantgolf … ons sien die 5de harmoniese !!!
Daarna het ek 'n klein luidspreker gebruik. Foto 7 toon die mikrofoonuitgang na 'n 750Hz vierkante golf wat na 'n klein luidspreker gestuur is … hierdie keer sien ons die fundamentele … nie die 5de harmoniese nie. Die Goertzel -filter ignoreer harmonieë.
Notas
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
Stap 5: sagteware
Installasie
- Laai die aangehegte lêer MorseCodeDecoder.ino [1] af
- Kopieer die inhoud van hierdie lêer na 'n nuwe Arduino -skets
- Stoor die skets as "MorseCodeDecoder" (sonder aanhalings)
- Stel die skets op en laai dit op na u Arduino
Sagteware -opdatering 23 Julie 2020
Die volgende funksies is bygevoeg tot die aangehegte lêer "MorseCodeDecoder6.ino"
- 'n "Exact Blackman" venster [2]
- 'n "Noise_blanker"
Aanpassing:
- verhoog die klankvlak van u ontvanger totdat die LED begin flikker en dan weer afskakel
- Stel nou u ontvanger in totdat die LED in pas met die inkomende morse flikker
- die Noise_blanker is ingestel om geraas tot 8mS (een lustyd) te ignoreer
- die ruisdrempel kan aangepas word deur Debug = true in te stel en na u Serial Plotter te kyk
Let op
[1]
Stel u Arduino Serial Monitor op 115200 bauds as u ook die teks wil sien.
[2]
- Foto 1 … Presiese Blackman -venster
- Foto 2 … Goertzel -filter sonder die presiese Blackman -venster
- Foto 3,,, Goertzel -filter met Exact Blackman -venster toegepas
Stap 6: Bediening
Dekodeerder
Plaas die eenheid langs u luidspreker as u na morse luister.
- Die elektretmikrofoonkapsel neem die morsesin van u luidspreker op.
- Die uitset van die elektretmikrofoon word dan 647 keer (56dB) versterk voordat dit na die Arduino gestuur word vir verwerking.
- 'N Goertzel digitale banddeurlaatfilter onttrek die morse -sein uit die geraas.
- Dekodering word gedoen met behulp van 'n binêre boom.
- Die dekodeerderuitset word as teks op 'n 320 x 240 pixel TFT -skerm vertoon. Dit word ook na u Arduino 'Serial Monitor' gestuur as u nie 'n skerm wil gebruik nie.
Morse sender
'N Moerse sender is ook ingesluit. Hiermee kan u oefen om morse te stuur en soos volg te werk:
- 'N Konstante hoorbare toon word op Arduino -pen 4 gegenereer.
- Ons hoor hierdie toon via die luidspreker van die dekodeerder wanneer ons op die morse-toets druk.
- Die toon is op dieselfde frekwensie as die Goertzel -filter, wat die dekodeerder dwaas laat dink dat hy na die regte morse luister … wat u ook al stuur, sal as gedrukte teks op die skerm verskyn.
U stuur sal verbeter namate die dekodeerder algemene foute opspoor, soos:
- te veel spasie tussen simbole. (voorbeeld: Q geprent as MA)
- te veel spasie tussen letters (byvoorbeeld: NOU gedruk as NO W)
- verkeerde kode
Stap 7: Opsomming
Dekodeerder
Hierdie instruksies beskryf hoe u 'n morse -dekodeerder kan maak wat morse -kode omskakel in gedrukte teks.
- Die dekodeerder kan morse tot ten minste 80 WPM (woorde per minuut) ontsyfer
- Die dekodeerder volg outomaties variasies in die ontvangde stuurspoed.
- Die teks word op u seriële monitor vertoon (of op 'n 320 x 240 TFT -skermmodule indien toegerus) [1]
Afsender
'N Moerse sender is ook ingesluit
- Die sender help u om die kwaliteit van u morsstuur te verbeter.
- Die dekodeerder bevestig dat dit wat u gestuur het, korrek is
Koste van onderdele
Die beraamde koste van die morse -dekodeerderskerm, minus die opsionele TFT -skerm, is $ 25.
Klik hier om my ander instruksies te sien.
Tweede prys in die Audio Challenge 2020
Aanbeveel:
LabDroid: Morse Code Encoder/Decoder: 4 stappe
LabDroid: Morse Code Encoder/Decoder: Let wel: hierdie instruksie kan nie 1: 1 in die nuutste weergawe van LabDroid gerealiseer word nie. Ek sal dit binnekort opdateer. Hierdie projek sal jou wys wat jy met LabDroid kan doen. Aangesien 'n Hello World gewoonlik gemaak word op grond van teks, lig of klank, het ek vir LabDr gedink
The Ultimate Binary Watch: 12 stappe (met foto's)
The Ultimate Binary Watch: Ek het onlangs kennis gemaak met die konsep van binêre horlosies en begin ondersoek instel om te sien of ek een vir myself kan bou. Ek kon egter nie 'n bestaande ontwerp vind wat tegelyk funksioneel en stylvol was nie. So, ek het besluit
Escape Room Decoder Box: 7 stappe (met foto's)
Escape Room Decoder Box: Escape Rooms is ontsettend prettige aktiwiteite wat baie boeiend en ideaal is vir spanwerk. Het u al ooit daaraan gedink om u eie Escape Room te skep? Met hierdie dekodeerder kan u goed op pad wees! Nog beter het u daaraan gedink om es te gebruik
Mho Better Resistor Value Decoder Plushie: 4 stappe (met foto's)
Mho Better Resistor Value Decoder Plushie: Weerstand is tevergeefs, ten minste om die waarde van u weerstand te probeer uitvind as u nie die kleurkode onthou nie. Ek het een van hierdie Adafruit Circuit Playground elektroniese komponentplushies laat lê en wag net om te wees
Arduino Magnetic Stripe Decoder: 4 stappe (met foto's)
Arduino Magnetic Stripe Decoder: Hierdie instruksies wys hoe u 'n vrylik beskikbare kode, 'n arduino en 'n standaard magnetiese strookleser kan gebruik om die data wat op magnetiese streepkaarte gestoor is, soos kredietkaarte, studente -ID's, ens. plaas dit na