Мазмұны:

Екілік ағаш Морзе декодері: 7 қадам (суреттермен)
Екілік ағаш Морзе декодері: 7 қадам (суреттермен)

Бейне: Екілік ағаш Морзе декодері: 7 қадам (суреттермен)

Бейне: Екілік ағаш Морзе декодері: 7 қадам (суреттермен)
Бейне: Токарлық және фрезерлік станоктардың конустарын тазалауға арналған ағаш конус жасау 2024, Қараша
Anonim
Image
Image
Схема диаграммасы
Схема диаграммасы

Бұл нұсқаулық Arduino Uno R3 көмегімен Морзе кодын қалай декодтау керектігін түсіндіреді.

Жіберу жылдамдығына автоматты түрде реттейтін декодер морзаны минутына кемінде 80 сөзге дейін декодтауға қабілетті.

Кіріс коды Arduino сериялық мониторында (немесе орнатылған жағдайда TFT экранында) мәтін түрінде көрсетіледі.

Морзе жіберуді үйренгіңіз келсе, тонды осциллятор қосылды.

Декодердің ерекшеліктері:

  • 320 x 240 TFT дисплей модулі [1]
  • қажетсіз сигналдарды ажыратуға арналған Goertzel цифрлық жолақты сүзгісі.
  • сигналды декодтауға арналған «екілік морзе ағашы»
  • автоматты жылдамдықты бақылау
  • морс жаттығуларын орындау кезінде естілетін дыбыс
  • кіріс және шығыс мәтіні көрсетіледі.

