Декодер кода морзе на ардуино

Урок 40. Дешифратор азбуки Морзе с выводом на принтер, дисплей, последовательный порт

В этом уроке мы создадим дешифратор азбуки Морзе. Датчик звука преобразует звуковой сигнал в электрический и отправит его в Arduino. Arduino дешифрует принятые данные и отправит их, либо в монитор последовательного порта, либо на символьный дисплей LCD1602 I2C, либо в термопринтер UART. В Arduino нужно загрузить один из трёх скетчей, в зависимости от собранного устройства.

Нам понадобится:

В зависимости от собираемой схемы понадобится одно из устройств вывода информации и библиотека:

  • Дисплей LCD1602 I2C зелёный или синий x 1шт.
  • Библиотека LiquidCrystal_I2C для работы с дисплеем LCD1602 I2C.
  • Термопринтер x 1шт.
  • Библиотека Adafruit_Thermal для работы с термопринтером.

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE . Более подробно о работе с LCD дисплеем и термопринтером можно ознакомиться на страницах: WiKi — работа с символьными ЖК дисплеями и Wiki — работа с термопринтерами.

Видео:

Схемы подключения:

Схема подключения зависит от используемого устройства вывода данных.

Вывод данных в LCD дисплей:

Трема датчик звука подключается в аналоговому выводу A3 (номер хранится в константе pinSensor — его можно изменить). LCD дисплей подключается к аппаратной шине I2C.

Вывод данных в термопринтер:

Трема датчик звука подключается в аналоговому выводу A3 (номер хранится в константе pinSensor — его можно изменить ). Термопринтер подключается по программной шине UART с назначенными в скетче выводами TX и RX. Номера выводов указываются при объявлении объекта mySerial(RX, TX) библиотеки SoftwareSerial, которая входит в стандартный набор Arduino IDE. В скетче RX объявлен как 5 вывод Arduino (он подключается к зелёному TX выводу принтера), а TX объявлен как 6 вывод Arduino (он подключается к синему RX выводу принтера). Жёлтый вывод (DTR) принтера не используется. Термопринтер запитывается от отдельного источника питания от 5 до 9 В постоянного тока, при этом красный провод подключается к + питания, а черный к — и к выводу GND Arduino.

Вывод данных в монитор последовательного порта:

Трема датчик звука подключается в аналоговому выводу A3 (номер хранится в константе pinSensor — его можно изменить). Дополнительные устройства не подключаются.

Алгоритм работы:

Часть скетча отвечающая за дешифрование сигнала одинакова для каждого устройства:

  • В начале создаются три массива:
    • chrMorze — содержит символы;
    • lenMorze — содержит количество точек или тире для символа;
    • varMorze — содержит комбинацию точек и тире для символа (точка = 0, тире = 1);

    Пример: возьмем второй элемент каждого массива — из массива chrMorze понятно что это символ «В», из массива lenMorze понятно что он состоит из 4 точек или тире, а из массива varMorze понятно, что комбинация равна значению 0x8 = 0b00001000. Берем последние 4 бита — 1000, точка = 0, тире = 1, значит в азбуке Морзе это « – • • • ».
    Пример: возьмем седьмой элемент каждого массива — из массива chrMorze понятно что это символ «G», из массива lenMorze понятно что он состоит из 3 точек или тире, а из массива varMorze понятно, что комбинация равна значению 0x6 = 0b00000110. Берем последние 3 бита — 110, точка = 0, тире = 1, значит в азбуке Морзе это « – – • ».

  • Так же создаются константы:
    • pinSensor — хранит номер вывода к которому подключён датчик звука;
    • varVolume — хранит уровень громкости на который требуется реагировать. Чем ниже уровень, тем чувствительнее датчик звука;
    • tmrSignal — хранит время в миллисекундах для определения точек и тире (если сигнал был длиннее этого времени — значит это тире, а если короче — значит это точка);
    • tmrPause — хранит время в миллисекундах для определения окончания приёма символа (если пауза между сигналами была длиннее этого времени — значит передача символа закончена, а если короче — значит символ еще принимается).
  • Декодирование осуществляется в коде loop и состоит из 3 частей: фиксация звука, фиксация паузы, вывод символа.
  • Если в первой части зафиксирован звук, то устанавливаем флаг наличия принятого сигнала flgSignal, увеличиваем счетчик точек/тире lenLetter , сохраняем время его фиксациии и входим в цикл while пока звук не исчезнет. После исчезновения звука определяем его длительность вычитая текущее время из ранее сохранённого.
  • Если во второй части зафиксирована пауза, то сохраняем время её фиксации и входим в цикл while пока пауза не исчезнет или не пройдёт время tmrPause означающее об окончании приёма символа. После выхода из цикла проверяется причина выхода из него (закончена пауза или истекло время). Если закончена пауза, то опять начинает выполняться первая часть декодирования, иначе устанавливается флаг flgLetter разрешающий переход в третью часть декодирования.
  • Третья часть часть декодирования заключается в определении принятого символа (по трём массивам: chrMorze, lenMorze, varMorze ) и выводе этого символа в устройство вывода.

