Мазмуну:
- 1 -кадам: Бөлүктөрдүн тизмеси
- 2 -кадам: Райондук диаграмма
- 3 -кадам: Теория
- 4 -кадам: Дизайн эскертүүлөрү
- 5 -кадам: Программалык камсыздоо
- 6 -кадам: операция
- 7 -кадам: Жыйынтык
Video: Binary Tree Морзе декодери: 7 кадам (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:36
Бул көрсөтмө 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 -кадам: Дизайн эскертүүлөрү
Морзе тоскоолдук кылган сигналдар болгон учурда кодун чечүү кыйын. Керексиз сигналдарды четке кагуу керек … бул кандайдыр бир чыпканы талап кылат.
Көптөгөн мүмкүнчүлүктөр бар:
- Фазалуу кулпулар
- Индуктордук-конденсатордук чыпкалар
- Резистордук-конденсатордук активдүү чыпкалар
- Санарип сигналды иштетүү, мисалы, 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
Сунушталууда:
Китепкана жок RC5 Алыстан башкаруу протоколунун декодери: 4 кадам
Китепкана жок RC5 Remote Control Protocol Decoder: rc5 кодун чечүүдөн мурун адегенде rc5 буйругу деген эмне жана анын структурасы кандай экенин талкуулайбыз. негизинен rc5 буйругу телекөрсөтүүлөрдө, CD плеерлеринде, d2h, үй кинотеатры системаларында ж.б.у.с колдонулган алыстан башкаруу пультунда колдонулат, анда 13 же 14 бит бар
IR REMOTE ДЕКОДЕРИ ARDUINO КОЛДОНУУСУ: 4 кадам (Сүрөттөр менен)
IR REMOTE DECODER ARDUINO КОЛДОНУУЧУЛУГУ: Бул Arduino жана IR кабылдагычты колдонуп, абдан жөнөкөй IR Remote декодерин жасоо үчүн дагы бир колдонуучуга ыңгайлуу окуу куралы. Бул окуу куралы программалык камсыздоону орнотуудан IR кабылдагычты колдонууга жана сигналдарды декоддоого чейин баарын камтыйт. Булар
Basys 3 Морзе декодери: 11 кадам
Basys 3 Morze Decoder: Бул колледж классы үчүн долбоор. Бул долбоор VHDLде Vivado деп аталган программада жазылган. Basys 3 тактасын колдонуу менен Морзе декодерди ишке ашыруу үчүн зарыл болгон бардык модулдарды түзүү тапшырмалары. Такта Морзе кодун алуу үчүн колдонулат
Морзе Code Touch Keyer/Autocoder: 12 кадам (Сүрөттөр менен)
Морзе Code Touch Keyer/Autocoder: Мен бул долбоорду бир аз мурун кургам, бирок кимдир бирөө бул идеяны колдонушу мүмкүн деп ойлогом. Мен хам радиосунун жигитимин жана пенсияга чыгып, убактым болгондо жашоого бир аз кечигип калдым. Менде азыр жалпы лицензиям бар жана телефонду колдоном (vo
Arduino магниттик тилкесинин декодери: 4 кадам (сүрөттөр менен)
Arduino магниттик тилкенин декодери: Бул көрсөтмө эркин жеткиликтүү кодду, ардуинону жана стандарттык магниттик тилке окурманды кантип колдонуу керектигин көрсөтүп турат, мисалы, кредиттик карталар, студенттик билеттер ж. муну кийин жаз