Технология. 9 класс. Авторский коллектив: Е. С. Глозман, Е. Н. Кулакова, Ю. Л. Хотунцев, О. А. Кожина, И. В. Воронин, В. В. Воронина, А. Е. Глозман
§ 54. Платформа Arduino UNO. Управление светодиодом
После установки программного обеспечения для работы с контроллером нужно научиться с ним работать. Какие электронные компоненты вы помните? Как можно управлять их работой?
Среда управления платой Arduino IDE содержит много готовых примеров, в которых можно подсмотреть решение какой-либо задачи. Познакомимся для примера с программой управления встроенным светодиодом.
Рассмотрев внимательно схему платы (см. рис. 9.17), вы увидите четыре светодиода: ON, L, TX, RX. Диод ON сигнализирует о подключении питания к плате Arduino. Диод L при подключении к USB-разъёму платы Arduino будет сразу мигать, потому что в платы Arduino изначально загружена программа мигания светодиода.
Скетч, в котором запрограммирован мигающий светодиод, называется Blink. Загрузим скетч Blink, выполнив команду: «Файл» → «Образцы» → «01.Basic» → «Blink» (рис. 9.24).


После загрузки в окне IDE появится текст программы для мигания светодиода (рис. 9.25).


Обратите внимание, что текст программы состоит из инструкций и комментариев к этим инструкциям. Комментарии не влияют на выполнение программы процессором, они даны для более подробного описания работы программы.
• Многострочные комментарии выделяются символами /*.....*/.
Текст в таких скобках не является какой-либо командой и не влияет на работу программы. В этих скобках можно писать любые комментарии.
• //....Если написать любой текст после двух косых, он также не будет распознаваться программой. Однако эти символы действуют только на одну строку. Комментарии к встроенным скетчам написаны на английском языке, но при самостоятельном написании программ комментарии можно писать на русском.
• Процедура setup(). Эта процедура выполняется один раз в начале работы программы или при включении питания Arduino и должна присутствовать в каждом скетче. Последовательно выполняется каждая команда, заключенная между фигурными скобками этой процедуры. Каждая команда должна завершаться символом точка с запятой «;». Например,
void setup() {
// initialize the digital pin as an output (инициализирован вывод 13 как выход).
pinMode(13, OUTPUT);
}
В рассматриваемой программе процедура setup() содержит только одну команду pinMode (13, OUTPUT), которая сообщает Arduino, что мы собираемся использовать вывод (пин) номер 13 как ВЫХОД. Это означает, что на выводе 13 платы будут появляться электрические сигналы, которые создаёт сам контроллер.
Все эти действия обязательно вписываются между открывающей и закрывающей фигурными скобками {}.
Светодиод на плате Arduino на самом деле подсоединён к выводу 13. Принципиальная схема показана на рисунке 9.26.

• Процедура loop().
После выполнения команд процедуры setup процессор переходит к выполнению команд процедуры loop(). Особенность этой процедуры в том, что её команды выполняются в бесконечном цикле, т. е. после выполнения последней команды процессор снова приступает к выполнению первой. И так будет продолжаться, пока плата подключена к источнику питания. Например,
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) (возвращает на светодиод ВЫСОКИЙ уровень напряжения)
delay(1000); // wait for a second (ждём 1 с)
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW (возвращает на светодиод НИЗКИЙ уровень напряжения)
delay(1000); // wait for a second (ждём 1 с)
}
Внутри цикла функции размещена команда, которая переключает состояние пина в одно из двух возможных: HIGH или LOW. HIGH соответствует логической единице (она же, в свою очередь, соответствует напряжению питания микроконтроллера ÷5 В). Состояние вывода LOW соответствует логическому нулю, это близко к О В.
Если тринадцатый пин на плате Arduino установить в состояние HIGH (5 В), то светодиод начнёт светиться, так как через него потечёт электрический ток. Если пин 13 установить в состояние LOW (О В), то светодиод не загорится.
Следовательно, оператор digitalWrite( 13, HIGH) формирует +5 В на выходе 13 и зажигает, таким образом, светодиод LL
Команда delay( 1000); заставляет микроконтроллер остановиться и ничего не делать целых 1000 миллисекунд (1000 мс = 1 с), т. е. на выходе 13 в течение 1000 мс будет высокий уровень напряжения, и светодиод будет гореть.
Команда digitalWrite( 13, LOW); устанавливает пин 13 в состояние LOW. Напряжение на выходе становится близким к нулю, и светодиод гаснет. Затем снова выполняется команда паузы на 1000 мс.
На этом выполнение цикла заканчивается, но функция loop снова автоматически вызывается и запускает команду digitalWrite (13, HIGH). И так далее.
Посмотрим, как можно изменить период мигания светодиода.
Практическая работа № 42
«Управление встроенным светодиодом»
Цель работы: научиться подключать плату Arduino, запускать программы из библиотеки, осуществлять проверку работы программы, производить модификацию программы.
Оборудование и материалы: плата Arduino, компьютер, USB-кабель.
Порядок выполнения работы
1. Подключите плату Arduino к компьютеру USB-кабелем.
2. Подготовьте плату к работе, выбрав в Arduino IDE нужный COM-порт.
3. Сохраните копию скетча из библиотеки. Для этого в меню «Файл» в IDE выберите опцию «Сохранить как...», а затем сохраните скетч, присвоив ему имя, например Blinkl (рис. 9.27).


Это означает, что позже можно будет просто открыть его командой «Файл» → «Открыть».
4. Для загрузки выбранного скетча в Arduino нажмите на иконку «Вгрузить»
(вторая слева на Панели инструментов).
В нижней части IDE выводит ряд сообщений. Сначала появится сообщение о компиляции скетча (рис. 9.28), т. е. о преобразовании программы в формат, понятный для процессора.


Далее статус процесса изменится на «Загружаем». В этот момент светодиоды TX и RX на Arduino начинают мерцать, указывая, что скетч загружается в плату.
Наконец, в строке состояния появится текст «Вгрузили» (рис. 9.29).


Внимание! Если в окне появится надпись «Последовательный порт COM4 не найден», проверьте подключение платы к компьютеру, правильность настройки в программе COM-порта и ещё раз загрузите скетч.
5. Проведите модификацию кода, изменив параметры команды delay (рис. 9.30).


Вместо строчки
delay(1000);
напишите
delay(100);
Подумайте, что произойдёт при таком изменении программы.
6. Загрузите новый скетч в Arduino Uno, проверьте, как изменился период мерцания светодиода.
Мы попробовали управлять встроенными элементами контроллера. Но гораздо чаще требуется, чтобы контроллер управлял не встроенными элементами, а различными электронными компонентами, подключёнными к внешним контактам — ножкам микрочипа.
Практическая работа № 43
«Управление внешним светодиодом»
Цель работы: научиться управлять отдельным светодиодом на макетной плате.
Оборудование и материалы: резистор номиналом 360 Ом, светодиод, перемычка, макетная плата, плата Arduino, компьютер.
Внимание! Все подключения можно производить только при отключённой от компьютера плате Arduino.
Порядок выполнения работы
1. Соберите электрическую схему по рисунку 9.31. Сравните её со схемой на рисунке 9.26. Найдите отличия.


2. Подключите минус (GND) питания Arduino к минусовой шине макетной платы. Для этого установите один конец проволочной перемычки в гнездо GND на плате Arduino, а второй конец перемычки — в отверстие вдоль синей линии макетной платы.
3. Установите светодиод на макетную плату. Для этого ножки светодиода вставьте в отверстия свободного поля так, чтобы длинная ножка (анод) находилась в отверстии верхнего свободного поля, а короткая (катод) — в отверстии нижнего поля.
4. Установите на макетную плату резистор. К короткой ножке светодиода подключите одну ножку резистора, вторую ножку резистора установите в отверстие вдоль синей линии.
5. Проволочной перемычкой соедините анод светодиода и контакт 13 платы Arduino (рис. 9.32).


