Isi kandungan:
- Langkah 1: Senarai Bahagian
- Langkah 2: Rajah Litar
- Langkah 3: Teori
- Langkah 4: Nota Reka Bentuk
- Langkah 5: Perisian
- Langkah 6: Operasi
- Langkah 7: Ringkasan
Video: Dekoder Morse Tree Binary: 7 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:07
Petunjuk ini menerangkan cara menyahkod Morse Code menggunakan Arduino Uno R3.
Penyahkod, yang secara automatik menyesuaikan dengan kecepatan kirim, mampu menyahkod morse hingga sekurang-kurangnya 80 perkataan seminit.
Kod masuk dipaparkan sebagai teks pada Arduino Serial Monitor (atau layar TFT jika dipasang)
Pengayun nada telah disertakan sekiranya anda ingin berlatih menghantar morse.
Ciri penyahkod:
- modul paparan TFT 320 x 240 [1]
- penapis jalur lebar digital Goertzel untuk memisahkan isyarat yang tidak diingini.
- "Binary Morse Tree" untuk menyahkod isyarat
- penjejakan kelajuan automatik
- output yang didengar semasa berlatih morse
- teks masuk dan keluar dipaparkan.
Watak dan simbol berikut dikenali:
- [A.. Z]
- [0..9]
- [., ? ' ! / () &:; = + - _ " @]
Anggaran kos perisai decoder morse, kurang paparan TFT, adalah $ 25. [1]
Gambar
- Foto sampul menunjukkan unit yang dipasang sepenuhnya
- Video menunjukkan penyahkod berfungsi
Catatan
[1]
- Modul paparan TFT adalah pilihan kerana semua teks dihantar ke "Serial Monitor" Arduino anda.
- Modul TFT dijelaskan dalam https://www.instructables.com/id/Arduino-TFT-Grap saya yang boleh dipesan.
Langkah 1: Senarai Bahagian
Bahagian berikut diperoleh dari
1 perisai prototaip sahaja untuk Arduino UNO R3, 2.54mm Pitch
Bahagian berikut diperoleh secara tempatan:
- 1 sahaja opamp dwi LM358
- 1 LED hijau sahaja
- 1 klip LED sahaja
- 1 kapsul mikrofon electret sahaja
- 1 hanya butang tekan yang biasanya terbuka
- 1 soket DIP 8-pin sahaja
- 2 perintang 330 ohm sahaja
- 2 perintang 2K2 sahaja
- 5 perintang 10k ohm sahaja
- 2 perintang 56K ohm sahaja
- 2 kapasitor 1uF sahaja
- 1 kapasitor 10uF sahaja
Bahagian berikut adalah pilihan:
- 1 sahaja Modul Paparan LCD 2.2 Inch TFT SPI 240 * 320 ILI9341 dengan Slot Kad SD untuk Arduino Raspberry Pi 51 / AVR / STM32 / ARM / PIC [1]
- Kekunci / tekan butang Morse
- 1 sahaja transistor BC548 NPN
- 1 pembesar suara 1 inci sahaja
- 1 perintang 33k ohm sahaja
- 1 hanya plug mono 3.5mm (untuk kunci morse)
- 1 hanya soket mono 3.5mm (untuk kunci morse)
- 3 hanya spacer nilon 9mm M3 yang diketuk
- 1 kotak plastik ABS 130 x 68 x 44mm sahaja
- 5 hanya penyambung sudut kanan 2-pin
Anggaran kos perisai decoder morse, ditolak paparan TFT pilihan, adalah $ 25. [1]
Catatan
[1]
Senarai bahagian untuk modul paparan TFT 320 x 240 pilihan terdapat dalam
[2]
Kekunci morse atau butang tekan yang kukuh diperlukan jika anda ingin menggunakan pengirimnya.
Langkah 2: Rajah Litar
Gambar
Foto 1 menunjukkan gambarajah litar untuk penyahkod morse. Perintang 330 ohm secara bersiri dengan kunci morse menghadkan arus keluaran D4 sekiranya berlaku pendek ke tanah secara tidak sengaja … meningkatkan nilainya akan menurunkan output audio dari pembesar suara. Atas sebab ini saya tidak menambahkannya ke perisai tetapi melampirkannya terus ke soket kunci morse untuk kemudahan penyesuaian
Foto 2 menunjukkan perisai yang sepadan. Perisai adalah dari https://www.instructables.com/id/Arduino-TFT-Grap… yang boleh saya instruksikan. Saya telah menambahkan penguat mikrofon dan pengayun nada. [1]
Foto 3 menunjukkan perisai lengkap yang dilekatkan pada Arduino. Tidak ada komponen lain yang diperlukan jika teks tersebut akan dilihat di "Serial Monitor" Arduino anda
Foto 4 menunjukkan penyahkod yang sebahagiannya berkotak. Lubang telah dipotong di penutup untuk melihat paparan. Pembesar suara dan mikrofon telah terpaku panas pada casing. Bor lubang pembesar suara di penutup sebelum memasang pembesar suara. Soket tengah pada penutup adalah untuk mikrofon sambungan … tanpa ini penyahkod mesti diletakkan dekat dengan pembesar suara yang tidak selalu mungkin
Foto 5 menunjukkan skrin TFT. Pita elektrik hitam telah terpasang di tepi paparan … pita ini mencegah kebocoran cahaya dan menutupi ketidakseimbangan antara paparan dan bukaan di penutup
Penting
[1]
Arduino dengan penyambung USB yang besar memerlukan lapisan pita elektrik antara penyambung USB dan pelindung Arduino. Seluar pendek tidak sengaja boleh dilakukan tanpa pita kerana jaraknya kecil. Pita tidak diperlukan untuk Arduino yang mempunyai penyambung kecil
Langkah 3: Teori
Setiap huruf kod morse terdiri dari rangkaian nada pendek dan panjang yang disebut "titik" dan "tanda sempang".
- satu titik (.) panjangnya 1 unit
- sempang (_) panjangnya 3 unit
- ruang antara unsur huruf ialah 1 unit
- ruang antara huruf ialah 3 unit
- ruang antara perkataan adalah 7 unit
Kita dapat menentukan sama ada nada masuk adalah titik atau tanda hubung dengan membandingkan lamanya dengan nada rujukan panjangnya 2 unit.
- satu titik kurang daripada 2 unit
- sengkang lebih besar daripada 2 unit
Terdapat dua kaedah yang berbeza untuk menyahkod corak titik dan tanda sempang yang masuk:
- carian linear
- pokok binari (juga dikenali sebagai carian dikotomik)
Pencarian Linear
Salah satu kaedah yang biasa adalah dengan membuat pelbagai watak dan corak morse yang sesuai. Contohnya setiap watak berikut akan disimpan sebagai:
- A. _
- B _…
- C _. _
- 0 _ _ _ _ _
- 1. _ _ _ _
- 2.. _ _ _
Setiap huruf memerlukan 6 sel… 1 untuk huruf itu sendiri dan 5 untuk huruf (.) Dan (_). Untuk melakukan ini, kita memerlukan susunan aksara huruf [36] [6] dengan jumlah 216 sel. Sel yang tidak digunakan biasanya diisi dengan angka sifar atau kosong.
Untuk menyahkod titik dan tanda titik yang masuk, kita mesti membandingkan corak titik / tanda hubung setiap huruf masuk dengan corak watak rujukan kita.
Walaupun kaedah ini berfungsi, ia sangat perlahan.
Katakan kita mempunyai 26 huruf ('A',.. 'Z') dan digit ('0', … '9') disimpan dalam array, maka kita mesti melakukan 36 carian, masing-masing dengan hingga 5 sub-carian, iaitu sejumlah 36 * 5 = 180 carian untuk menyahkod angka '9'.
Pokok Perduaan
Pencarian binari jauh lebih pantas kerana carian tidak diperlukan.
Tidak seperti carian linear, yang memerlukan corak watak dan corak morse disimpan, pokok binari hanya menyimpan watak yang bermaksud bahawa ukuran susunan lebih kecil.
Saya telah membahagikan pokok binari saya (foto1) menjadi dua bahagian (gambar 2 dan 3) untuk menjadikannya lebih mudah dibaca.
Untuk mencari watak, kita menggerakkan penunjuk ke kiri setiap kali kita mendengar titik dan menggerakkan penunjuk ke kanan setiap kali kita mendengar tanda titik. Selepas setiap langkah, kami mengurangkan separuh jarak penunjuk untuk langkah seterusnya … oleh itu nama pokok binari.
Untuk menyahkod huruf ‘9’ (tanda hubung, tanda hubung, tanda hubung, tanda hubung, titik) memerlukan 5 gerakan… 4 ke kanan, dan 1 ke kiri yang meninggalkan penunjuk tepat di atas ‘9’.
Lima pergerakan jauh lebih pantas daripada 180 carian !!!!!
Susunan watak binari juga lebih kecil… 26 huruf dan 10 angka hanya memerlukan susunan baris 64 x 1. Saya telah memilih untuk membuat susunan 128 aksara sehingga saya dapat menyahkod tanda baca.
Langkah 4: Nota Reka Bentuk
Morse sukar untuk menyahkod dengan adanya isyarat yang mengganggu. Isyarat yang tidak diingini mesti ditolak … ini memerlukan semacam penapis.
Terdapat banyak kemungkinan:
- Gelung terkunci fasa
- Penapis induktor-kapasitor
- Penapis aktif perintang-kapasitor
- Pemprosesan isyarat digital seperti Fast Fourier Transform, atau penapis Goertzel.
Kaedah 1, 2, 3 memerlukan komponen luaran yang besar.
Kaedah 4 tidak memerlukan komponen luaran… frekuensi dikesan menggunakan algoritma matematik.
Transformasi Fourier Cepat (FFT)
Salah satu kaedah untuk mengesan kehadiran nada dalam bentuk gelombang kompleks adalah dengan menggunakan Fast Fourier Transform
Foto 1 menunjukkan bagaimana FFT (Fast Fourier Transform) membahagikan spektrum audio menjadi "tong sampah".
Foto 2 menunjukkan bagaimana "tong sampah" FFT bertindak balas terhadap isyarat … dalam hal ini 800Hz. Sekiranya isyarat kedua mengatakan 1500Hz hadir, kita akan melihat dua respons… satu pada 800Hz dan satu lagi pada 1500Hz.
Secara teori, penyahkod kod morse dapat dibuat dengan memantau tingkat keluaran tong frekuensi FFT tertentu … sebilangan besar menunjukkan adanya titik atau tanda hubung … sebilangan kecil tidak menunjukkan isyarat.
Penyahkod kod morse seperti itu dapat dibuat dengan memantau "bin 6" pada foto 2 tetapi ada beberapa hal yang salah dengan pendekatan ini:
- kita hanya mahukan satu tong frekuensi … selebihnya adalah pengiraan yang sia-sia
- tong frekuensi mungkin tidak kelihatan tepat pada kekerapan minat
- agak perlahan (20mS per gelung Arduino ()
Kaedah lain adalah menggunakan penapis Goertzel.
Penapis Goertzel
Penapis Goertzel serupa dengan FFT tetapi hanya mempunyai tong frekuensi tunggal.
Foto3 menunjukkan tindak balas kekerapan penapis Goertzel terhadap langkah audio yang berbeza.
Foto 4 adalah sapuan penapis yang sama pada julat frekuensi yang sama.
Saya memutuskan untuk "pergi" dengan algoritma Goertzel sebagai:
- Waktu gelung Arduino () menggunakan algoritma Goertzel adalah 14mS (milisaat) berbanding 20mS (milisaat) untuk penyelesaian FFT menggunakan perpustakaan Arduino "fix_FFT".
- Sangat mudah untuk menetapkan frekuensi tengah penapis jalur lebar Goertzel.
- Lebar jalur kira-kira 190Hz.
Foto 5 menunjukkan output berangka dari penapis Goertzel 900Hz apabila nada dikesan. Saya telah menetapkan ambang nada saya ke nilai 4000… nilai di atas 4000 menunjukkan nada.
Secara teori anda hanya perlu menyesuaikan penapis anda ke frekuensi mendengar yang selesa. Sayangnya output audio dari pembesar suara pemantauan 1 inci saya turun dengan cepat di bawah 900Hz. Untuk mengelakkan masalah, saya menggunakan frekuensi penapis 950Hz. Rumus yang diperlukan untuk mengira frekuensi penapis alternatif terdapat di tajuk kod saya.
Penyahkodan
Menyahkod titik dan tanda sempang tidak semudah yang pertama kali dilihat.
Morse sempurna ditakrifkan sebagai:
- dot = 1 unit
- ruang di dalam huruf = 1 unit
- sengkang = 3 unit
- ruang antara huruf = 3 unit
- ruang antara perkataan = 7 unit
Untuk menyahkod morse sempurna, kita hanya memerlukan nada nada rujukan selama 2 unit
- titik <2 unit
- ruang elemen <2 unit
- sengkang> 2 unit
- huruf _space> 2 unit
- word_space> 6 unit (iaitu 3 x unit rujukan)
Ini berfungsi untuk mesin morse tetapi di "dunia nyata":
- kelajuan penghantaran berbeza-beza
- jangka masa setiap titik berbeza-beza
- jangka masa setiap tanda pisah berbeza-beza
- huruf E, I, S, H, 5 hanya mengandungi titik yang rata-rata hingga panjang titik
- huruf T, M, O, 0 hanya mengandungi tanda sempang yang rata-rata hingga durasi tanda sempang
- jurang kata mungkin tidak sampai
- pudar menimbulkan ralat dari mana penyahkod mesti pulih.
- isyarat rosak kerana gangguan
Huruf yang hanya mengandungi titik dan tanda hubung diselesaikan sebahagiannya sekiranya:
kami menganggarkan jangka masa rujukan sehingga kami menerima titik dan tanda sempang yang sah. Saya menggunakan 200 milisaat yang sah jika kelajuan kiriman antara 6 WPM (perkataan per minit) dan 17 WPM. Anda mungkin perlu meningkatkan nilai ini jika anda belajar morse. Jadual kelajuan disertakan dalam perisian
Variasi kelajuan diselesaikan sekiranya:
- kami melakukan purata putaran pada setiap titik dan setiap titik dan
- hitung semula tempoh rujukan setelah setiap simbol diterima
Jurang kata dan jurang kata yang tidak tiba diselesaikan jika kita:
- ingat masa peralihan trailing-edge (tone to no-tone) terakhir,
- mulakan semula algoritma selepas setiap huruf,
- hitung masa yang berlalu sementara menunggu peralihan terdepan (tanpa nada ke nada) seterusnya dan
- masukkan ruang jika melebihi 6 unit masa.
Pengayun Morse
Pada mulanya saya mencuba beberapa buzzer Piezo tetapi mendapati:
- kekerapannya tetap
- frekuensi output terlalu tinggi untuk mendengar yang berpanjangan
- piezos cenderung melayang keluar dari jalur masuk Goertzel
Saya kemudian cuba menggerakkan transduser akustik dengan gelombang persegi 750Hz tetapi mendapati ia mempunyai resonans yang menyaring harmonik 1 dan 3. Foto 6 menunjukkan output penguat mikrofon ke gelombang persegi 750Hz … kita melihat harmonik ke-5 !!!
Saya kemudian menggunakan pembesar suara kecil. Foto 7 menunjukkan output mikrofon ke gelombang persegi 750Hz yang dihantar ke pembesar suara kecil … kali ini kita melihat yang mendasar … bukan harmonik ke-5. Penapis Goertzel mengabaikan harmonik.
Catatan
[1]
en.wikipedia.org/wiki/Goertzel_algorithm
www.embedded.com/the-goertzel-algorithm/
Langkah 5: Perisian
Pemasangan
- Muat turun fail yang dilampirkan MorseCodeDecoder.ino [1]
- Salin kandungan fail ini ke lakaran Arduino baru
- Simpan lakaran sebagai "MorseCodeDecoder" (tanpa tanda petik)
- Susun dan muat naik lakaran ke Arduino anda
Kemas kini Perisian 23 Julai 2020
Ciri-ciri berikut telah ditambahkan ke fail terlampir "MorseCodeDecoder6.ino"
- tetingkap "Blackman Tepat" [2]
- "Bising_blanker"
Pelarasan:
- tingkatkan tahap audio penerima anda sehingga LED mula berkelip kemudian mati
- sekarang tetapkan penerima anda sehingga LED berkedip sesuai dengan morse yang masuk
- Noise_blanker telah diatur untuk mengabaikan ledakan bunyi sehingga 8mS (satu kali gelung)
- ambang Kebisingan dapat disesuaikan dengan menetapkan Debug = true dan menonton Serial Plotter anda
Catatan
[1]
Tetapkan Arduino Serial Monitor anda ke 115200 baud jika anda mahu juga melihat teksnya.
[2]
- Foto 1 … Tetingkap Blackman Tepat
- Foto 2… Penapis Goertzel tanpa tetingkap Blackman Tepat
- Penapis Foto 3,,, Goertzel dengan tetingkap Tepat Blackman digunakan
Langkah 6: Operasi
Penyahkod
Letakkan unit di sebelah pembesar suara anda semasa mendengar morse.
- Kapsul mikrofon electret mengambil isyarat morse dari pembesar suara anda.
- Output mikrofon electret kemudian diperkuat 647 kali (56dB) sebelum dihantar ke Arduino untuk diproses.
- Penapis jalur lebar digital Goertzel mengeluarkan isyarat morse dari kebisingan.
- Penyahkodan dilakukan menggunakan pokok binari.
- Output penyahkod ditampilkan sebagai teks pada paparan TFT 320 x 240 piksel. Ia juga dikirimkan ke Arduino "Serial Monitor" jika anda tidak mahu menggunakan paparan.
Penghantar Morse
Pengirim morse juga telah disertakan. Ini membolehkan anda berlatih menghantar morse dan berfungsi seperti berikut:
- Nada yang dapat didengar berterusan dihasilkan pada pin Arduino 4.
- Kami mendengar nada ini melalui pembesar suara penyahkod setiap kali kami menekan kekunci morse.
- Nada ditetapkan pada frekuensi yang sama dengan penapis Goertzel yang memperbodohkan penyahkod untuk memikirkannya mendengar morse yang sebenarnya … apa sahaja yang anda hantar akan muncul sebagai teks bercetak di paparan.
Penghantaran anda akan bertambah baik kerana penyahkod mengambil kesalahan biasa seperti:
- terlalu banyak ruang antara simbol. (contoh: Q pinted sebagai MA)
- terlalu banyak ruang antara huruf (contoh: SEKARANG dicetak sebagai TIDAK W)
- kod salah
Langkah 7: Ringkasan
Penyahkod
Instruksional ini menerangkan bagaimana membuat decoder morse yang menukar kod morse menjadi teks bercetak.
- Decoder mampu menyahkod morse hingga sekurang-kurangnya 80 WPM (perkataan per minit)
- Penyahkod secara automatik mengesan variasi dalam kelajuan kiriman yang diterima.
- Teks dipaparkan pada Monitor Serial anda (atau pada modul paparan TFT 320 x 240 jika dipasang) [1]
Penghantar
Pengirim morse juga telah disertakan
- Pengirim membantu anda meningkatkan kualiti penghantaran morse anda.
- Penyahkod mengesahkan bahawa apa yang anda hantar adalah betul
Kos bahagian
Anggaran kos perisai decoder morse, ditolak paparan TFT pilihan, adalah $ 25.
Klik di sini untuk melihat arahan saya yang lain.
Hadiah Kedua dalam Cabaran Audio 2020
Disyorkan:
Penulis Kod Arduino Morse: 7 Langkah (dengan Gambar)
Penulis Kod Arduino Morse: Saya membuat robot yang dapat mengubah teks yang diberikan menjadi kod Morse dan kemudian menulisnya !! Ia terbuat dari kadbod dan Lego dan untuk elektronik saya menggunakan Arduino dan hanya dua motor
Kotak Dekoder Bilik Escape: 7 Langkah (dengan Gambar)
Escape Room Decoder Box: Escape Room adalah aktiviti yang sangat menyeronokkan yang sangat menarik dan bagus untuk kerja berpasukan. Pernahkah anda berfikir untuk membuat Escape Room anda sendiri? Dengan kotak penyahkod ini, anda boleh berada dalam perjalanan dengan baik! Lebih baik anda berfikir tentang menggunakan es
5 $ KALENDAR PCB DENGAN JAMINAN BINARY: 7 Langkah (dengan Gambar)
Kalendar PCB $ 5 DENGAN JAMINAN BINARY: Hai! Saya membuat kalendar PCB dan jam binari ini dengan Eagle CAD. Saya menggunakan ATMEGA328P MCU (dari Arduino) dan matriks LED 9x9. Ukuran untuk papan saya ialah 8cmx10cm (3.14 inci x 3.34 inci). Agak terlalu kecil tetapi pertama: versi percuma Eagle CAD membenarkan 80cm ^ 2
Tree of Life (Arduino Capacitive Touch Sensor Driving Servo Motor): 6 Langkah (dengan Gambar)
Tree of Life (Arduino Capacitive Touch Sensor Driving Servo Motor): Untuk projek ini kami membuat pokok pemberian padi yang terdiri daripada sensor sentuh kapasitif dan motor servo. Setelah menyentuh tikar, motor servo akan diaktifkan dan nasi (atau apa sahaja yang anda mahu masukkan ke dalamnya) akan dilepaskan. Berikut adalah video pendek
Dekoder Jalur Magnetik Arduino: 4 Langkah (dengan Gambar)
Arduino Magnetic Stripe Decoder: Instruksional ini menunjukkan cara menggunakan beberapa kod yang tersedia secara bebas, arduino, dan pembaca jalur magnetik standard untuk mengimbas dan memaparkan data yang disimpan pada kad jalur magnetik seperti kad kredit, ID pelajar, dll. Saya mendapat inspirasi untuk siarkan ini selepas