Код программ:

Код программы зависит от используемого устройства вывода данных.

Источник

Генератор кода Морзе на Arduino Uno

Азбука Морзе (код Морзе) – это система связи для кодирования любого символа в двух различных длительностях сигналов, называемых точками и тире. Азбука Морзе разработана Сэмюэлем Ф. Б. И в дальнейшем стала использоваться в телеграфии для передачи секретной информации. Больше всего она использовалась во время Второй мировой войны. Код Морзе можно формировать с помощью постукивания, мигающего света или письма. Код Морзе доступен в двух вариантах: оригинальный и международный код. В международной версии азбуки Морзе оригинальная версия модифицируется путем удаления пробелов и создания тире определенной длины.

Код Морзе может быть использован для кодирования алфавитов и цифр. Он, в основном, используется в радиосвязи и океанской связи, а также является частью подготовки солдат. Его очевидным достоинством по сравнению со всеми другими современными методами передачи информации является то, что прием информации при его использовании можно осуществлять при очень слабом уровне сигнала, ниже уровня шумов – в этих условиях не может работать ни одна современная система связи (широкополосные сигналы не в счет, приводить в сравнение их здесь некорректно).

Язык всегда был барьером для азбуки Морзе, так как трудно выполнить код для диакритических символов на другом языке. Есть несколько известных слов, которые считаются важной особенностью азбуки Морзе, например «SOS». SOS (расшифровывается как Save Our Souls) – означает спасение наших душ. Он был создан как универсальный сигнал бедствия.

На следующем рисунке показана азбука Морзе для английского алфавита от A до Z.

В этой статье мы рассмотрим создание генератора кода Морзе на основе платы Arduino Uno, который будет принимать символы из окна монитора последовательной связи и конвертировать их в код Морзе с помощью зуммера. Статья переведена с иностранного сайта, поэтому представленный генератор кода Морзе работает только с английским алфавитом (впрочем, как и все другие аналогичные статьи на эту тему, которые мне удалось найти в рунете). Но, поняв принцип этого проекта, вы легко можете переписать его программу для работы с русским алфавитом – если вы сделаете это, будем вам признательны если поделитесь кодом этой программы с другими посетителями нашего сайта (могу включить код вашей программы в текст данной статьи).

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Зуммер (купить на AliExpress).
  3. Макетная плата.
  4. Соединительные провода.

Схема проекта

Схема генератора кода Морзе на основе платы Arduino Uno представлена на следующем рисунке.

Как вы можете видеть, схема очень проста. Просто соедините положительный контакт зуммера с контактом 8 платы Arduino Uno, а его отрицательный контакт – к земле платы Arduino Uno. Загрузите код программы в плату Arduino и можете начинать печатать символы в окне монитора последовательной связи – зуммер начнет издавать сигналы кода Морзе, соответствующие данным символам. Также схему можно усовершенствовать, включив в нее ЖК дисплей 16х2.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Сначала в программе объявим переменную, в которую будем записывать символы, которые мы в дальнейшем будем конвертировать в код Морзе.

