Контроллеры Arduino
Arduino - семейство контроллеров (программируемых электронных плат) для домашнего технического творчества. С их помощью можно создавать элементы "умного дома", несложных роботов и другие автоматизированные устройства. Arduino активно используется и в образовательных целях как средство обучения основам программирования и робототехники.
Контроллеры Arduino выпускаются в различных конфигурациях, в зависимости от требуемых характеристик. Некоторые применяют для управления сложными системами (Arduino Mega), некоторые - для компактных устройств, вплоть до встраиваемых в одежду (Arduino Nano).
Помимо контроллеров, производители электроники предлагают на рынке множество дополнительных модулей, совместимых с Arduino: датчиков освещенности, влажности, инфракрасных считывателей и излучателей, реле, моторов, табло и т.п. Такие устройства подключаются к контроллеру через пины - выводы платы, к которым можно подсоединить провода. Пины могут работать в режиме входа (считывают показания датчиков) или выхода (например, для включения реле). Через аналоговые пины можно считывать диапазоны значений (например, при измерении температуры).
Рисунок 1. Контроллер Arduino и подключаемые к нему устройства. Автор24 — интернет-биржа студенческих работ
Для подключения внешних устройств к контроллерам используются программные библиотеки, которые, как правило, распространяются под свободными лицензиям.
В Сети существует обширное комьюнити, поддерживающее разработчиков. Производители Arduino сопровождают свою продукцию подробной онлайн-документацией.
Arduino IDE
Для разработки программ, загружаемых в контроллеры Arduino, используется специальное программное обеспечение (IDE), которое можно скачать с сайта производителя.
Программы для микроконтроллеров принято называть скетчами.
Arduino IDE написана на кроссплатформенном языке Java, поэтому ее легко установить на любую современную настольную операционную систему (Windows, Linux, MacOS). IDE комплектуется большим количеством примеров и программных библиотек. Недостающие библиотеки легко загрузить через Интернет.
Соединив свою плату-контроллер с компьютером с помощью USB-кабеля, можно загружать в нее скетчи. Перед загрузкой IDE проверяет скетчи на наличие ошибок. В отладочных целях она оснащена терминалом, позволяющим компьютеру обмениваться сообщениями с контроллером.
Рисунок 2. Скетч, открытый в Arduino IDE. Автор24 — интернет-биржа студенческих работ
Язык программирования для Arduino
Язык программирования, на котором пишутся скетчи для Arduino, с точки зрения синтаксиса принадлежит к классу Си-подобных.
Некоторые компании, продающие платы Arduino, занимаются разработкой собственного ПО для создания скетчей. Так, российская компания Amperka предоставляет IDE для программирования Arduino на языке JavaScript.
Скетч состоит из следующих стандартных блоков:
- объявление переменных и импорт необходимых библиотек;
- блок начальной инициализации (функция
setup
); - повторяющийся блок (функция
loop
); - дополнительные функции, которые программист создает самостоятельно.
Переменные в Arduino обладают строгой типизацией, совместимой с некоторыми реализациями Си:
- boolean - для логических значений true/false;
- byte - 8 бит, целое число от 0 до 255;
- char - 8 бит, целое в диапазоне от -128 до 127;
- word - 2 байта, целое от 0 до 65535
- int - 2 байта, целое от -32768 до 32767;
- unsigned long - 32 бита, целое от 0 до 4294967295;
- long - 32 бита, целое от -2,147,483,648 до 2,147,483,647;
- float - 32 бита, дробное число (с плавающей точкой) в диапазоне от -3.4028235E38 до 3.4028235E38.
Кроме того, скетч может содержать комментарии, инструкции #define
и т.п.
Функция setup
выполняется один раз, в момент запуска программы. В ней обычно настраиваются режимы работы пинов, устанавливаются свойства библиотек. По окончании работы она передает управление функции loop
, повторяющейся в бесконечном цикле до тех пор, пока контроллер не будет обесточен или не произойдет какая-нибудь авария. При каждой итерации этого цикла контроллер опрашивает пины по запрограммированному в скетче алгоритму, взаимодействует с устройствами по шинам I2C, RS-232 и т.п.
Рассмотрим некоторые наиболее распространенные встроенные функции Arduino:
- pinMode() - устанавливает режим пина (INPUT/OUTPUT);
- digitalWrite() - подает на пин высокий или низкий уровень напряжения;
- digitalRead() - считывает с входа уровень сигнала (высокий или низкий);
- analogRead() - считывает аналоговый сигнал в виде числа от 0 до 1024;
- tone() - подает звуковой сигнал (предполагается, что к пину подключен динамик);
- noTone() - прекращает звуковой сигнал;
- millis() - возвращает время работы устройства в миллисекундах, прошедшее с момента включения устройства;
- delay() - приостанавливает работу устройства;
- Serial.print() - отправляет информацию в терминальное окно IDE.
Помимо этих функций, язык программирования Arduino предусматривает и множество других, однако для большинства поделок, которые изготавливаются домашними умельцами на базе таких контроллеров, этих бывает достаточно.
Пример скетча для Arduino
int buzzer = 9; // К пину №9 будет подключен динамик-пищалка.
int smoke = A0; // К аналоговому пину A0 будет подключен датчик задымления.
int sensorThres = 100; // Порог срабатывания (при превышении этого значения подать звуковой сигнал).
void setup() {
pinMode(buzzer, OUTPUT);
pinMode(smoke, INPUT);
tone(buzzer, 1000, 200); // Подаем звуковой сигнал в момент запуска программы.
Serial.begin(9600); // Для отладки подготавливаем терминал IDE.
}
void loop() {
int analogSensor = analogRead(smokeA0); // Считываем сигнал с датчика.
Serial.print("Pin A0: ");
Serial.println(analogSensor); // Отправляем данные на ПК.
if (analogSensor > sensorThres) { // Если превышен порог:
tone(buzzer, 1000, 500); // подаем звуковой сигнал.
}
else { // В противном случае
noTone(buzzer); // выключаем звук.
}
delay(1000); // Приостанавливаем процесс на 1 секунду.
}