Мазмуну:

Binary Tree Морзе декодери: 7 кадам (Сүрөттөр менен)
Binary Tree Морзе декодери: 7 кадам (Сүрөттөр менен)

Video: Binary Tree Морзе декодери: 7 кадам (Сүрөттөр менен)

Video: Binary Tree Морзе декодери: 7 кадам (Сүрөттөр менен)
Video: Цифровая схемотехника Лекция № 7 Регистры, комбинационные сумматор и вычитатель 2024, Ноябрь
Anonim
Image
Image
Райондук диаграмма
Райондук диаграмма

Бул көрсөтмө Arduino Uno R3 менен Морзе кодун кантип декоддоону түшүндүрөт.

Жөнөтүү ылдамдыгын автоматтык түрдө тууралоочу декодер, Морзаны минутасына 80 сөздөн кем эмес чечмелөөгө жөндөмдүү.

Кирүүчү код Arduino Serial Monitorңузда текст катары көрсөтүлөт (же орнотулган болсо 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.54mm Pitch үчүн 1 гана прототип калканы

Төмөнкү бөлүктөр жергиликтүү түрдө алынган:

  • 1 гана LM358 кош опам
  • 1 гана жашыл LED
  • 1 гана LED клип
  • 1 гана электрофондук капсула
  • 1 кадимкидей эле ачык баскыч
  • 1 гана 8-пин DIP розеткасы
  • 2 гана 330 омдук резистор
  • 2 гана 2K2 каршылыгы
  • 5 гана 10K ohm каршылыгы
  • 2 гана 56K ohm резисторлору
  • 2 гана 1uF конденсатор
  • 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 гана 33K ohm каршылыгы
  • 1 гана 3,5 мм моно сайгыч (морзе ачкычы үчүн)
  • 1 гана 3,5 мм моно розетка (Морзе баскычы үчүн)
  • 3 гана 9 мм M3 тапталган нейлон аралыгы
  • 1 гана 130 x 68 x 44mm 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 "Serial Monitor "ңузда карала турган болсо, башка компоненттердин кереги жок

Сүрөт 4 декодер жарым -жартылай коробкага салынганын көрсөтөт. Дисплейди көрүү үчүн капкактын тешиги кесилген. Динамик менен микрофон ишке ысык чапталган. Динамикти орнотуудан мурун капкактагы кээ бир спикерлерди тешкиле. Капкактагы борбордук розетка кеңейтүү микрофону үчүн … ансыз декодерди динамиктин жанына коюу керек, бул дайыма эле мүмкүн боло бербейт

Сүрөт 5 TFT экранын көрсөтөт. Дисплейдин четтерине кара электр лента жабыштырылган … бул тасма жарыктын агып кетүүсүн алдын алат жана дисплей менен капкактын тешигинин ортосундагы ар кандай туура эместикти жашырат

Маанилүү

[1]

Чоң USB туташтыргычы бар Arduinos, USB туташтыргычы менен Arduino калканынын ортосунда электрдик лентанын катмарын талап кылат. Капыстан шорты тасмасы жок мүмкүн, анткени анча чоң эмес. Лента кичинекей туташтыргычы бар Arduinos үчүн талап кылынбайт

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

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

Морзе кодунун ар бир тамгасы "чекиттер" жана "сызыкчалар" деп аталган кыска жана узакка созулган обондордон турат.

  • чекит (.) узундугу 1 бирдик
  • сызык (_) 3 бирдик узундугу
  • тамга элементтеринин ортосундагы боштук 1 бирдик
  • тамгалар ортосундагы боштук 3 бирдик
  • сөздөрдүн ортосундагы аралык 7 бирдик

Кирип жаткан обон чекит же сызык экенин анын узактыгын 2 бирдиктин шилтеме үнү менен салыштыруу аркылуу аныктай алабыз.

  • чекит 2 бирдиктен аз
  • сызык 2 бирдиктен чоң

Чекиттердин жана сызыктардын келип түшкөн моделин чечмелөөнүн эки башка ыкмасы бар:

  • сызыктуу издөө
  • бинардык дарак (дагы дихотомиялык издөө деп аталат)

Сызыктуу издөө

Бир жалпы ыкма - бул каармандардын массивин жана алардын дал келген Морзе үлгүлөрүн түзүү. Мисалы, төмөнкү символдордун ар бири төмөнкүчө сакталат:

  • А. _
  • B _…
  • C _. _.
  • 0 _ _ _ _ _
  • 1. _ _ _ _
  • 2.. _ _ _

Ар бир тамга 6 уячаны талап кылат … 1 тамганын өзү үчүн жана 5 (.) Жана (_) үчүн. Бул үчүн бизге 216 ячейкадан турган тамгалар [36] [6] керек. Колдонулбаган клеткалар адатта нөл же боштук менен толтурулат.

Кирүүчү чекиттерди жана сызыктарды декоддоо үчүн биз ар бир келген каттын чекит/сызык үлгүсүн биздин шилтеме тамгалар үлгүлөрү менен салыштырышыбыз керек.

Бул ыкма иштеп жатканда, бул өтө жай.

Айталы, бизде 26 тамга бар ('A',.. 'Z') жана цифралары ('0',… '9') массивде сакталган, анда биз 36 издөөнү аткарышыбыз керек, ар бири 5 суб-издөөгө чейин, бул '9' цифрасын чечүү үчүн жалпысынан 36*5 = 180 издөө.

Binary Tree

Эч кандай издөө талап кылынбагандыктан, бинардык издөө алда канча тез болот.

Сызыктуу издөөдөн айырмаланып, символдун да, морзанын да үлгүлөрүнүн сакталышын талап кылган, экилик дарак символдорду гана сактайт, бул массивдин өлчөмү кичирээк экендигин билдирет.

Мен бинардык дарагымды (фото1) экиге бөлдүм (2 жана 3 -сүрөттөр), аны окугула деп.

Белги табуу үчүн биз чекитти уккан сайын көрсөткүчтү солго жылдырабыз жана сызыкты уккан сайын көрсөткүчтү оңго жылдырабыз. Ар бир кыймылдан кийин биз кийинки кадам үчүн көрсөткүч аралыкты эки эсе кыскартабыз … бинардык бинардык дарак.

"9" тамгасын чечүү үчүн (тире, сызык, тире, сызык, чекит) 5 жылыш керек … 4 оңго жана 1 солго, бул көрсөткүчтү түз "9" үстүндө калтырат.

Беш кыймыл 180 издөөгө караганда кыйла ылдамыраак !!!!!

Бинардык символдун массиви дагы кичине … 26 тамга жана 10 сан 64 х 1 сап массивин гана талап кылат. Мен тыныш белгилерин чечүү үчүн 128 символдун массивин түзүүнү чечтим.

4 -кадам: Дизайн эскертүүлөрү

Дизайн ноталары
Дизайн ноталары
Дизайн ноталары
Дизайн ноталары
Дизайн ноталары
Дизайн ноталары
Дизайн ноталары
Дизайн ноталары

Морзе тоскоолдук кылган сигналдар болгон учурда кодун чечүү кыйын. Керексиз сигналдарды четке кагуу керек … бул кандайдыр бир чыпканы талап кылат.

Көптөгөн мүмкүнчүлүктөр бар:

  1. Фазалуу кулпулар
  2. Индуктордук-конденсатордук чыпкалар
  3. Резистордук-конденсатордук активдүү чыпкалар
  4. Санарип сигналды иштетүү, мисалы, Fast Fourier Transform же Goertzel чыпкасы.

1, 2, 3 ыкмалары көлөмдүү болгон тышкы компоненттерди талап кылат.

4 -ыкма эч кандай тышкы компоненттерди талап кылбайт … жыштыктар математикалык алгоритмдердин жардамы менен аныкталат.

Fast Fourier Transform (FFT)

Татаал толкун формасында обондун бар экендигин аныктоонун бир ыкмасы Fast Fourier Transform колдонуу

Фото 1де FFT (Fast Fourier Transform) аудио спектрди "урналарга" кантип бөлөөрү көрсөтүлгөн.

Фото 2 ФФТнын "контейнерлери" сигналга кандай жооп берерин көрсөтөт … бул учурда 800Гц. Эгерде 1500Гц деген экинчи сигнал болгондо, биз эки жоопту көрмөкпүз: бири 800Гцде, экинчиси 1500Гцте.

Теориялык жактан алганда, белгилүү бир FFT жыштык кутусунун чыгуу деңгээлин көзөмөлдөө аркылуу Морзе кодунун декодерин жасоого болот … көп сан чекиттин же сызыктын болушун билдирет … аз сан сигналды билдирбейт.

Морзе кодунун мындай декодерин 2 -сүрөттөгү "бин 6га" байкоо жүргүзүү менен жасаса болот, бирок бул ыкманын бир катар туура эмес жактары бар:

  • Биз бир гана жыштык кутусун каалайбыз … калгандары текке кетет
  • жыштык контейнерлери кызыгуу жыштыгында так көрүнбөшү мүмкүн
  • бул салыштырмалуу жай (Arduino циклине 20mS ()

Дагы бир ыкма - Goertzel чыпкасын колдонуу.

Goertzel чыпкасы

Goertzel чыпкасы FFTге окшош, бирок бир гана жыштык кутусу бар.

Photo3 дискреттүү аудио кадамдарга Goertzel чыпкасынын жыштыгын көрсөтөт.

Сүрөт 4 - ошол эле жыштык диапазонунда бир эле фильтрди шыпыруу.

Мен Goertzel алгоритми менен "барууну" чечтим:

  • Goertzel алгоритмин колдонгон Arduino loop () убактысы Arduino "fix_FFT" китепканасын колдонуп FFT чечүү үчүн 14mS (миллисекунд) менен 20mS (миллисекунд) болгон.
  • Goertzel өткөрмө чыпкасынын борбордук жыштыгын орнотуу оңой.
  • Өткөрүү жөндөмү болжол менен 190 Гц.

Сүрөт 5 бир тон аныкталганда 900 Гц Goertzel чыпкасынан сандык чыгууну көрсөтөт. Мен обон босогосун 4000ге койдум… 4000ден жогору маанилер обонду билдирет.

Теория боюнча, чыпкаңызды ыңгайлуу угуу жыштыгына тууралашыңыз керек. Тилекке каршы, менин 1 дюймдук спикеримдин аудио чыгарылышы 900 Гцтен тез төмөндөйт. Кандайдыр бир көйгөйлөрдү болтурбоо үчүн, мен 950 Гц чыпка жыштыгын колдонуп жатам. Альтернативдүү чыпкалардын жыштыгын эсептөө үчүн керектүү формулалар менин кодумдун баш жагында.

Декоддоо

Чекиттерди жана сызыктарды декоддоо биринчи көрүнгөндөй оңой эмес.

Perfect морзе төмөнкүчө аныкталат:

  • чекит = 1 бирдик
  • тамга ичиндеги боштуктар = 1 бирдик
  • сызык = 3 бирдик
  • тамгалар ортосундагы боштук = 3 бирдик
  • сөздөрдүн ортосундагы боштук = 7 бирдик

Морздун кодун чечүү үчүн бизге жөн гана 2 бирдикке багытталган тон керек

  • чекит <2 бирдик
  • элемент мейкиндиги <2 бирдик
  • сызык> 2 бирдик
  • тамга _ мейкиндик> 2 бирдик
  • word_space> 6 бирдик (б.а. 3 х шилтеме бирдиги)

Бул машина морси үчүн иштейт, бирок "чыныгы дүйнөдө":

  • жөнөтүү ылдамдыгы ар кандай
  • ар бир чекиттин узактыгы өзгөрөт
  • ар бир сызыктын узактыгы өзгөрөт
  • тамгалар E, I, S, H, 5 чекиттердин узактыгына орточо чекиттерди камтыйт
  • T, M, O, 0 тамгалары сызыкчанын узактыгына орточо болгон тире сызыктарды камтыйт
  • сөз боштуктары келбеши мүмкүн
  • өчүрүү декодер калыбына келиши керек болгон каталарды жаратат.
  • кийлигишүүдөн улам бузулган сигналдар

Бир гана чекит жана тире камтыган тамгалар жарым -жартылай чечилет, эгер:

биз жарактуу чекитти жана жарактуу чекитти алганга чейин маалымдама мөөнөтүн баалайбыз. Мен жөнөтүү ылдамдыгы 6 WPM (мүнөтүнө сөздөр) менен 17 WPM ортосунда болсо, жарактуу болгон 200 миллисекундду колдоном. Морзе үйрөнүп жатсаңыз, сизге бул баалуулукту жогорулатуу керек болушу мүмкүн. Программада ылдамдык столу камтылган

Ылдамдыктын өзгөрүүсү төмөнкү учурларда чечилет:

  • биз ар бир чекит жана ар бир сызык боюнча орточо көрсөткүчтү аткарабыз
  • ар бир белгини алгандан кийин маалымдама мөөнөтүн кайра эсептөө

Сөз боштуктары жана келбеген сөз боштуктары чечилет, эгерде:

  • акыркы артка (тонуска чейин) өтүү убактысын эстеп,
  • ар бир тамгадан кийин алгоритмди кайра
  • кийинки убакыттын өтүшүн күтүп жатканда, өткөн убакытты эсептеңиз (тонуска үнсүз) жана
  • 6 убакыт бирдиги ашып кеткен болсо, боштукту киргизиңиз.

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

Мен башында бир нече Piezo ызылчаларын сынап көрдүм, бирок таптым:

  • жыштык белгиленди
  • чыгаруу жыштыгы узакка угуу үчүн өтө жогору болгон
  • пьезо Goertzel өткөрүү тилкесинен чыгып кетүүгө умтулду

Мен андан кийин 750 Гц квадрат толкуну бар акустикалык өткөргүчтү айдоого аракет кылдым, бирок анын 1 жана 3 -гармониканы чыпкалаган резонансы бар экенин байкадым. Сүрөт 6 микрофон күчөткүчүнүн 750 Гц квадрат толкунуна чыкканын көрсөтөт … биз 5-гармонияны көрүп жатабыз !!!

Андан кийин кичинекей спикерди колдондум. Сүрөт 7 микрофондун кичинекей динамикке жөнөтүлгөн 750 Гц квадрат толкунуна чыгарганын көрсөтөт … бул жолу биз фундаменталды көрүп жатабыз … 5 -гармонияны эмес. Goertzel чыпкасы гармониканы этибарга албайт.

Эскертүүлөр

[1]

en.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"

Тууралоо:

  • кабыл алгычтын аудио деңгээлин LED жарк этип баштагандан кийин кайра өчүрүлгөнгө чейин жогорулатыңыз
  • эми кабыл алуучуңузду LED келип түшкөн морзе менен бирдей жарк эткенге чейин тууралаңыз
  • Noise_blanker 8 мСке чейинки ызы -чууга көңүл бурбоо үчүн коюлган (бир ирет)
  • Ызы -чуунун чегин Debug = true орнотуу жана Сериялык Плоттерди көрүү аркылуу туураласа болот

Эскертүү

[1]

Эгерде сиз дагы текстти көргүңүз келсе, Arduino Serial Monitorду 115200 bodга коюңуз.

[2]

  • Сүрөт 1… Так Blackman терезеси
  • Сүрөт 2… Так Блэкман терезеси жок Goertzel чыпкасы
  • Сүрөт 3,,, Goertzel чыпкасы так Blackman терезеси менен колдонулат

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

Декодер

Морз угуп жатканда аппаратты динамиктин жанына кой.

  • Электрондук микрофондун капсуласы динамиктен Морзе сигналын алат.
  • Электрондук микрофондун чыгышы 647 эсе (56дБ) күчөтүлүп, кайра иштетүү үчүн Arduinoго өткөрүлөт.
  • Goertzel санариптик өткөрмө чыпкасы ызы -чуудан морзе сигналын чыгарат.
  • Декоддоо бинардык дарактын жардамы менен жүргүзүлөт.
  • Декодердин чыгышы 320 x 240 пикселдүү TFT дисплейде текст катары көрсөтүлөт. Эгерде сиз дисплейди колдонууну каалабасаңыз, ал Arduino "Serial Monitorго" жөнөтүлөт.

Морзе Жөнөтүүчү

Морзе жөнөтүүчү дагы киргизилген. Бул сизге морс жөнөтүүнү практикалоого мүмкүндүк берет жана төмөнкүдөй иштейт:

  • Туруктуу үн обону Arduino pin 4 түзүлөт.
  • Морзе баскычын баскан сайын биз бул обонду декодердин катуу сүйлөткүчү аркылуу угабыз.
  • Обон Goertzel чыпкасына окшош жыштыкка коюлган, ал декодерди чыныгы морзаны угуп жатат деп алдайт … эмнени жөнөтсөңүз, ал дисплейде басылган текст катары пайда болот.

Жөнөтүүңүз жакшырат, анткени декодер жалпы каталарды алат:

  • символдордун ортосунда өтө көп боштук. (мисал: Q MA катары бекитилген)
  • тамгалар арасында өтө көп боштук (мисал: NO WW деп басылган)
  • туура эмес код

7 -кадам: Жыйынтык

Декодер

Бул көрсөтмө Морзе кодун басылган текстке айландыруучу Морзе декодерин кантип жасоону сүрөттөйт.

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

Жөнөтүүчү

Морзе жөнөтүүчү дагы киргизилген

  • Жөнөтүүчү сизге морс жөнөтүүнүн сапатын жакшыртууга жардам берет.
  • Декодер сиз жиберген нерсенин туура экенин тастыктайт

Бөлүктөрдүн баасы

Морзе декодер калканынын болжолдуу наркы, кошумча TFT дисплейин кошпогондо, 25 доллар.

Менин башка көрсөтмөлөрүмдү көрүү үчүн бул жерди басыңыз.

Аудио чакырык 2020
Аудио чакырык 2020
Аудио чакырык 2020
Аудио чакырык 2020

Аудио чакырыктын экинчи сыйлыгы 2020

Сунушталууда: