Цель: Обеспечить усвоение учащимися понятий аппаратная вычислительная платформа, ознакомить с платформой Arduino и со средой разработки Arduino IDE. На основе свечения светодиода, изучить основу программирования Arduino.
Краткие сведения об Arduino.
Что такое Arduino?
Arduino (Ардуино) — аппаратная вычислительная платформа, основными компонентами которой являются плата ввода-вывода и среда разработки. Arduino может использоваться как для создания автономных интерактивных объектов, так и подключаться к программному обеспечению, выполняемому на компьютере. Arduino относится к одноплатным компьютерам.
Семейство Ардуино – несколько моделей так называемых отладочных плат. Отладочная плата представляет собой как ни странно печатную плату, в сердце которой стоит микроконтроллер – та самая штука, которую мы будем программировать. Микроконтроллер это микросхема, содержащая в себе микропроцессор, интерфейсы ввода-вывода, память (оперативную и постоянную), таймеры и другие штуки. Да, микропроцессор – это другое, микропроцессор по сути может только выполнять вычисления (как процессор в компьютере), а микроконтроллер – это практически полноценный компьютер, размещенный в одном кристалле микросхемы. В большинстве плат Arduino используются микроконтроллеры серии ATmega от производителя AVR.
Запомнили сразу важную мысль – Ардуино – не микроконтроллер, не процессор, Ардуино – платформа. Плата Ардуино это отладочная плата с микроконтроллером.
Что касается программной части, предоставленной Arduino, то это Arduino IDE (Integrated Development Environment – интегрированная среда разработки), включающая в себя редактор кода, компилятор и всё остальное необходимое для загрузки прошивки в плату.
Сначала рассмотрим общий вид программы, т.е. как она выглядит после запуска. В самом центре – блокнот, то самое место, где пишется код. По умолчанию уже написаны два стандартных блока, setup и loop. К ним вернёмся в разделе уроков программирования. Всё остальное можно увидеть на рисунке ниже.
Проверить – компиляция (сборка, проверка на ошибки…) кода без его загрузки в плату. То есть код можно написать и проверить на ошибки даже не подключая плату к компьютеру
Загрузить – компиляция и загрузка прошивки в плату
Создать/открыть/сохранить – тут всё понятно
Монитор порта – кнопка открывает монитор последовательного пора для общения с платой
Меню вкладок – работа с вкладками, о них поговорим ниже
Текущее состояние – тут выводится краткая информация о последнем действии: загрузка завершена, ошибка загрузки, автоформатирование завершено и т.д.
Лог работы – тут выводится лог компиляции и вообще все системные сообщения, отчёты об ошибках и размере скомпилированного кода
Конфигурация оборудования – выводится название выбранной платы, версии микроконтроллера и номер выбранного COM порта
Работа со светодиодами.
Светодиод — это полупроводниковый прибор, трансформирующий электроток в видимое свечение.
На основе свечения светодиода мы будем работать и рассматривать основу программирования Arduino. Перейдем непосредственно к практике Для начала работы нам понадобятся такие компоненты
- плата Arduino
- Breadboard (макетная плата для удобного подключения приборов к Arduino)
- Провода
- светодиод
- резистор
Схема подключения светодиода на Arduino.
Для работы этой модели подойдет следующая программа:
void setup()
{
pinMode(8, OUTPUT);
}
void loop()
{
digitalWrite(8, HIGH);
delay(1000);
digitalWrite(8, LOW);
delay(1000);
}
Синтаксис и структура кода. Программирование.
Ардуино программируется на языке программирования C (C++) с соответствующим ему синтаксисом. Встроенный сборщик, препроцессор и компилятор (avr-gcc или Win-AVR) прощают большое количество ошибок и делает многое за пользователя автоматически, мы даже об этом не знаем и не задумываемся. Куча базовых функций для управления выводами микроконтроллера, математика и некоторые другие функции/макросы взяты из открытого фреймворка для работы с микроконтроллерами под названием Wiring. Именно из него примерно на 80% состоит базовый набор инструментов (функций) Ардуино. В связи с этим сами разработчики Ардуино называют язык “упрощённым C++”, и даже дали ему отдельное название – Arduino Wiring.
Синтаксис.
- Тела функций заключаются в фигурные скобки { }
- Каждая команда заканчивается точкой с запятой ;
- Метод применяется к объекту через точку. Пример: Serial.begin();
- Вызов функции или метода всегда заканчивается скобками, даже если функция не принимает параметров. Пример: loop()
- Разделитель десятичных дробей – точка. Пример: 0.25 У запятой тут другое применение.
- Запятыми перечисляются аргументы функций и методов, а также членов массива. Пример: digitalWrite(3, HIGH); массив – int myArray[] = {3, 4, 5 ,6}; Одиночный символ заключается в одиночные кавычки ‘а’
- Строка заключается в двойные кавычки “строка”
- Имена переменных могут содержать латинские буквы в верхнем и нижнем регистре (большие и маленькие), цифры и нижнее подчеркивание. Пример: myVal_35 .
- Имена переменных не могут начинаться с цифры. Только с буквы или нижнего подчёркивания.
- Регистр имеет значение, т.е. большая буква отличается от маленькой. Пример: переменные val и Val – не одно и то же.
- К синтаксису также можно отнести комментарии, т.к. в разных языках они выделяются по-разному. Комментарий это обычный текст, который игнорируется на этапе компиляции. Комментарии нужны для пояснения кода, как себе самому, так и другим возможным его читателям. В C++ у нас два типа комментариев:
- Однострочный комментарий
// однострочный комментарий
// компилятор меня игнорирует =(
- Многострочный комментарий
/* Многострочный
комментарий */
Структура кода.
При запуске Arduino IDE даёт нам заготовку в виде двух обязательных функций: setup и loop.
Код в блоке setup выполняется один раз при каждом запуске микроконтроллера. Код в блоке loop выполняется “по кругу” на всём протяжении работы микроконтроллера, начиная с момента завершения выполнения setup.
Функция pinMode.
Устанавливает режим работы заданного вход/выхода (pin) как входа или как выхода.
Синтаксис
pinMode(pin, mode)
Параметры
pin: номер вход/выхода (pin), который Вы хотите установить
mode: режим одно из двух значение — INPUT или OUTPUT, устанавливает на вход или выход соответственно.
Функция digitalWrite().
Подает HIGH или LOW значение на цифровой вход/выход (pin).
Если вход/выход (pin) был установлен в режим выход (OUTPUT) функцией pinMode(), то для значение HIGH напряжение на соответствующем вход/выходе (pin) будет 5В (3.3В для 3.3V плат), и 0В(земля) для LOW.
Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор. Нагрузочного резистра достаточно чтобы светодиод, подключенный к входу, светил тускло. Если вдруг светодиод работает, но очень тускло, возможно необходимо установить режим выход (OUTPUT) функцией pinMode().
Замечание. Вход/выход 13 сложнее использовать как цифровой вход, т.к. он имеет встроенный в плату резистор и светодиод. Если вы активируете еще внутренний нагрузочный резистор 20K, то напряжение на этом входе будет около 1.7В, вместо ожидаемых 5В, т.к. светодиод и добавочный резистор снижает напряжение, т.е. Вы всегда будете получать LOW. Если же Вам все же необходимо использовать 13ый вход/выход, то используйте внешний нагрузочный резистор.
Синтаксис
digitalWrite(pin, value)
Параметры
pin: номер вход/выхода(pin)
value: значение HIGH или LOW
Практика.
- Сделайте так, чтобы светодиод светился полсекунды, а пауза между вспышками была равна одной секунде.
- Измените код примера так, чтобы светодиод включался на три секунды после запуска устройства, а затем мигал в стандартном режиме.
- Подключите еще несколько светодиодов. Напишите программу светофора:
- Светит только красный цвет нашего будущего светофора.
- Не выключая красный сигнал светофора включаем желтый .
- Выключаем красный и желтый включаем зеленый.
- Выключаем зеленый сигнал светофора включаем желтый.
- После чего цикл повторяем с красного сигнала светофора.
Контрольные вопросы:
- Что будет, если подключить к земле анод светодиода вместо катода?
- Что будет, если подключить светодиод с резистором большого номинала (например, 10 кОм)?
- Что будет, если подключить светодиод без резистора?
- Зачем нужна встроенная функция pinMode? Какие параметры она принимает?
- Зачем нужна встроенная функция digitalWrite? Какие параметры она принимает?
- С помощью какой встроенной функции можно заставить микроконтроллер ничего не делать?
- В каких единицах задается длительность паузы для этой функции?