Особенности программирования Ардуино

«Ардуино» представляет собой набор программной и аппаратной частей, на базе которых можно создавать сложные роботизированные устройства. Программирование «Ардуино» открывает возможности гибко реагировать на изменяющиеся внешние условия.

Особенности программирования Ардуино

Начало работы с Arduino в системе Windows

При необходимости запрограммировать устройство для работы с микроконтроллером под Windows требуются:

  • любая версия платы «Ардуино»;
  • кабель USB;
  • среда разработки «Ардуино IDE».

Последняя и драйверы скачиваются из интернета. Плата через кабель подсоединяется к компьютеру. В настройках указывается тип платы «Ардуино», с которой работает программист.

Устанавливаются драйверы и средство разработки. Можно открывать подходящие примеры работ и на их основе создавать свои приложения.

Особенности работы с «Ардуино Мини»

Работа с Arduino Mini следует тем же правилам, что и с другими платами, за исключением некоторых моментов:

  • подключение Arduino Mini к ПК сложнее, чем у стандартных моделей;
  • в настройках IDE необходимо указать вручную тип платы из меню Tools | Board и выбрать «Arduino Mini»;
  • прошивка нового скетча в Arduino Mini начинается с физического нажатия кнопки сброса на плате прямо перед началом операции.

Научиться программировать и работать с этим контроллером под силу даже детям. Интегрированная среда предоставляет простой и логический интерфейс.

Краткие сведения об Arduino Mini

Данная версия микроконтроллера должна обеспечить минимальные размеры при сохранении остальных функций, что накладывает некоторые особенности на плату:

  1. Микрочип в Arduino Mini (применяется ATmega328) меньше по размерам.
  2. Имеет 2 дополнительных аналоговых входа, всего 8. Однако 4 из них не имеют выводов на плате. Для них нужно самостоятельно припаивать штыри вывода. 2 вывода используются для интерфейса I2C и библиотекой Wire.
  3. Прочность Arduino Mini меньше других плат производителя.
  4. ATmega328 впаян в плату и потому не съемный, замене подлежит весь микроконтроллер.
  5. Не выдерживает перегрузок по напряжению на входах выше 9 В.

Краткие сведения об Arduino Mini

Основные функции

Язык программирования, используемый в «Ардуино ИДЕ», является усеченным вариантом С++. Основные функции, используемые для организации работы микроконтроллера, разбиты на группы, которые:

  • осуществляют ввод и вывод сигнала в цифровом виде;
  • управляют вводом и выводом аналогового сигнала;
  • обеспечивают дополнительные возможности управления вводом и выводом;
  • осуществляют управление временем;
  • проводят математические вычисления и функции;
  • осуществляют вычисления в тригонометрии;
  • обеспечивают получение случайных чисел;
  • проводят операции с Битами и байтами;
  • обеспечивают вызов внешних прерываний;
  • осуществляют генерацию прерывания микрочипа.

Что такое скетч и его функции

Программа (функция в терминах С++), имеющая заданную структуру и предназначенная для «Ардуино»-платформы называется скетчем. Скетч многое сохранил от C++:

  • синтаксис — точка с запятой используется в качестве разделителя строк;
  • целочисленные константы — декларируются в заголовочных файлах;
  • использование языковых конструкций switch case, else if.

При подаче питания запускается загрузчик bootloader, хранимый в энергонезависимой памяти, и передает управление пользовательскому скетчу.

Структура скетча включает две обязательные функции:

  • setup();
  • loop().

При передаче управления скетчу первой вызывается, и только один раз, функция setup(). Таким образом, эта функция всегда выполняется при подаче напряжения на микроконтроллер. В нее стоит помещать задания по инициализации переменных, установке режимов пинов и связанных с ними датчиков, оборудования. По завершении setup() в цикле вызывается функция loop(), которая выполняется до отключения питания.

Как работают цифровые выводы

Обучение начинающих программировать микроконтроллерные платы freeduino лучше проводить на примерах простейших приложений. Иллюстрацией использования этих функций станет скетч, управляющий светодиодом, аналог классической «Hello, World!».

1
2
3
4
5
6
7
8
9
10
11
12
void setup()
{
    pinMode(14, OUTPUT);    // Установка 14-пина на вывод
}
 
void loop()
{
    digitalWrite(14, HIGH); // подаем напряжение, включаем светодиод
    delay(500);             // задержка 0,5 с
    digitalWrite(14, LOW);  // гасим светодиод
    delay(500);             // ожидание 0,5 с
}

Для начала работы требуется загрузить скетч в микроконтроллер. Запускаем Arduino IDE и копируем или набираем скетч. Для переноса выбираем пункт меню среды «Залить». При этом осуществляется компиляция программы, перевод ее в машинный код. Предыдущие залитые скетчи нет необходимости удалять — все происходит автоматически. Перезапуск «Ардуино» приведет к работе скетча и миганию светодиода на микроконтроллере.

Если данный скетч показался бесполезной демонстрационной игрушкой, то это не так. Внесем небольшие изменения в скетч:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define PIN_RELAY 5 				// Эта строка может быть помещена в отдельный заголовочный файл.
                    				// в ней определяется пин, на который будет выводиться сигнал управления реле
 
