#1 Эксперимент «Азбука Морзе». Начало работы
Перед изучением данного курса, настоятельно рекомендуем Вам пройти курс “Arduino. Начальный уровень“. Там Вы познакомитесь с основами работы в программной визуальной среде “Ardublock” и научитесь работать с основными видами датчиков и сенсоров, которые используются в качестве периферии микроконтроллера Arduino. Вспомним:
Arduino – это микроконтроллер, облачённый в удобный интерфейс. По сути, Arduino – это мини-компьютер, имеющий свой собственный процессор, некоторое количество памяти и набор входов-выходов для управления внешними устройствами и получения данных с этих устройств. Это своеобразный электронный конструктор, позволяющий собирать свои собственные электронные устройства и управлять ими программным способом (программировать их). Для того, чтобы начать работу с этим электронным конструктором нам понадобится:
- Аппаратная часть (Arduino и набор электронных компонент);
- Программная часть (среда программирования Arduino).
АППАРАТНАЯ ЧАСТЬ
С помощью Arduino можно управлять самыми разнообразными электронными устройствами и компонентами. Уже достаточно давно существуют готовые обучающие наборы, которые включают в себя сам микроконтроллер Arduino и набор датчиков и компонент к нему. Мы будем работать с набором Arduino upgraded learning KIT, который можно заказать по ссылке:
Набор комплектуется платой Arduino Uno и достаточно большим количеством электронных датчиков и компонент:
В ходе наших экспериментов, мы будем работать с Arduino внешними датчиками на более высоком уровне. Попутно мы познакомимся с языком программирования Wiring, который является упрощённой и немного переработанной версией C++ . Собирать наши электронные устройства мы будем на уже знакомой Вам беспаечной макетной плате.
ПРОГРАММНАЯ ЧАСТЬ
Программировать поведение наших электронных устройств мы будем в среде Arduino IDE, созданной разработчиками Arduino. Давайте установим и настроим нашу программную среду (если Вы уже прошли курс “Arduino. Начальный уровень”, то описание можно пропустить):
- Для начала необходимо скачать Arduino IDE [скачать Arduino IDE];
- Запустите скачанный файл и установите программную среду:
- Далее, необходимо установить драйвер для “не оригинальных” плат Arduino. Драйвер можно скачать по ссылке [драйвер CH341SER]. Распакуйте и запустите скачанный файл и нажмите кнопку [INSTALL]:
- После этого, можно подключить Arduino к USB-порту компьютера с помощью кабеля, который идёт в комплекте:
- Система должна автоматически установить драйвера и настроить устройство. Если всё получилось, то в диспетчере устройств вы сможете увидеть подключенное устройство. Для того, чтобы открыть диспетчер устройств, в меню “Пуск” выберите [Параметры ⇒ Устройства ⇒ Диспетчер устройств]:
Готово! Программная и аппаратная части настроены и готовы к работе!
ЭКСПЕРИМЕНТ “АЗБУКА МОРЗЕ”
В этом эксперименте мы подключим к Arduino обычный светодиод и заставим его передавать сигнал бедствия “SOS” с помощью азбуки Морзе.
Перед выполнением эксперимента прочтите:
- Понятие электричества;
- Основные законы электричества;
- Управление электричеством;
- Принципиальные схемы;
- Быстрая сборка схем;
- Резистор;
- Светодиод.
СБОРКА УСТРОЙСТВА НА МАКЕТНОЙ ПЛАТЕ
Для сборки нашего первого устройства нам понадобятся следующие компоненты:
- Arduino Uno;
- USB-кабель для подключения к компьютеру;
- Беспаечная макетная плата;
- 1 светодиод любого цвета;
- 1 резистор номиналом 220 Ом;
- 2 соединительных провода.
Для выполнения дополнительного задания:
- ещё 3 светодиода разных цветов;
- ещё 3 резистора номиналом 220 Ом;
- ещё 7 соединительных проводов.
Соберите устройство по следующей схеме:
Схема устройства на макетной плате |
Принципиальная схема устройства |
Обратите внимание: длинная ножка светодиода должна быть подключена к 13 пину Arduino, так как именно с этого пина мы будем подавать на светодиод высокий сигнал +5 В (HIGH). Если вы перепутаете полярность светодиода и подключите его длинной ножкой к пину GND, он может выйти из строя!
Запустите Arduino IDE. Пришло время написать наш первый алгоритм, который будет управлять нашим светодиодом. Если мы подадим на 13-й пин высокий сигнал (HIGH), то он подаст на наш светодиод напряжение в 5 В. Такое напряжение является через чур большим для светодиода, поэтому последовательно с ним, мы включили резистор номиналом 220 Ом. В итоге, напряжение на светодиоде с 5 В, упадёт до 2-2,3 В, что и требуется для штатной работы светодиода.
ПРОГРАММИРОВАНИЕ
Программировать наши устройства мы будем на языке Wiring, который является упрощённой и дополненной версией языка C++. Любая программа для Arduino состоит из двух основных частей, это:
void setup() { //записанные здесь команды, выполняются однократно } void loop() { //записанные здесь команды, выполняются в бесконечном цикле }
Любая наша программа будет начинаться именно с этих записей. Несмотря на то, что программа не содержит каких-либо команд, она может быть скомпилирована и “залита” в Arduino. Сейчас мы будем наполнять нашу программу командами.
Для начала, давайте определим – какой пин мы будем использовать для подачи сигнала. В нашем случае это 13-й пин. Нужно сообщить об этом Arduino. Это мы сделаем с помощью команды [pinMode], которую запишем в раздел [setup]:
pinMode(13, OUTPUT);
где:
- 13 – номер используемого пина;
- OUTPUT – команда, определяющая этот пин как выходной, т.е. пин, с которого мы будем отправлять сигнал.
Обратите внимание: цифровые пины Arduino [0 … 13] могут работать как на выход, так и на вход, т.е. как посылать сигнал, так и получать его. По умолчанию эти пины определены как входные, т.е. если мы хотим использовать, например, 13-й пин в качестве приёмника сигнала в режиме [INPUT], то прописывать команду:
pinMode(13, INPUT);
совершенно необязательно!
Давайте попробуем создать простейший “маячок” и заставим подключённый к Arduino светодиод мигать с частотой 2 Герца, т.е. 2 раза в секунду. Для этого мы должны зажечь светодиод на некоторое время и далее погасить его. Если мы запишем эти команды в раздел [setup], то наш светодиод “моргнёт” лишь 1 раз, поэтому записывать команды, включающие и выключающие светодиод, мы будем в раздел [loop]. Вначале нам необходимо подать на светодиод высокий цифровой сигнал, для этого используем команду:
digitalWrite(13, HIGH);
где:
- 13 – номер пина, к которому подключен светодиод;
- HIGH – высокое значение цифрового сигнала.
Для отключения светодиода, нам следует подать на него низкий цифровой сигнал:
digitalWrite(13, LOW);
где:
- LOW – низкое значение цифрового сигнала.
Длительность нахождения светодиода в зажжённом или погашенном состояниях мы будем задавать командой [delay], которая является программной паузой и останавливает выполнение работы программы на заданный промежуток времени:
delay(time);
где:
- time – значение промежутка времени в миллисекундах (1000 мс = 1 с).
Запишем программу:
void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(300); digitalWrite(13, LOW); delay(200); }
Несложно посчитать, что на выполнение нашей программы уйдёт 500 мс, т.к. 300 мс + 200 мс = 500 мс. А это значит, что через пол секунды программа завершиться и запуститься по второму кругу (помните, что команды, записанные в разделе [loop] повторяются по кругу). А это значит, что за 1 секунду наш светодиод успеет зажечься и погаснуть дважды, т.е. мигнёт 2 раза.
Для того, чтобы загрузить эту программу в микроконтроллер Arduino, необходимо выполнить следующие действия:
- Подключите плату Arduino к компьютеру с помощью USB-кабеля;
- Нажмите [Инструменты] → [Порт] и выберите тот порт, к которому подключена плата (это можно определить по характерной надписи типа “Arduino (com6)”);
- Нажмите комбинацию клавиш Ctrl+U или клавишу загрузки (стрелка в кружочке);
- Дождитесь загрузки программы (светодиоды с обозначениями TX и RX на плате мигнут несколько раз);
- Программа загружена!
Возможные причины ошибок при загрузке (программа выдала надпись оранжевого цвета):
- В синтаксисе программы есть ошибка. Внимательно проверьте правильность написания команд и символов, в особенности “;”, “{” и “}”;
- Выбран неправильный порт или плата Arduino отключена от компьютера. Проверьте подключение платы к компьютеру (на плате должен гореть индикатор питания), попробуйте выбрать другой порт.
Составим алгоритм, который заставит наш светодиод подавать сигнал SOS, используя код символов азбуки Морзе.
А вы знакомы с азбукой Морзе? В 1838 году Сэмюэль Морзе предложил кодировку, которая могла позволить передавать информацию по телеграфной линии. Особенность линии была в том, что она работала по цифровому принципу: на одном конце линии, человек замыкал контакт и подавал на линии высокий сигнал (HIGH), на другом конце линии, был подключён динамик, который преобразовывал электрический сигнал, посланный по линии в звуковой сигнал. По сути, замыкающий контакты человек мог лишь изменять время замыкания контактов и паузы между сигналами. Если вместо динамика к телеграфу подключить обычную лампочку, то она бы начала мигать в такт посылаемому сигналу, и человек на принимающей стороне смог бы расшифровать его. Для обозначения символов в азбуке Морзе используются точки • и тире —. При этом, договорились, что длительность тире будет равна длительности 3-х точек. Пауза между элементами одного символа составляет длительность 1 точки, а между отдельными буквами – 3 точки, а между словами – 7 точек. Ниже, представлены кодировка английского алфавита, представленная с помощью азбуки Морзе:
A | • — | M | — — | Y | — • — — |
B | — • • • | N | — • | Z | — — • • |
C | — • — • | O | — — — | 1 | • — — — — |
D | — • • | P | • — — • | 2 | • • — — — |
E | • | Q | — — • — | 3 | • • • — — |
F | • • — • | R | • — • | 4 | • • • • — |
G | — — • | S | • • • | 5 | • • • • • |
H | • • • • | T | — | 6 | — • • • • |
I | • • | U | • • — | 7 | — — • • • |
J | • — — — | V | • • • — | 8 | — — — • • |
K | — • — | W | • — — | 9 | — — — — • |
L | • — • • | X | — • • — | 0 | — — — — — |
Таким образом, для того, чтобы закодировать сигнал бедствия SOS, необходимо подать следующую комбинацию знаков: • • • — — — • • •.
Наша задача: включать и выключать светодиод, выдерживая нужные интервалы включения и выключения. Поскольку, за единицу длительности, в азбуке Морзе принята точка (300 мс), то и длительность остальных символов будет зависеть от неё. Запишем нашу программу:
void setup() { pinMode(13, OUTPUT); } void loop() { // Точка digitalWrite(13, HIGH); delay(300); digitalWrite(13, LOW); delay(300); // Точка digitalWrite(13, HIGH); delay(300); digitalWrite(13, LOW); delay(300); // Точка digitalWrite(13, HIGH); delay(300); digitalWrite(13, LOW); delay(900); // пробел между символами // Тире digitalWrite(13, HIGH); delay(900); digitalWrite(13, LOW); delay(300); // Тире digitalWrite(13, HIGH); delay(900); digitalWrite(13, LOW); delay(300); // Тире digitalWrite(13, HIGH); delay(900); digitalWrite(13, LOW); delay(900); // пробел между символами // Точка digitalWrite(13, HIGH); delay(300); digitalWrite(13, LOW); delay(300); // Точка digitalWrite(13, HIGH); delay(300); digitalWrite(13, LOW); delay(300); // Точка digitalWrite(13, HIGH); delay(300); digitalWrite(13, LOW); delay(2100); // пробел между словами }
Загрузите программу в плату Arduino и проверьте работоспособность нашего алгоритма.
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
Задание 1:
Напишите программу, которая заставит светодиод “мигать” слова “HELLO WORLD” на морзянке.
Задание 2*:
Добавьте в схему ещё 3 светодиода, как показано на схеме и напишите программу, которая будет “мигать” фразу “I LOVE MY ARDUINO”.
При этом, первое слово “мигается” на первом светодиоде, второе – на втором, третье на третьем и четвёртое – на четвёртом. Загрузите программу в плату Arduino и проверьте работоспособность Вашего алгоритма.