Источник

Arduino based Morse Code Generator

Morse code is a system of communication to encode any character in two different durations of signals called Dots and Dashes. Morse code is developed by Samuel F.B. and further used in telegraphy for transferring secret information. It was most used at the time of World War II. A Morse code can be performed by tapping, flashing light or writing. The Morse code is available in two versions, the original and the international morse code. In the international morse code, the original version is modified by removing spaces and designing the dashes in a specific length. The Morse code is available for encoding alphabets and numbers. It is mainly used in the radio and ocean communication and also a part of training for soldiers.

The language has always been the barrier for the Morse code, as it’s hard to perform the code for diacritic characters in other language. There are some famous words considered as important feature of Morse code like ‘SOS’. SOS full form is Save Our Souls created as a universal distress signal represents danger.

The below image shows the Morse code for the alphabets from A to Z.

Today in this tutorial we will build a Morse Code Translator using Arduino which will take any character as an input from serial monitor and convert it into Morse code equivalent beeps by buzzer.

Components Required

  • Arduino Uno
  • Buzzer
  • Breadboard
  • Jumper wires

Circuit Diagram

Connect the buzzer’s positive pin to the 8 th pin of the Arudino UNO and the negative pin to the ground of Arduino. Upload the code using Arduino IDE and type the characters on the serial monitor to create the sound. A LCD can also be added with Arduino to display the dash and dots.

Programming Explanation

The complete code for Arduino Morse Code Generator is given at the end, here we are explaining the program to understand the working of the project.

The below code is used to receive the character string and then convert it into morse code.

Then define the pin for the buzzer connected to the Arduino and the pitch for the sound generated by that buzzer. Then we are defining the length of dot and dash.

In the void loop() function, if serial data is available, it will save into a variable indata. Then it reads the character one by one using command inData[index1]. The command variable.toUppercase() is used to change the lower case characters into uppercase. Then it creates sound according to every character.

Below functions MorseDot and MorseDash are used to create the sound for dot and dash respectively.

The GetChar function have the code for all the alphabets. So, whenever we type any alphabet, the respective morse code is taken from this function to create the particular sound.

Now upload the code into Arduino using Arduino IDE and type any character into the serial monitor and hit the enter button to send the characters to the Arduino.

Here we have typed ‘SOS’ which is a universal distress signal, to create the sound for the same.

The demonstration for the same is given in the video below.

int audio8 = 8; // output audio on pin 8
int note = 1200; // music note/pitch

int dotLen = 100; // length of the morse code ‘dot’
int dashLen = dotLen * 3; // length of the morse code ‘dash’

void setup() <
Serial.begin(9600);
>

void loop()
<
char inChar = 0;
char inData[100] = «»; // data length of 6 characters
String variable = «»;
String variable1 = «»;
int index1 = 0;

if ( Serial.available() > 0 ) < // Read from Rx from atmega16
while (Serial.available() > 0 && index1

Comments

Submitted by George on Mon, 03/02/2020 — 17:18

Morse code

Hello, This project generate Morse code for anything you type in the COM window? Not just for SOS?

Omron’s new G5PZ-X PCB relay comes in a compact package with 20 A at 200 VDC rated load

Tiny Size-vs-High Specs, this range of RECOM’s DC/DC Converters utilizes minimal PCB footprint

Microchip’s AVR-IoT Cellular Mini features Sequans Monarch 2 GM02S cellular module

KEMET’s C4AK series film capacitors feature long life and high voltage

Murata’s ultra-thin, high-efficiency, 72 W charge pump modules support 48 V Bus architecture

Belden’s rugged multi-conductor cables ensure system uptime in rugged environments

Littelfuse’s high-current, high-voltage cartridge fuses – 526 series and 527 series

Источник

Adblock
detector