Декодер і передавач азбуки Морзе на Arduino
Цей пристрій, який можна використовувати як бездротовий телеграф. Працює в двох режимах з можливістю вибору (приймач/передавач). На передавач вводиться повідомлення азбукою Морзе, приймач виводить його ж декодованим у звичний нам вигляд. Підтримується тільки англійська мова.
Управління здійснюється за допомогою двох кнопок: вводу (забезпечує набір символів азбуки Морзе) і кнопки зміни режиму управління (приймач/передавач). В режимі приймача кнопка вводу не працює.
Пристрій розпізнає 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 Кб)