Это устройство, которое можно использовать как беспроводной телеграф. Работает в 2-х режимах с возможностью выбора(приёмник/передатчик). На передатчик вводится сообщение азбукой Морзе, приёмник выводит его же декодированным в привычный нам вид. Поддерживается лишь английский язык.
Управление производится с помощью 2-х кнопок:ввода(обеспечивает набор символов азбуки Морзе) и кнопки смены режима управления(приёмник/передатчик). В режиме приёмника кнопка ввода не работает.
Устройство распознаёт 41 команду: 26 букв латинского алфавита, цифры от 0 до 9, точку, запятую, восклицательный и вопросительный знаки, пробел. При помощи тактовой кнопки на 4 входе происходит смена режима работы(приёмник/передатчик). Ввод данных при помощи одной тактовой кнопки на 3 входе, подключённой с использованием подтягивающего резистора, встроенного в плату Arduino. Кнопка заземлена через резистор номиналом 1 кОм, с другой стороны она подключается к цифровому пину Arduino и +5v через подтягивающий встроенный в плату резистор(включается программно, в аргументах функции pinMode задаётся INPUT_PULLUP). Это нужно для защиты от так называемого «дребезга» контактов. Работа кнопок инвертирована. При не нажатой кнопке пины под номерами 3 и 4 соединены с плюсом питания 5v, то есть на этих пинах задана логическая единица, при нажатии кнопки на пине будет логический ноль. Схема подключения кнопки для смены режима работы такая же, но номер пина — 4. Также защита от случайных нажатий реализована в коде программы – нажатия длительностью менее 20 мс не учитываются. Длительность точки – от 20 до 150 мс, тире – от 150 мс.
Во время нажатия кнопки ввода подключенный динамик издаёт звуковой сигнал. Конец символа обозначается паузой, во время которой произойдёт 30000 проверок состояния кнопки, пробел между словами – паузой длительностью в 60000 проверок состояния кнопки. Если введён неправильный код, то содержащая его переменная обнулится и начнётся набор новой последовательности точек и тире. В памяти передатчика содержится массив с кодами Морзе, а в памяти приёмника массив с соответствующими им символами. Передатчик отправляет лишь номер символа в массиве, совпавшего с набранным кодом(вместо пробела он сразу отправляет код 40, не проверяя массив символов). Приёмник выводит на дисплей элемент массива с номером, полученным от передатчика. При достижении конца строки следующая строка дисплея полностью очищается. Через минуту бездействия либо при работе в режиме передатчика дисплей перейдёт в спящий режим. При получении данных либо при нажатии кнопки смены режима работы он продолжит работу.
Ниже представлена таблица некоторых поддерживаемых кодов Морзе.
Прямо к контактам питания NRF24L01 стоит припаять электролитический конденсатор(у меня стоит на 470 мкФ, но хватит и от 10 мкФ). Этот модуль очень капризен по отношению к питанию. Для программирования работы этих модулей применена библиотека RF24.
Схема подключения с использованием Arduino Nano:
Схема подключения с использованием Arduino Uno:
Подключение дисплея:
- GND — GND;
- VCC — 5v;
- SDA — A4 или SDA;
- SCL — A5 или SCL.
Подключение NRF24L01:
- GND — GND;
- VCC — 3v3(это важно, при подаче 5v модуль может выйти из строя);
- SCK — 13;
- MOSI — 11;
- MISO — 12;
- CE — 9;
- CSN — 10;
- IRQ не используется.
- 6, 7, 8 пины программно включены как дополнительные GND-входы. На 2 пин подключается динамик. На 3 и 4 кнопки ввода и смены режима работы соответственно.
Фото готовых устройств:
Прикрепленные файлы:
- Morse_decoder.ino (5 Кб)