6. Проверьте правильность сборки схемы и подключите плату к компьютеру.
7. Запустите среду разработки Arduino IDE.
8. Скопируйте текст приведённой ниже программы с комментариями на русском языке в среду разработки и загрузите в Arduino либо откройте скетч Blinkl с комментариями на английском.
/*Программа для мигающего светодиода
*/
// Светодиод подключаем к контакту 13 платы Arduino
// устанавливаем начальную команду, которая будет выполняться при включении питания
void setup() {
// определяем выбранный нами контакт платы Arduino как выход.
pinMode(13, OUTPUT);
}
// Теперь определяем, что и как будет выполнять наша программа, пока
// подключено питание к плате Arduino:
void loop() {
digitalWrite(13, HIGH); // устанавливаем на нашем контакте 13 ВЫСОКИЙ уровень (5 В)
delay(1000); // ждём 1 с
digitalWrite(13, LOW); // устанавливаем на нашем контакте 13 НИЗКИЙ уровень (О В)
delay(1000); // ждём 1 с
}
9. Испытайте работу программы. Опишите результат.
10. Измените в программе время задержки аналогично тому, как вы это делали со встроенным светодиодом. Опишите результат.
Светодиод вы подключали к пину 13. В программе это прописано следующим образом:
pinMode(13, OUTPUT);
digitalWrite(13, HIGH); digitalWrite(13, LOW).
Чтобы поменять пин подключения, необходимо внести изменения во все части программы, где встречается номер пина, и переключить светодиод к соответствующему выходу. Светодиод можно подключать к любому выводу контроллера Arduino, но всякий раз необходимо будет производить серию однотипных изменений в программе.
Попробуем оптимизировать процесс. Для этого нам потребуется ещё одно понятие, связанное с программированием, — переменная.
Из курса математики вам известно, что переменные — это такие величины, значение которых может изменяться. В программировании (а значит, и в робототехнике) переменную определяют как место в памяти, где хранится некоторое значение. Номер пина — целое число, значит, нужна такая переменная, которая может хранить целые числа. И вместо того чтобы всякий раз просматривать программу в поисках того, что требуется изменить, мы просто изменим в одном месте значение переменной.
Для этого в самом начале программы эту переменную необходимо объявить, т. е. придумать ей имя, и указать, что «закладывать» в эту переменную мы будем целые числа.
Объявляется переменная командой int, например:
int ledpin = 13;
Слово int означает, что в качестве переменной мы будем использовать целое число.
ledpin — это имя нашей переменной. Его-то мы и придумываем сами. (Если хотите, его можно изменить, только не забудьте изменить это имя во всех местах программы, где оно встречается. Учтите, что Arduino понимает только латинские буквы.)
13 — это значение переменной, которое мы, когда захотим, можем менять.
Теперь скетч примет вид:
Int ledpin = 13;
void setup() {
pinMode(ledpin, OUTPUT);
}
void loop() {
digitalWrite(ledpin, HIGH); //Вольт)
delay(1000);
digitalWrite(ledpin, LOW);
delay(1000);
}
To есть при изменении номера контакта больше не потребуется просматривать всю программу, выискивая, где записан номер пина. Достаточно изменить его всего один раз в начале программы в переменной ledpin.
Основные понятия и термины:
скетч, программа, пин, время задержки, переменная.
Вопросы и задания:
1. Что произойдёт, если значение параметра в команде delay уменьшить в 2 раза?
2. Что такое переменная?
3. Чем различаются переменные в математике и робототехнике?
4. Зачем подключается светодиод последовательно с резистором?
Задание 1
Анализ команды delay
Измените параметры команд delay, наблюдая, как изменяется работа светодиода L1. Результаты оформите в виде таблицы 9.2. В двух последних строках впишите произвольное значение команды delay, отличающееся от предложенных в других строках.
Таблица 9.2
Анализ команды delay
| Код программы | Результат наблюдений |
| digitalWrite(13, HIGH);
delay(1000); digitalWrite(13, LOW); delay(1000); |
|
| digitalWrite(13, HIGH);
delay(500); digitalWrite(13, LOW); delay(500); |
|
| digitalWrite(13, HIGH);
delay(100); digitalWrite(13, LOW); delay(100); |
|
| digitalWrite(13, HIGH);
delay(......); digitalWrite(13, LOW); delay(......); |
|
| digitalWrite(13, HIGH);
delay(......); digitalWrite(13, LOW); delay(......); |
Задание 2
Изменение подключения светодиода к различным выводам платы Arduino
Измените подключение светодиода к выводу 4 платы Arduino. Измените программу и проверьте её работоспособность. Затем проделайте эти же манипуляции для вывода 8.
Внесите изменения в принципиальную схему эксперимента, учитывая выполненные модификации программы.
Дочертите недостающие части схемы (рис. 9.33).


Задание 3
Измените программу с использованием переменной и проведите предыдущие эксперименты на разных выводах Arduino.