Келесі таңбалар мен белгілер танылады:

  • [A.. Z]
  • [0..9]
  • [., ? ' ! / () &:; = + - _ " @]

TFT дисплейін қоспағанда, морзе декодер қалқанының болжамды құны - 25 доллар. [1]

Суреттер

  • Мұқабадағы фотосуретте толық жиналған қондырғы көрсетілген
  • Бейнеде декодердің жұмысы көрсетілген

Ескертулер

[1]

  • TFT дисплей модулі міндетті емес, себебі барлық мәтін Arduino «Serial Monitor» -ға жіберіледі.
  • TFT модулі менің нұсқаулығымда сипатталған

1 -қадам: бөлшектер тізімі

Келесі бөліктер https://www.aliexpress.com/ сайтынан алынды.

Arduino UNO R3 үшін 2,54мм қадамға арналған 1 ғана прототипті қалқан

Келесі бөліктер жергілікті түрде алынды:

  • 1 тек LM358 қос опампасы
  • 1 тек жасыл жарық диоды
  • Тек 1 жарықдиодты клип
  • 1 электрофонды микрофон капсуласы
  • 1 тек қалыпты ашылатын түйме
  • 1 ғана 8 істікшелі DIP ұясы
  • 2 ғана 330 Ом резистор
  • 2 ғана 2K2 резисторы
  • 5 ғана 10К Ом резисторы
  • Тек 56К Ом 2 резистор
  • 2 тек 1ФФ конденсатор
  • 1 ғана 10uF конденсатор

Келесі бөліктер міндетті емес:

  • 1 ғана 2,2 дюймдік TFT SPI СКД дисплей модулі 240*320 ILI9341 SD картасы ұясы бар Arduino Raspberry Pi 51/AVR/STM32/ARM/PIC [1]
  • Морзе пернесі / батырмасы
  • 1 тек BC548 NPN транзисторы
  • 1 тек 1 дюймдік динамик
  • 1 ғана 33К Ом резисторы
  • 1 ғана 3,5 мм моно штепсель (морзе кілті үшін)
  • 1 ғана 3,5 мм моно розетка (морзе кілті үшін)
  • 3 тек 9 мм М3 нейлонды аралықтар
  • 1 ғана 130 x 68 x 44 мм ABS пластикалық қорап
  • 5 тек 2 істікшелі бұрышты қосқыштар

Морзе декодер қалқанының қосымша бағасы TFT дисплейін есептемегенде - 25 доллар. [1]

Ескертулер

[1]

Қосымша 320 x 240 TFT дисплей модулінің бөлшектер тізімі менің нұсқаулығымда көрсетілген

[2]

Егер сіз жіберушіні қолданғыңыз келсе, морзе кілті немесе берік батырмасы қажет.

2 -қадам: схема

Схема диаграммасы
Схема диаграммасы
Схема диаграммасы
Схема диаграммасы
Схема диаграммасы
Схема диаграммасы

Суреттер

Фото 1 морзе декодерінің схемасын көрсетеді. 330 Ом резисторы Морзе кілтімен қатар D4 шығыс токын кездейсоқ жерге тұйықталу кезінде шектейді … оның мәнін жоғарылату динамиктен шығатын дыбыс шығынын төмендетеді. Осы себепті мен оны қалқанға қосқан жоқпын, бірақ оны реттеудің қарапайымдылығы үшін оны тікелей морс-кілт ұясына тіркедім

Фото 2 сәйкес қалқанды көрсетеді. Қалқан менің нұсқаулығымнан https://www.instructables.com/id/Arduino-TFT-Grap…, оған мен микрофон күшейткіші мен тонус осцилляторын қостым. [1]

3 -суретте Arduino -ға бекітілген аяқталған қалқан көрсетілген. Егер мәтін сіздің Arduino «сериялық мониторында» қаралатын болса, басқа компоненттер қажет емес

4 -суретте жартылай қорапталған декодер көрсетілген. Қақпақта дисплейді қарау үшін тесік кесілген. Динамик пен микрофон корпусқа қатты желімделген. Динамикті орнатпас бұрын қақпақтағы бірнеше динамик тесіктерін бұрғылаңыз. Қақпақтағы орталық розетка микрофонға арналған … онсыз декодер динамикке жақын орналасуы керек, бұл әрқашан мүмкін емес

5 -сурет TFT экранын көрсетеді. Дисплейдің шеттеріне қара электрлік таспа бекітілген … бұл таспа жарықтың ағуын болдырмайды және дисплей мен қақпақтың саңылауы арасындағы кез келген сәйкессіздікті жасырады

Маңызды

[1]

Үлкен USB коннекторы бар Arduino USB коннекторы мен Arduino қалқаны арасында электрлік таспаның қабатын қажет етеді. Кездейсоқ шорт таспасыз мүмкін, себебі тазарту аз. Кішкене коннекторлары бар Arduinos үшін таспа қажет емес

3 -қадам: Теория

Теория
Теория
Теория
Теория
Теория
Теория

Морзе кодының әрпі «нүкте» және «сызықша» деп аталатын қысқа және ұзақ дыбыстар сериясынан тұрады.

  • нүкте (.) - ұзындығы 1 бірлік
  • сызықша (_) ұзындығы 3 бірлік
  • әріп элементтері арасындағы бос орын - 1 бірлік
  • әріптер арасындағы бос орын - 3 бірлік
  • сөздер арасындағы бос орын - 7 бірлік

Біз кіретін тондың нүкте немесе сызықша екенін анықтай аламыз, оның ұзақтығын 2 бірлік эталондық тонмен салыстыру арқылы.

  • нүкте 2 бірліктен аз
  • сызықша 2 бірліктен үлкен

Кіріс нүктелер мен сызықшаларды декодтаудың екі түрлі әдісі бар:

  • сызықтық іздеу
  • екілік ағаш (сонымен қатар дихотомиялық іздеу деп аталады)

Сызықтық іздеу

Жалпы әдістердің бірі - таңбалар жиынын және олардың сәйкес келетін морзе үлгілерін құру. Мысалы, келесі таңбалардың әрқайсысы келесідей сақталады:

  • A _
  • B _…
  • С _. _.
  • 0 _ _ _ _ _
  • 1. _ _ _ _
  • 2.. _ _ _

Әр әріпке әріптің өзі үшін 6 ұяшық қажет … 1 және әріптердің (.) Және (_) әріптері үшін 5. Мұны істеу үшін бізге 216 ұяшықтан тұратын әріптер [36] [6] керек. Қолданылмайтын ұяшықтар әдетте нөлмен немесе бос орынмен толтырылады.

Кіріс нүктелер мен сызықтарды декодтау үшін біз әрбір кіріс әріптің нүкте/сызық үлгісін сілтеме таңбалар үлгілерімен салыстыруымыз керек.

Бұл әдіс жұмыс істесе де, ол өте баяу.

Бізде 26 әріп ('A',.. 'Z') және цифрлар ('0',… '9') массивте сақталған деп айтыңыз, сонда біз әрқайсысында 5-ке дейін іздеу бар 36 іздеуді орындауымыз керек, бұл 36*5 = 180 іздеу, '9' цифрын декодтау.

Екілік ағаш

Екілік іздеу әлдеқайда жылдам, себебі іздеу қажет емес.

Сызықтық іздеуден айырмашылығы, таңбаны да, морзаны да сақтауды талап ететін, екілік ағаш тек таңбаларды сақтайды, бұл массив өлшемінің кішірек екенін білдіреді.

Мен екілік ағашымды (фото1) екіге бөлдім (2 және 3 -суреттер), оны оқуға ыңғайлы ету үшін.

Таңбаны табу үшін біз нүктені естіген сайын көрсеткішті солға жылжытамыз және сызықша естілген сайын көрсеткішті оңға қарай жылжытамыз. Әр қозғалыстан кейін біз келесі қадам үшін көрсеткіш қашықтықты екі есе азайтамыз … осылайша екілік ағаш деп аталады.

'9' әрпін декодтау үшін (сызықша, сызықша, сызықша, сызықша, нүкте) 5 оңға қарай 4 … 4 оңға және 1 солға қарай жылжуды қажет етеді, бұл көрсеткішті тікелей «9» үстіне қалдырады.

Бес қадам 180 іздеуден айтарлықтай жылдам !!!!!

Екілік таңбалар жиыны да кішірек … 26 әріп пен 10 санға тек 64х1 жолдық массив қажет. Мен тыныс белгілерін шеше алатын 128 таңбалы массив құруды таңдадым.

4 -қадам: Дизайн жазбалары

Дизайн жазбалары
Дизайн жазбалары
Дизайн жазбалары
Дизайн жазбалары
Дизайн жазбалары
Дизайн жазбалары
Дизайн жазбалары
Дизайн жазбалары

Морзе интерференциялық сигналдар болған кезде декодтау қиын. Қажет емес сигналдарды қабылдамау керек … бұл қандай да бір сүзгіні қажет етеді.

Көптеген мүмкіндіктер бар:

  1. Фазамен бекітілген ілмектер
  2. Индукторлық-конденсаторлық сүзгілер
  3. Резисторлық-конденсаторлық белсенді сүзгілер
  4. Fast Fourier Transform немесе Goertzel сүзгісі сияқты цифрлық сигналды өңдеу.

1, 2, 3 әдістері көлемді сыртқы компоненттерді қажет етеді.

4 -әдіс сыртқы компоненттерді қажет етпейді … жиіліктер математикалық алгоритмдердің көмегімен анықталады.

Жылдам Фурье трансформациясы (FFT)

Күрделі толқын түрінде тонның болуын анықтаудың бір әдісі - Fast Fourier түрлендіруін қолдану

Фото 1 -де FFT (Fast Fourier Transform) дыбыстық спектрді «қоқыс жәшіктеріне» қалай бөлетіні көрсетілген.

2 -суретте FFT «қоқыс жәшіктері» сигналға қалай жауап беретінін көрсетеді … бұл жағдайда 800 Гц. Егер 1500 Гц деген екінші сигнал болса, біз екі жауапты көреміз: біреуі 800 Гц, екіншісі 1500 Гц.

Теория бойынша, белгілі бір FFT жиілік қалтасының шығыс деңгейін бақылау арқылы Морзе кодының декодерін жасауға болады … үлкен саны нүктенің немесе штрихтің болуын білдіреді, ал аз саны сигналды білдірмейді.

Морзе кодының декодерін 2 -суреттегі «6 -бетті» бақылау арқылы жасауға болады, бірақ бұл тәсілде бірқатар қателіктер бар:

  • Біз тек бір жиілік қалтасын алғымыз келеді … қалғаны босқа есептеулер
  • жиілік шкалалары қызығушылық жиілігінде дәл болмауы мүмкін
  • бұл салыстырмалы түрде баяу (бір Arduino циклына 20 мС ()

Басқа әдіс - Goertzel сүзгісін қолдану.

Герцель сүзгісі

Goertzel сүзгісі FFT -ге ұқсас, бірақ тек бір жиілік қалтасы бар.

Photo3 дискретті дыбыстық қадамдарға Герцель сүзгісінің жиілік реакциясын көрсетеді.

Фото 4 - сол жиілік диапазонында бір сүзгіні тазарту.

Мен Гертцель алгоритмімен «баруға» шешім қабылдадым:

  • Goertzel алгоритмін қолданатын Arduino циклінің () уақыты Arduino «fix_FFT» кітапханасын қолдана отырып, FFT шешімі үшін 14 мС (миллисекунд) 20 мС (миллисекунд) болды.
  • Goertzel жолақ сүзгісінің орталық жиілігін орнату оңай.
  • Өткізу ені шамамен 190 Гц.

5 -фотода 900 Гц герцель сүзгісінен дыбыс анықталған кездегі сандық шығыс көрсетілген. Мен дыбыс шегін 4000 мәніне қойдым … 4000 жоғары мәндер тонды көрсетеді.

Теория бойынша сізге сүзгіні ыңғайлы тыңдау жиілігіне баптау қажет. Өкінішке орай, менің 1 дюймдік динамигімнің дыбыс шығысы 900 Гц -тен төмен түседі. Мәселені болдырмау үшін мен 950 Гц жиілік сүзгісін қолданамын. Балама сүзгі жиіліктерін есептеуге арналған қажетті формулалар менің код тақырыбымда орналасқан.

Декодтау

Нүктелер мен сызықтарды декодтау бірінші қарағанда оңай емес.

Мінсіз морзе келесідей анықталады:

  • нүкте = 1 бірлік
  • әріптің ішіндегі бос орындар = 1 бірлік
  • сызықша = 3 бірлік
  • әріптер арасындағы бос орын = 3 бірлік
  • сөздер арасындағы бос орын = 7 бірлік

Керемет морзаны дешифрлау үшін бізге 2 бірлікке арналған дыбыстық сигналдың ұзақтығы қажет

  • нүкте <2 бірлік
  • элементтер кеңістігі <2 бірлік
  • сызықша> 2 бірлік
  • әріп _ кеңістік> 2 бірлік
  • word_space> 6 бірлік (яғни 3 рет сілтеме бірлігі)

Бұл машина морзасы үшін жұмыс істейді, бірақ «нақты әлемде»:

  • жіберу жылдамдығы әр түрлі болады
  • әр нүктенің ұзақтығы өзгереді
  • әр сызықтың ұзақтығы өзгереді
  • E, I, S, H, 5 әріптерінде нүктелердің ұзақтығы орташа болатын нүктелер ғана бар
  • T, M, O, 0 әріптерінде тек орташа сызықша сызықша ғана бар
  • сөз арасындағы бос орындар болмауы мүмкін
  • fading декодер қалпына келтіруі керек қателерді тудырады.
  • кедергі әсерінен бұзылған сигналдар

Тек нүкте мен сызықшадан тұратын әріптер ішінара шешіледі, егер:

біз жарамды нүкте мен сызықша алынғанша анықтаманың ұзақтығын бағалаймыз. Мен 200 миллисекунд қолданамын, егер жіберу жылдамдығы 6 WPM (минутына сөздер) мен 17 WPM аралығында болса, жарамды. Егер сіз морзе үйренсеңіз, сізге бұл құндылықты арттыру қажет болуы мүмкін. Бағдарламаға жылдамдық кестесі енгізілген

Жылдамдықтың өзгеруі шешіледі, егер:

  • біз әр нүкте мен әр сызықша бойынша орташа жылжуды орындаймыз
  • әрбір таңба алынғаннан кейін сілтеме ұзақтығын қайта есептеңіз

Келмейтін сөздер мен олқылықтар шешіледі, егер:

  • соңғы артқа (тонуссыз) ауысу уақытын есте сақтаңыз,
  • әр әріптен кейін алгоритмді қайта іске қосыңыз;
  • кезекті көшуді күтетін уақытты есептеңіз (тонуссыз)
  • егер 6 уақыт бірлігі асып кетсе, бос орын енгізіңіз.

Морз осцилляторы

Мен бастапқыда бірнеше Piezo дыбыстық сигналдарын көрдім, бірақ таптым:

  • жиілігі бекітілді
  • шығыс жиілігі ұзақ тыңдау үшін тым жоғары болды
  • пьезо Гертцель өткізу жолағынан шығып кетті

Содан кейін мен 750 Гц шаршы толқыны бар акустикалық түрлендіргішті басқаруға тырыстым, бірақ оның 1 -ші және 3 -ші гармониканы сүзетін резонансы бар екенін байқадым. 6-суретте 750 Гц шаршы толқынға микрофон күшейткішінің шығысы көрсетілген … біз 5-ші гармониканы көріп отырмыз !!!

Содан кейін мен шағын динамикке жүгіндім. Фото 7 микрофонның шағын динамикке жіберілген 750 Гц квадраттық толқынға шығуын көрсетеді … бұл жолы біз 5 -ші гармониканы емес, іргетасын көреміз. Герцель сүзгісі гармониканы елемейді.

Ескертулер

[1]

kk.wikipedia.org/wiki/Goertzel_algorithm

www.embedded.com/the-goertzel-algorithm/

5 -қадам: Бағдарламалық қамтамасыз ету

Бағдарламалық қамтамасыз ету
Бағдарламалық қамтамасыз ету
Бағдарламалық қамтамасыз ету
Бағдарламалық қамтамасыз ету
Бағдарламалық қамтамасыз ету
Бағдарламалық қамтамасыз ету

Орнату

  • Қосылған MorseCodeDecoder.ino файлын жүктеңіз [1]
  • Бұл файлдың мазмұнын жаңа Arduino эскизіне көшіріңіз
  • Эскизді «MorseCodeDecoder» ретінде сақтаңыз (тырнақшасыз)
  • Эскизді құрастырыңыз және Arduino -ға жүктеңіз

Бағдарламалық жасақтаманы жаңарту 23 шілде 2020 ж

Келтірілген «MorseCodeDecoder6.ino» файлына келесі мүмкіндіктер қосылды.

  • «Нағыз Блэкман» терезесі [2]
  • «Шу_бланкері»

Реттеу:

  • светодиод жыпылықтай бастағанша, сөнгенше қабылдағыштың дыбыс деңгейін жоғарылатыңыз
  • енді қабылдағышты светодиод кіретін морспен сәйкес келгенше реттеңіз
  • Noise_blanker 8 мС дейінгі шуылдарды елемеуге арналған (бір цикл уақытында)
  • Шу шегін Debug = true параметрін орнату және сериялық плоттерді қарау арқылы реттеуге болады

Ескерту

[1]

Егер сіз мәтінді де көргіңіз келсе, Arduino Serial Monitor -ды 115200 bodқа орнатыңыз.

[2]

  • Фото 1… Нақты Blackman терезесі
  • Фото 2… Нақты Блэкман терезесі жоқ Goertzel сүзгісі
  • Фото 3,,, Goertzel сүзгісі дәл Blackman терезесі қолданылған

6 -қадам: операция

Декодер

Морзды тыңдау кезінде құрылғыны динамиктің жанына қойыңыз.

  • Электрофон микрофонының капсуласы динамиктен морзе сигналын қабылдайды.
  • Электрофон микрофонының шығысы Arduino -ға өңдеуге жіберілгенге дейін 647 есе (56дБ) күшейтіледі.
  • Goertzel цифрлық жолақты сүзгісі морзалық сигналды шудан шығарады.
  • Декодтау екілік ағаштың көмегімен жүзеге асады.
  • Дешифратордың шығысы 320 x 240 пиксельдік TFT дисплейінде мәтін түрінде көрсетіледі. Егер сіз дисплейді пайдаланғыңыз келмесе, ол Arduino «Serial Monitor» -ға жіберіледі.

Морзе Жіберуші

Морзе жіберуші де қосылды. Бұл сізге морс жіберуге және келесідей жұмыс жасауға мүмкіндік береді:

  • Arduino пин 4 -те тұрақты дыбыстық дыбыс шығарылады.
  • Біз бұл дыбысты морзалық пернені басқан сайын декодердің дауыс зорайтқышы арқылы естиміз.
  • Дыбыс Goertzel сүзгісімен бірдей жиілікке орнатылған, ол декодерді нағыз морзаны тыңдауды ойластырады … сіз жібергеннің бәрі дисплейде басылған мәтін ретінде пайда болады.

Сіздің жіберуіңіз жақсарады, себебі декодер жиі кездесетін қателерді алады:

  • символдар арасында тым көп бос орын. (мысалы: Q MA ретінде бекітілген)
  • әріптер арасында тым көп бос орын (мысалы: ҚАЗІР NO W түрінде басылған)
  • қате код

7 -қадам: Қорытынды

Декодер

Бұл нұсқаулық Морзе кодын басылған мәтінге түрлендіретін Морзе декодерін қалай жасау керектігін сипаттайды.

  • Дешифратор кемінде 80 WPM -ге дейін морсты декодтауға қабілетті (минутына сөздер)
  • Декодер автоматты түрде жіберу жылдамдығының өзгеруін бақылайды.
  • Мәтін сериялық мониторда көрсетіледі (немесе 320 x 240 TFT дисплей модулінде болса) [1]

Жіберуші

Морзе жіберуші де қосылды

  • Жіберуші сізге морс жіберу сапасын жақсартуға көмектеседі.
  • Декодер сіздің жібергеніңіздің дұрыстығын растайды

Бөлшектердің құны

Қосымша TFT дисплейін есептемегенде, морзе декодер қалқанының болжамды бағасы - 25 доллар.

Менің басқа нұсқауларды көру үшін мына жерді басыңыз.

Аудио шақыру 2020
Аудио шақыру 2020
Аудио шақыру 2020
Аудио шақыру 2020

Аудио шақырудағы екінші сыйлық - 2020

Ұсынылған: