Sadržaj:
- Korak 1: Popis dijelova
- Korak 2: Dijagram kruga
- 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 promjena: 2024-01-30 09:32
Ova uputa objašnjava kako dekodirati Morseov 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 prikazuje se kao tekst na vašem Arduino serijskom monitoru (ili TFT ekranu ako je ugrađen)
Uključen je tonski oscilator ako želite vježbati slanje morzea.
Značajke dekodera:
- 320 x 240 TFT zaslon modul [1]
- Goertzelov digitalni propusni filter za odvajanje neželjenih signala.
- "Binary Morse Tree" za dekodiranje signala
- automatsko praćenje brzine
- zvučni izlaz tijekom vježbanja morzea
- prikazuju se i dolazni i odlazni tekst.
Prepoznaju se sljedeći znakovi i simboli:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
Procijenjeni trošak štita dekodera Morsea, umanjenog za TFT zaslon, iznosi 25 USD. [1]
Slike
- Naslovna fotografija prikazuje potpuno sastavljenu jedinicu
- Video prikazuje rad dekodera
Bilješke
[1]
- Modul TFT zaslona nije obavezan jer se sav tekst šalje na vaš Arduino “Serijski monitor”.
- TFT modul opisan je u mojim uputstvima
Korak 1: Popis 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 otvoreni gumb
- 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č / gumb
- 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 s izrezom M3
- 1 samo ABS plastična kutija 130 x 68 x 44 mm
- 5 samo 2-pinski pravokutni priključci
Procijenjeni trošak štita dekodera Morsea, umanjenog za opcionalni TFT zaslon, iznosi 25 USD. [1]
Bilješke
[1]
Popis dijelova za opcijski 320 x 240 TFT zaslon modul naveden je na mojim uputama
[2]
Morzeov ključ ili čvrsti gumb potreban je ako želite koristiti pošiljatelja.
Korak 2: Dijagram kruga
Slike
Fotografija 1 prikazuje dijagram sklopa za dekoder Morzea. Otpornik od 330 ohma u seriji s morzeovom tipkom 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 izravno na utičnicu za Morzeovo ključeve 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 zaslona. Zvučnik i mikrofon su vruće zalijepljeni za kućište. Izbušite rupe za zvučnike u poklopcu prije 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 zaslon. Na rubove zaslona pričvršćena je crna električna vrpca … ova traka sprječava curenje svjetla i maskira bilo kakvo neslaganje između zaslona i otvora na poklopcu
Važno
[1]
Arduinos s velikim USB priključkom zahtijeva sloj električne trake između USB priključka 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 abecede sadrži niz kratkih i dugih tonova koji se nazivaju "točkice" i "crtice".
- točka (.) je 1 jedinica duljine
- crtica (_) ima 3 jedinice duljine
- 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 je li dolazni ton točka ili crtica uspoređujući njegovo trajanje s referentnim tonom od 2 jedinice duljine.
- toč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] s ukupno 216 ćelija. Neiskorištene ćelije obično su ispunjene nulom ili praznim mjestom.
Za dekodiranje dolaznih točaka i crtica moramo usporediti dot/crticu svakog dolaznog slova s našim referentnim uzorcima 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'.
Binarno stablo
Binarno pretraživanje daleko je brže jer nije potrebno pretraživanje.
Za razliku od linearnog pretraživanja, koje zahtijeva spremanje 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, točka) potrebno je 5 poteza … 4 desno, a 1 lijevo što ostavlja pokazivač izravno iznad '9'.
Pet poteza je znatno brže od 180 pretraživanja !!!!!
Binarni niz znakova također je manji … Za 26 slova i 10 brojeva potreban je samo niz redaka 64 x 1. Odlučio sam stvoriti niz od 128 znakova kako bih mogao dekodirati interpunkciju.
Korak 4: Napomene o dizajnu
Morse je teško dekodirati u prisutnosti smetnji. Neželjeni signali moraju se odbiti … za to je potrebna neka vrsta filtra.
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 Fourierova transformacija (FFT)
Jedna od 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 u "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 izlazne razine određene FFT frekvencijske posude … veliki broj predstavlja prisutnost točke ili crtice … mali broj ne predstavlja signal.
Takav dekoder Morzeovog koda mogao bi se napraviti nadziranjem "kante 6" na fotografiji 2, ali postoji nekoliko stvari koje nisu u redu s ovim pristupom:
- želimo samo jedan spremnik frekvencija … ostalo su uzaludni izračuni
- spremišta frekvencija možda se neće pojaviti točno na frekvenciji od interesa
- relativno je spor (20 ms po Arduino petlji ()
Druga metoda je korištenje Goertzelovog filtra.
Goertzel filtar
Goertzelov filter sličan je 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 Goertzelovog algoritma bilo je 14mS (milisekundi) naspram 20mS (milisekundi) za FFT rješenje pomoću Arduino “fix_FFT” knjižnice.
- Lako je postaviti središnju frekvenciju Goertzelovog propusnog filtra.
- Propusnost je približno 190Hz.
Fotografija 5 prikazuje numerički izlaz iz Goertzelovog filtra na 900Hz kada se detektira 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. Kako bih izbjegao bilo kakve probleme, koristim frekvenciju filtra od 950Hz. Potrebne formule za izračunavanje zamjenskih frekvencija filtera nalaze se u mom zaglavlju koda.
Dekodiranje
Dekodiranje točaka i crtica nije tako jednostavno kako se čini.
Savršeni morzeov izraz definira se kao:
- toč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
- toč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 stroj Morse, ali u "stvarnom svijetu":
- brzina slanja varira
- trajanje svake točke varira
- trajanje svake crtice varira
- slova E, I, S, H, 5 sadrže samo točke koje prosječno traju točku
- slova T, M, O, 0 sadrže samo crtice koje prosječno traju crticu
- praznine u riječima možda neće stići
- blijeđenje stvara pogreš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 rješavaju se ako:
- izvodimo pokretni prosjek za svaku točku i svaku crticu i
- ponovno izračunati referentno trajanje nakon primitka svakog simbola
Praznine u riječima i praznine u riječima koje ne stižu rješavaju se ako:
- zapamtite vrijeme posljednjeg prijelaza na kraju (ton u bez tona),
- ponovno pokrenite algoritam nakon svakog slova,
- izračunati proteklo vrijeme čekajući sljedeći prednji prijelaz (bez tona u ton) i
- umetnite razmak ako je prekoračeno 6 vremenskih jedinica.
Morzeov oscilator
U početku sam isprobao neke Piezo zvučnike, ali sam našao:
- frekvencija je bila fiksna
- izlazna frekvencija bila je previsoka za dugotrajno slušanje
- piezosi su se sklone izvlačiti iz propusnog pojasa Goertzel
Zatim sam pokušao upravljati akustičkim pretvaračem s kvadratnim valom od 750Hz, ali otkrio sam da ima rezonanciju koja je filtrirala 1. i 3. 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. Goertzelov filter zanemaruje sve harmonike.
Bilješke
[1]
en.wikipedia.org/wiki/Goertzel_algoritam
www.embedded.com/the-goertzel-algorithm/
Korak 5: Softver
Montaža
- Preuzmite priloženu datoteku MorseCodeDecoder.ino [1]
- Kopirajte sadržaj ove datoteke na novu Arduino skicu
- Spremite skicu kao "MorseCodeDecoder" (bez navodnika)
- Sastavite i prenesite skicu na svoj Arduino
Ažuriranje softvera 23. srpnja 2020
Sljedeće značajke dodane su priloženoj datoteci "MorseCodeDecoder6.ino"
- prozor "Exact Blackman" [2]
- "Noise_blanker"
Podešavanje:
- povećavajte razinu zvuka u prijemniku sve dok LED ne počne treperiti, a zatim se ugasi
- sada podesite prijemnik dok LED dioda ne počne bljeskati u korak s ulaznim morzeom
- Noise_blanker je postavljen tako da zanemaruje rafale buke do 8 mS (vrijeme jedne petlje)
- prag šuma može se 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 … Točan Blackmanov prozor
- Fotografija 2 … Goertzelov filter bez točnog Blackman prozora
- Fotografija 3,,, Goertzel filtar s primijenjenim toč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 (56 dB) 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 prikazuje se kao tekst na TFT zaslonu rezolucije 320 x 240 piksela. Također se šalje na vaš Arduino "Serijski monitor" ako ne želite koristiti zaslon.
Morseov pošiljatelj
Uključen je i pošiljatelj Morsea. To vam omogućuje vježbanje slanja morzea i radi na sljedeći način:
- Na Arduino pin 4 generira se konstantan zvučni ton.
- Ovaj ton čujemo putem zvučnika dekodera kad god pritisnemo tipku morzea.
- Ton je postavljen na istu frekvenciju kao i Goertzelov filter koji zavarava dekoder da misli da sluša pravi Morzeov … sve što pošaljete pojavit će se kao ispisani tekst na zaslonu.
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 ispisano kao NO W)
- neispravan kod
Korak 7: Sažetak
Dekoder
Ova uputa opisuje kako se izrađuje morzeov dekoder koji pretvara morzeov kod u tiskani 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 zaslona 320 x 240 TFT ako je ugrađen) [1]
Pošiljatelj
Uključen je i pošiljatelj Morsea
- Pošiljatelj vam pomaže poboljšati kvalitetu slanja morzeom.
- Dekoder potvrđuje da je ono što ste poslali ispravno
Cijena dijelova
Procijenjeni trošak štita dekodera Morsea, umanjenog za opcionalni TFT zaslon, iznosi 25 USD.
Kliknite ovdje da biste vidjeli moje ostale upute.
Druga nagrada na Audio Challengeu 2020
Preporučeni:
Igra binarno -decimalnog podudaranja: 10 koraka
Binary to Decimal Matcher Game: Ova instrukcija će pokazati proces i module potrebne za izradu 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 zapis pritiskom na
Čari za drvo: 6 koraka (sa slikama)
Čari za drvo: Korištenjem e-otpada ili bilo kojeg drugog materijala za izradu i savitljive žice možete napraviti vlastitu talismansku kreaciju koja se koristi za označavanje mjesta, događaja ili vremena; kolokvijalno poznati kao čari stabala. Ovu sam ideju imao na završnoj godini srednje škole, dok je većina mojih
Binarno -decimalni kalkulator: 8 koraka
Binarno -decimalni kalkulator: Za jedanaesto računarsko inženjerstvo morao sam se odlučiti za konačni projekt. Isprva nisam znao što bih napravio jer je morao uključivati određene hardverske komponente. Nakon nekoliko dana, moj kolega iz razreda mi je rekao da napravim projekt temeljen na četverobitnom dodatku
Mini CNC laserski graver za drvo i laserski rezač papira .: 18 koraka (sa slikama)
Mini CNC laserski graver za drvo i laserski rezač papira. Ovo je uputstvo o tome kako sam napravio laserski CNC graver za drvo na bazi Arduina i rezač tankog papira koristeći stare DVD pogone, laser od 250 mW. Područje za igru je maksimalno 40 mm x 40 mm. Nije li zabavno napraviti vlastiti stroj od starih stvari?
Plamenik s USB pogonom! Ovaj projekt može izgorjeti kroz plastiku / drvo / papir (zabavan projekt također mora biti vrlo fino drvo): 3 koraka
Plamenik s USB pogonom! Ovaj projekt može izgorjeti kroz plastiku / drvo / papir (zabavan projekt također mora biti vrlo fino drvo): NEMOJTE OVAJ KORISTITI USB!!! iz svih komentara saznao sam da to može oštetiti vaše računalo. moje računalo je dobro. 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