void setup()
{
	pinMode(PIN_RELAY, OUTPUT);     // пин реле объявляется работающим на выход
	digitalWrite(PIN_RELAY, HIGH);  // Отключаем реле высоким сигналом
}
 
void loop()
{
    digitalWrite(PIN_RELAY, LOW); 	// Включили реле низким сигналом
	delay(5000); 					// пауза в 5 с
	digitalWrite(PIN_RELAY, HIGH); 	// Отключили реле высоким сигналом
	delay(5000); 					// задержка в 5 с
}

Обратите внимание на синтаксис используемого языка, который один в один похож на С++, и способ использования готовых функций.

Как работают цифровые выводы

На цифровых выходах имеется возможность подключать и деактивировать подтягивающие резисторы. Управление ими осуществляется программным способом.

Выводы могут обеспечивать достаточно большой ток (до 40 мА). Этого значения достаточно для подключения светодиода, другого электронного устройства, но мало для большинства электромеханических устройств, таких как реле, соленоид, двигатель.

При сильной нагрузке защита в большинстве случаев успевает сработать и отключить данную ножку контроллера. Рекомендуется к выходам подключать через резисторы 470 Ом или 1 кОм, если есть потребность обеспечить максимально возможный ток.

Нюансы аналоговых входов

Выходной аналоговый сигнал обеспечивается АЦП. В чипах Atmega использован шестиканальный АЦП. Его разрешение составляет 10 бит или значения от 0 до 1023. Основное назначение входов — чтение сигнала аналоговых датчиков.

Выводы Arduino, соответствующие аналоговым входам, нумеруются от 14 до 19. Выводы аналоговых входов могут подключать подтягивающие резисторы, работающие так же, как на цифровых выводах. Включение резисторов производится командой: digitalWrite(14, HIGH); // включить резистор на выводе аналогового входа 0

Если вы управляли выводом, задавая режим, то перед последующим изменением его функций осуществите сброс параметров во избежание некорректной работы. Используя аналоговые входы, следует уделить внимание работе с serial wire, вспомогательным каналом передачи данных.

Память в «Ардуино»

В микроконтроллере ATmega168, используемом на платформах Arduino, применяется три вида памяти:

  • флеш — используется для хранения скетчей;
  • ОЗУ — оперативная с произвольным доступом;
  • EEPROM — энергонезависимая.

Во флеш-памяти и EEPROM данные сохраняются при отключении питания. ОЗУ теряет информацию. Микроконтроллер ATmega168 оснащен:

  • 16 Кб флеш-памяти (2 Кб используется для хранения загрузчика);
  • 1024 байта ОЗУ;
  • 512 байт EEPROM.

Малый объем ОЗУ, при большом числе строк, может полностью израсходоваться.

При отсутствии свободного места в ОЗУ происходит сбой программы. Существует несколько путей решения проблемы:

  • часть данных хранить на компьютере, пользователь периодически обращается за данными туда или сохраняет их там;
  • при больших массивах сократить размер оперируемых данных, например тип Инт заменить на тип Байт;
  • константы выносить за пределы ОЗУ, хранить во флеш-памяти.

Память в Ардуино

Работа с EEPROM ведется при помощи специализированной библиотеки.

Перепрошивка контроллера

Алгоритм перепрошивки контроллера примерно одинаков для всех схем, с ним разберутся даже дети. Рассмотрим, как образец, работу с Atmega8U2 для Mega2560:

  • загружается программа «FLIP» с сайта компании Атмел (atmel.com);
  • скачивается последняя версия прошивки;
  • перемычкой или лучше резистором на 10кОм замыкаются два контакта на тыльной стороне платы;
  • «Ардуино» через USB подключается к ПК;
  • на несколько секунд замыкаются два контакта сброса контроллера;
  • устанавливаются драйверы для обнаруженного ПК устройства;
  • запускается программа FLIP, в меню выбираем «File->Load HEX File» и загружаем новую прошивку;
  • в меню ищем «Device->Select», затем выбираем из списка «at90usb82»;
  • выбираем команду открыть в «Settings→Communication→Usb-Open»;
  • проверяем установку параметров и запускаем прожиг «Run»;
  • убираем перемычку-резистор с платы.

Перепрошивка завершена, устройство готово к работе.

Создание библиотек

Программист может создавать свои библиотеки для Arduino, чтобы не писать повторяющиеся куски кода с нуля. В них удобно собрать обучающие алгоритмы, вынести неизменяемый визуальный графический контент. Начинается все с отработки скетча, который выполняет требуемые задачи. После этого следует определить, какая часть кода должна быть перенесена в библиотеку. Далее начинаем процесс конвертации скетча в библиотеку, которая состоит из двух файлов:

  • заголовочный с расширением .h;
  • с кодом и расширением .cpp).

Первый дает пояснение содержимому библиотеки. Он включает перечень функций, объектов, переменных, которые использует библиотека. Несмотря на лайт-версию С++, в библиотеке могут использоваться атрибуты видимости объектов, классы, конструкторы и деструкторы и другие возможности ООП. В заголовках применяются директивы языка C++. Библиотека не помещается в особый модуль и хранится в текстовом виде, в формате файлов .cpp и .h в отдельной папке с именем библиотеки, но размещенном в каталоге libraries. Текстовые файлы компилируются при использовании указанной библиотеки.

Ссылка на основную публикацию