Sadržaj:
- Korak 1: Lista dijelova
- Korak 2: Dijagram kola
- Korak 3: Teorija
- Korak 4: Napomene o dizajnu
- Korak 5: Softver
- Korak 6: Operacija
- Korak 7: Sažetak
Video: Morse dekoder za binarno drvo: 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:04
Ova instrukcija objašnjava kako dekodirati Morzeov kod pomoću Arduino Uno R3.
Dekoder, koji se automatski prilagođava brzini slanja, sposoban je dekodirati morze do najmanje 80 riječi u minuti.
Dolazni kôd se prikazuje kao tekst na vašem Arduino serijskom monitoru (ili TFT ekranu ako postoji)
Tonski oscilator je uključen ako želite vježbati slanje morzea.
Karakteristike dekodera:
- 320 x 240 TFT ekran modul [1]
- Goertzel digitalni propusni filter za odvajanje neželjenih signala.
- "Binary Morse Tree" za dekodiranje signala
- automatsko praćenje brzine
- zvučni izlaz prilikom vježbanja morzea
- prikazuju se i dolazni i odlazni tekst.
Prepoznaju se sljedeći znakovi i simboli:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
Procijenjena cijena štita dekodera Morzea, umanjena za TFT ekran, iznosi 25 USD. [1]
Slike
- Naslovna fotografija prikazuje potpuno sastavljenu jedinicu
- Video prikazuje rad dekodera
Napomene
[1]
- Modul TFT ekrana je opcionalan jer se sav tekst šalje na vaš Arduino “Serijski monitor”.
- TFT modul je opisan u mojim uputstvima
Korak 1: Lista dijelova
Sljedeći dijelovi su nabavljeni sa
1 jedini prototip štita za Arduino UNO R3, visina 2,54 mm
Sljedeći dijelovi nabavljeni su lokalno:
- 1 samo LM358 dvostruki opamp
- 1 samo LED zelena
- 1 samo LED kopča
- 1 samo kapsula elektronskog mikrofona
- 1 samo normalno otvoreno dugme
- 1 samo 8-pinska DIP utičnica
- 2 samo 330 ohmskih otpornika
- 2 samo 2K2 otpornika
- 5 samo 10K ohmskih otpornika
- 2 samo 56K ohm otpornika
- 2 samo 1uF kondenzator
- 1 samo 10uF kondenzator
Sljedeći dijelovi su izborni:
- 1 samo 2,2 inčni TFT SPI LCD zaslon modul 240*320 ILI9341 sa utorom za SD karticu za Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
- Morzeov ključ / dugme
- 1 samo BC548 NPN tranzistor
- 1 zvučnik od samo 1 inča
- 1 samo 33K ohmski otpornik
- 1 samo 3,5 mm mono utikač (za Morzeov ključ)
- 1 samo 3,5 mm mono utičnica (za Morzeov ključ)
- 3 samo 9 mm najlonska odstojnika sa izrezom M3
- 1 samo ABS plastična kutija 130 x 68 x 44 mm
- 5 samo 2-polnih pravokutnih konektora
Procijenjena cijena štita dekodera Morzea, umanjena za opcionalni TFT ekran, iznosi 25 USD. [1]
Napomene
[1]
Lista dijelova za opcionalni modul ekrana 320 x 240 TFT prikazana je na mojim uputstvima
[2]
Morzeov ključ ili čvrsti gumb potreban je ako želite koristiti pošiljatelja.
Korak 2: Dijagram kola
Slike
Fotografija 1 prikazuje dijagram kola za Morzeov dekoder. Otpornik od 330 ohma u seriji s morzeovim ključem ograničava izlaznu struju D4 u slučaju slučajnog kratkog spoja na masu … povećanje njegove vrijednosti smanjuje audio izlaz iz zvučnika. Iz tog razloga ga nisam dodao na štit, već sam ga pričvrstio direktno na utičnicu za Morzeovo ključevo radi lakšeg podešavanja
Fotografija 2 prikazuje odgovarajući štit. Štit je iz mog uputstva https://www.instructables.com/id/Arduino-TFT-Grap… kojem sam dodao pojačalo za mikrofon i tonski oscilator. [1]
Fotografija 3 prikazuje dovršeni štit pričvršćen na Arduino. Nisu potrebne druge komponente ako se tekst želi pregledati na vašem Arduino “Serijskom monitoru”
Fotografija 4 prikazuje dekoder djelomično u kutiji. Na poklopcu je izrezana rupa za pregled ekrana. Zvučnik i mikrofon su vruće zalijepljeni za kućište. Izbušite rupe za zvučnike u poklopcu pre postavljanja zvučnika. Središnja utičnica na poklopcu služi za produžni mikrofon … bez toga dekoder mora biti postavljen blizu zvučnika što nije uvijek moguće
Fotografija 5 prikazuje TFT ekran. Crna električna traka je pričvršćena na rubove ekrana … ova traka sprječava curenje svjetla i maskira bilo kakvo neslaganje između ekrana i otvora na poklopcu
Bitan
[1]
Arduinos s velikim USB konektorom zahtijeva sloj električne trake između USB konektora i Arduino štita. Slučajne kratke hlače moguće su bez trake jer je zazor mali. Traka nije potrebna za Arduinos koji ima male konektore
Korak 3: Teorija
Svako slovo Morzeove azbuke sadrži niz kratkih i dugih tonova koji se nazivaju „tačke“i „crtice“.
- tačka (.) je 1 jedinica dužine
- crtica (_) ima 3 jedinice
- razmak između elemenata slova je 1 jedinica
- razmak između slova je 3 jedinice
- razmak između riječi je 7 jedinica
Možemo utvrditi da li je dolazni ton tačka ili crtica upoređujući njegovo trajanje sa referentnim tonom od 2 jedinice dužine.
- tačka je manja od 2 jedinice
- crtica je veća od 2 jedinice
Postoje dvije izrazito različite metode za dekodiranje dolaznog uzorka točaka i crtica:
- linearno pretraživanje
- binarno stablo (poznato i kao dihotomno pretraživanje)
Linearno pretraživanje
Jedna uobičajena metoda je stvaranje niza znakova i njihovih odgovarajućih Morseovih uzoraka. Na primjer, svaki od sljedećih znakova bio bi spremljen kao:
- A _
- B _…
- C _. _.
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Svako slovo zahtijeva 6 ćelija… 1 za samo slovo i 5 za slova (.) I (_). Da bismo to učinili, potreban nam je niz znakova slova [36] [6] sa ukupno 216 ćelija. Neiskorištene ćelije obično su ispunjene nulom ili praznim mjestom.
Da bismo dekodirali dolazne tačke i crtice, moramo uporediti dot/crticu svakog dolaznog slova sa našim referentnim šablonima znakova.
Iako ova metoda djeluje, izuzetno je spora.
Recimo da imamo 26 slova ('A',.. 'Z') i znamenke ('0', … '9') pohranjene u nizu, tada moramo izvršiti 36 pretraživanja, od kojih svako ima do 5 pod-pretraživanja, što je ukupno 36*5 = 180 pretraživanja za dekodiranje broja '9'.
Binary Tree
Binarno pretraživanje je mnogo brže jer nije potrebno pretraživanje.
Za razliku od linearnog pretraživanja, koje zahtijeva čuvanje i znakova i morzeovih uzoraka, binarno stablo pohranjuje samo znakove, što znači da je veličina niza manja.
Podijelio sam svoje binarno stablo (fotografija1) na dvije polovice (fotografije 2 i 3) kako bi bilo čitljivije.
Da bismo pronašli znak, pomičemo pokazivač ulijevo svaki put kada čujemo točku i pomičemo pokazivač udesno svaki put kada čujemo crticu. Nakon svakog poteza prepolovimo udaljenost pokazivača za sljedeći potez … otuda i naziv binarno stablo.
Za dekodiranje slova '9' (crtica, crtica, crtica, crtica, tačka) potrebno je 5 poteza … 4 desno, a 1 lijevo što ostavlja pokazivač direktno iznad '9'.
Pet poteza je znatno brže od 180 pretraživanja !!!!!
Niz binarnih znakova je također manji … Za 26 slova i 10 brojeva potreban je samo niz od 64 x 1 reda. Odlučio sam stvoriti niz od 128 znakova kako bih mogao dekodirati interpunkciju.
Korak 4: Napomene o dizajnu
Morze je teško dekodirati u prisustvu smetnji. Neželjeni signali moraju biti odbijeni … ovo zahtijeva neku vrstu filtera.
Postoji mnogo mogućnosti:
- Fazno zaključane petlje
- Indukcijski kondenzatorski filteri
- Otporno-kondenzatorski aktivni filtri
- Digitalna obrada signala, kao što je Fast Fourierova transformacija ili Goertzelov filter.
Metode 1, 2, 3 zahtijevaju vanjske komponente koje su glomazne.
Metoda 4 ne zahtijeva vanjske komponente … frekvencije se detektiraju pomoću matematičkih algoritama.
Brza Furijeova transformacija (FFT)
Jedna metoda otkrivanja prisutnosti tona u složenom valnom obliku je upotreba Fast Fourierove transformacije
Fotografija 1 prikazuje kako FFT (brza Fourierova transformacija) dijeli audio spektar na “kante”.
Fotografija 2 prikazuje kako FFT “kante” reagiraju na signal … u ovom slučaju 800Hz. Da je prisutan drugi signal, recimo 1500Hz, vidjeli bismo dva odziva … jedan na 800Hz i drugi na 1500Hz.
U teoriji, dekoder Morzeovog koda može se napraviti praćenjem izlaznog nivoa određene FFT frekvencijske kante … veliki broj predstavlja prisustvo tačke ili crtice … mali broj ne predstavlja signal.
Takav dekoder Morzeovog koda mogao bi se napraviti nadgledanjem "kante 6" na fotografiji 2, ali postoji nekoliko stvari koje nisu u redu s ovim pristupom:
- želimo samo jedan spremnik frekvencija … ostalo su uzaludni proračuni
- spremišta frekvencija se možda neće pojaviti točno na frekvenciji koja vas zanima
- relativno je spor (20 ms po Arduino petlji ()
Druga metoda je upotreba Goertzel filtera.
Goertzel filter
Goertzel filter je sličan FFT -u, ali ima samo jednu frekvencijsku spremište.
Fotografija 3 prikazuje frekvencijski odziv Goertzelovog filtera na diskretne audio korake.
Fotografija 4 je brisanje istog filtera u istom frekvencijskom rasponu.
Odlučio sam "ići" s Goertzelovim algoritmom kao:
- Arduino loop () vrijeme pomoću Goertzel algoritma bilo je 14mS (milisekundi) naspram 20mS (milisekundi) za FFT rješenje koje koristi Arduino “fix_FFT” biblioteku.
- Lako je postaviti središnju frekvenciju Goertzelovog propusnog filtra.
- Propusni opseg je približno 190Hz.
Fotografija 5 prikazuje numerički izlaz iz Goertzel filtra na 900Hz kada se detektuje ton. Postavio sam prag tona na vrijednost 4000 … vrijednosti iznad 4000 označavaju ton.
U teoriji samo trebate podesiti filter na ugodnu frekvenciju slušanja. Nažalost, audio izlaz iz mog 1 -inčnog zvučnika za nadzor brzo pada ispod 900Hz. Da izbjegnem bilo kakve probleme, koristim filtar frekvencije 950Hz. Potrebne formule za izračunavanje alternativnih frekvencija filtera nalaze se u mom zaglavlju koda.
Dekodiranje
Dekodiranje točkica i crtica nije tako jednostavno kako izgleda.
Savršeni morzeov izraz definira se kao:
- tačka = 1 jedinica
- razmaci unutar slova = 1 jedinica
- crtica = 3 jedinice
- razmak između slova = 3 jedinice
- razmak između riječi = 7 jedinica
Za dekodiranje savršenog morzea jednostavno nam je potrebno referentno trajanje tona od 2 jedinice
- tačka <2 jedinice
- prostor elemenata <2 jedinice
- crtica> 2 jedinice
- slovo _prostor> 2 jedinice
- prostor_ riječi> 6 jedinica (tj. 3 x referentne jedinice)
Ovo radi za Morse Machine, ali u "stvarnom svijetu":
- brzina slanja varira
- trajanje svake tačke varira
- trajanje svake crtice varira
- slova E, I, S, H, 5 sadrže samo tačke koje prosječno traju tačke
- slova T, M, O, 0 sadrže samo crtice koje prosječno traju crticu
- praznine u riječima možda neće stići
- fading stvara greške od kojih se dekoder mora oporaviti.
- korumpirani signali zbog smetnji
Slova koja sadrže samo točke i crtice djelomično su riješena ako:
procjenjujemo referentno trajanje dok ne primimo valjanu točku i valjanu crticu. Koristim 200 milisekundi što vrijedi ako je brzina slanja između 6 WPM (riječi u minuti) i 17 WPM. Možda ćete morati povećati ovu vrijednost ako učite morzeovski jezik. Tablica brzina uključena je u softver
Varijacije brzine se rješavaju ako:
- izvodimo pokretni prosjek za svaku tačku i svaku crticu i
- ponovno izračunajte referentno trajanje nakon primitka svakog simbola
Nedostaci u riječima i nedostaci u riječima rješavaju se ako:
- zapamtite vrijeme posljednje tranzicije na kraju (ton u bez tona),
- ponovo pokrenite algoritam nakon svakog slova,
- izračunati proteklo vrijeme dok čekate na sljedeću prijelaznu liniju (bez tona u ton) i
- umetnite razmak ako je prekoračeno 6 vremenskih jedinica.
Morzeov oscilator
U početku sam probao neke Piezo zvučnike, ali sam našao:
- frekvencija je bila fiksna
- izlazna frekvencija je bila previsoka za duže slušanje
- piezo -i su se tendenciozno udaljavali od Goertzelovog prolaza
Zatim sam pokušao upravljati akustičkim pretvaračem sa kvadratnim valom od 750Hz, ali sam otkrio da ima rezonancu koja je filtrirala prvi i treći harmonik. Fotografija 6 prikazuje izlaz mikrofonskog pojačala na kvadratni val od 750Hz … vidimo 5. harmonik !!!
Zatim sam pribjegao korištenju malog zvučnika. Fotografija 7 prikazuje izlaz mikrofona na 750Hz kvadratni val koji je poslan na mali zvučnik … ovaj put vidimo temeljni … ne 5. harmonik. Goertzel filter zanemaruje sve harmonike.
Napomene
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
Korak 5: Softver
Instalacija
- Preuzmite priloženu datoteku MorseCodeDecoder.ino [1]
- Kopirajte sadržaj ove datoteke na novu Arduino skicu
- Sačuvajte skicu kao "MorseCodeDecoder" (bez navodnika)
- Sastavite i prenesite skicu na svoj Arduino
Ažuriranje softvera 23. jula 2020
Sljedeće značajke su dodane priloženoj datoteci "MorseCodeDecoder6.ino"
- prozor "Exact Blackman" [2]
- "Noise_blanker"
Podešavanje:
- povećavajte jačinu zvuka prijemnika sve dok LED ne počne treperiti, a zatim se ugasi
- sada podesite prijemnik sve dok LED dioda ne počne bljeskati u skladu s ulaznim morzeom
- Noise_blanker je postavljen tako da zanemaruje rafale buke do 8mS (jedno vrijeme petlje)
- prag šuma se može podesiti postavljanjem Debug = true i gledanjem vašeg serijskog plotera
Bilješka
[1]
Postavite svoj Arduino serijski monitor na 115200 bauda ako želite i vi da vidite tekst.
[2]
- Fotografija 1… Tačan Blackman prozor
- Fotografija 2… Goertzel filter bez tačnog Blackman prozora
- Fotografija 3,,, Goertzel filter sa primijenjenim tačnim Blackman prozorom
Korak 6: Operacija
Dekoder
Postavite jedinicu pored zvučnika dok slušate Morzeov tekst.
- Kapsula elektronskog mikrofona preuzima morzeov signal iz vašeg zvučnika.
- Izlaz elektronskog mikrofona se zatim pojačava 647 puta (56dB) prije nego što se proslijedi Arduinu na obradu.
- Goertzelov digitalni propusni filter izdvaja morzeov signal iz šuma.
- Dekodiranje se vrši pomoću binarnog stabla.
- Izlaz dekodera se prikazuje kao tekst na TFT ekranu rezolucije 320 x 240 piksela. Također se šalje na vaš Arduino "Serijski monitor" ako ne želite koristiti zaslon.
Morse Sender
Uključen je i pošiljalac Morsea. To vam omogućuje vježbanje slanja morzea i radi na sljedeći način:
- Na Arduino pin 4 stvara se konstantan zvučni ton.
- Ovaj ton čujemo putem zvučnika dekodera kad god pritisnemo tipku morzea.
- Ton je postavljen na istu frekvenciju kao Goertzelov filter koji zavarava dekoder da pomisli da sluša morzeovski … sve što pošaljete pojavit će se kao ispisani tekst na ekranu.
Vaše slanje će se poboljšati kako dekoder hvata uobičajene greške, kao što su:
- previše prostora između simbola. (primjer: Q ispisano kao MA)
- previše prostora između slova (primjer: SADA štampano kao NO W)
- netačan kod
Korak 7: Sažetak
Dekoder
Ovo uputstvo opisuje kako napraviti morzeov dekoder koji pretvara morzeov kod u štampani tekst.
- Dekoder može dekodirati morze do najmanje 80 WPM (riječi u minuti)
- Dekoder automatski prati varijacije u primljenoj brzini slanja.
- Tekst se prikazuje na vašem serijskom monitoru (ili na modulu prikaza 320 x 240 TFT ako je ugrađen) [1]
Pošiljalac
Uključen je i pošiljalac Morsea
- Pošiljatelj vam pomaže poboljšati kvalitetu slanja morzeom.
- Dekoder potvrđuje da je ono što ste poslali ispravno
Cijena dijelova
Procijenjena cijena štita dekodera Morzea, umanjena za opcionalni TFT ekran, iznosi 25 USD.
Kliknite ovdje za pregled ostalih instrukcija.
Druga nagrada na Audio Challengeu 2020
Preporučuje se:
RGB-LED žičano drvo: 9 koraka (sa slikama)
RGB-LED žičano stablo: Želim podijeliti sa vama svoje RGB-LED žičano drvo. Jedne večeri sjetio sam se kako sam kao klinac gradio žicu. Danas zaista uživam u izgradnji malih elektroničkih projekata s mikrokontrolerima sličnim arduinu, posebno sa LED diodama. Pa sam pomislio u sebi
Binarno -decimalna igra za podudaranje: 10 koraka
Binary to Decimal Matcher Game: Ova instrukcija će pokazati proces i module potrebne za kreiranje naše igre Batch to Decimal Matching. U roku od 60 sekundi, korisnici će prevesti i unijeti što više nasumično generiranih decimalnih brojeva na ekranu sa sedam segmenata u binarni oblik pritiskom na
LED spiralno drvo: 4 koraka (sa slikama)
LED spiralno drvo: Volim sve vrste LED traka. Napravio sam lepo svetlo duge sa njima. Čak su i one koje se ne mogu adresirati korisne. Napravio sam sjajan tržišni kišobran za vanjsko svjetlo tako što sam ih pričvrstio na rebra unbrella, pa kad je moje spiralno drvo izletjelo, odlučio sam se zamotati
Binarno -decimalni kalkulator: 8 koraka
Binarno -decimalni kalkulator: Za jedanaestogodišnje računarsko inženjerstvo morao sam se odlučiti za konačni projekat. U početku nisam znao šta da napravim jer je morao uključivati određene hardverske komponente. Nakon nekoliko dana, moj kolega iz razreda mi je rekao da napravim projekat zasnovan na četvorobitnom dodatku
Burner sa USB pogonom! Ovaj projekt može izgorjeti kroz plastiku / drvo / papir (zabavan projekt također mora biti vrlo fino drvo): 3 koraka
Gorionik sa USB pogonom! Ovaj projekt može izgorjeti kroz plastiku / drvo / papir (zabavan projekt također mora biti od vrlo finog drva): NEMOJTE OVO KORISTITI KORIŠĆENJE USB -a !!!! iz svih komentara saznao sam da može oštetiti vaš računar. moj kompjuter je u redu. Koristite punjač za telefon od 600m 5v. Koristio sam ovo i radi dobro i ništa se ne može oštetiti ako upotrijebite sigurnosni utikač za zaustavljanje napajanja