Мини-уроки по Arduino версия 2
Добавлено: 11 авг 2023, 13:57
Что представляет собой Arduino и для каких целей оно используется?
Arduino представляет собой электронный конструктор, при помощи которого каждый может создавать разнообразные электро-механические устройства. Эта платформа включает в себя как программную, так и аппаратную составляющие. Программная часть включает среду разработки – программу для написания и отладки прошивок, богатый набор готовых и удобных библиотек, а также упрощенный язык программирования. Аппаратная часть состоит из обширного ассортимента микроконтроллеров и готовых модулей, предназначенных для них. Благодаря такой структуре, работа с Arduino становится чрезвычайно простой и доступной.
Arduino не только обучает программированию, электротехнике и механике, но также представляет собой более глубокий инструмент. На основе этой платформы можно создавать действительно полезные устройства – начиная от простых мигалок и метеостанций, и до систем автоматизации, умных домов, станков с числовым программным управлением и даже беспилотных летательных аппаратов.
Программирование на Ардуино
Когда у вас под рукой есть микроконтроллерная плата, а на компьютере установлена среда разработки, можно приступать к созданию своих первых скетчей (прошивок). Для этого важно ознакомиться с языком программирования, используемым на Ардуино.
Для программирования на Ардуино используется упрощенная версия языка C++ с заранее определенными функциями. Как и в других языках программирования в стиле С, существуют определенные правила для написания кода. Вот основные из них:
1. После каждой инструкции следует ставить точку с запятой (;).
2. Перед объявлением функции необходимо указать возвращаемый тип данных или void, если функция ничего не возвращает.
3. Тип данных также необходимо указывать перед объявлением переменной.
4. Комментарии могут быть строчными (//) или блочными (/* ... */).
Дополнительную информацию о типах данных, функциях, переменных, операторах и языковых конструкциях можно найти на странице по программированию Ардуино. Запоминать всю эту информацию не обязательно – всегда можно обратиться к справочнику и проверить синтаксис той или иной функции.
Каждая прошивка для Ардуино должна содержать как минимум две функции: setup() и loop().
Функция setup()
Функция setup() выполняется один раз в самом начале после включения или перезагрузки устройства. Обычно в этой функции настраивают режимы пинов, инициализируют протоколы связи, устанавливают связи с внешними модулями и настраивают используемые библиотеки. Если в вашей прошивке такие действия не требуются, функция все равно должна быть объявлена. Пример стандартной функции setup():
В данном примере мы просто открываем последовательный порт для связи с компьютером и определяем пины 9 и 13 как вход и выход. Все довольно просто. Если у вас возникли вопросы, не стесняйтесь оставлять сообщения на форуме.
Функция loop
Функция loop() запускается после setup(). Loop, переводящийся с английского как "петля", подразумевает, что эта функция будет выполняться циклически. Например, микроконтроллер ATmega328, установленный в большинстве плат Arduino, выполнит функцию loop около 10 000 раз в секунду (если нет задержек и сложных вычислений). Это предоставляет множество возможностей.
Плата Breadbord
Вы можете создавать простые и сложные устройства. Для удобства рекомендуется приобрести макетную плату (Breadbord) и провода. Они позволяют избежать пайки и перепаивания проводов, модулей, кнопок и датчиков для разных проектов и отладки. Использование беспаечной макетной платы упрощает и ускоряет разработку. Подробнее о работе с макетной платой вы найдете в этом уроке. Вот некоторые типы беспаечных макетных плат:
Первый проект на Arduino
Давайте соберем начальное устройство с использованием Arduino. Мы просто подключим тактовую кнопку и светодиод. Схема проекта следующая: Обратите внимание на дополнительные резисторы, присутствующие в данной схеме. Один из них используется для ограничения тока, протекающего через светодиод, а второй служит для заземления контакта кнопки.
Для обеспечения функциональности, необходимо написать соответствующий скетч. Давайте создадим программу, которая будет включать светодиод при нажатии на кнопку и выключать его при следующем нажатии. Приведен ниже наш первый скетч:
Здесь создана дополнительная функция "debounce" для подавления дребезга контактов.
ШИМ Arduino
Широтно-импульсная модуляция (ШИМ) - это способ управления напряжением через изменение длительности сигнала. ШИМ позволяет плавно регулировать нагрузку. Примером может служить плавное изменение яркости светодиода. Это достигается путем изменения интервалов между низкими сигналами, а не напряжением. Принцип работы ШИМ показан на схеме: Подача ШИМ-сигнала на светодиод приводит к его быстрому мерцанию, невидимому для человеческого глаза из-за высокой частоты. Однако, съемка на видео может выявить эти моменты, если частота кадров камеры не соответствует частоте ШИМ.
Arduino включает в себя встроенный модулятор широтно-импульсных сигналов (ШИМ). Это возможно только на пинах, поддерживаемых микроконтроллером. Например, Arduino Uno и Nano предлагают 6 ШИМ-пинов: D3, D5, D6, D9, D10 и D11. Варианты могут различаться на других платах, поэтому рекомендуется ознакомиться с описанием конкретной платы.
Для использования ШИМ в Arduino служит функция analogWrite(). Она принимает номер пина и значение ШИМ (от 0 до 255), где 0 означает 0% заполнение высоким сигналом, а 255 - 100%. Приведем пример: светодиод будет плавно включаться, ожидать секунду, затем плавно выключаться, и так далее. Код примера ниже:
Аналоговые входы на Arduino
Аналоговые пины в отличие от цифровых могут только принимать сигналы и измерять напряжение поступающего сигнала. Преобразование происходит с точностью 10 бит, где 0 соответствует 0 В, а 1023 - 5 В. Это позволяет измерять напряжение с точностью до 0,005 В, что полезно для работы с датчиками и резисторами (фоторезисторами, терморезисторами).
Для работы с аналоговыми сигналами на Arduino используется функция analogRead(). В примере мы подключаем фоторезистор и создаем скетч, который считывает и выводит показания в монитор порта. Схема включает стягивающий резистор на 10 КОм для подавления помех. Пример кода ниже:
Arduino представляет собой электронный конструктор, при помощи которого каждый может создавать разнообразные электро-механические устройства. Эта платформа включает в себя как программную, так и аппаратную составляющие. Программная часть включает среду разработки – программу для написания и отладки прошивок, богатый набор готовых и удобных библиотек, а также упрощенный язык программирования. Аппаратная часть состоит из обширного ассортимента микроконтроллеров и готовых модулей, предназначенных для них. Благодаря такой структуре, работа с Arduino становится чрезвычайно простой и доступной.
Arduino не только обучает программированию, электротехнике и механике, но также представляет собой более глубокий инструмент. На основе этой платформы можно создавать действительно полезные устройства – начиная от простых мигалок и метеостанций, и до систем автоматизации, умных домов, станков с числовым программным управлением и даже беспилотных летательных аппаратов.
Программирование на Ардуино
Когда у вас под рукой есть микроконтроллерная плата, а на компьютере установлена среда разработки, можно приступать к созданию своих первых скетчей (прошивок). Для этого важно ознакомиться с языком программирования, используемым на Ардуино.
Для программирования на Ардуино используется упрощенная версия языка C++ с заранее определенными функциями. Как и в других языках программирования в стиле С, существуют определенные правила для написания кода. Вот основные из них:
1. После каждой инструкции следует ставить точку с запятой (;).
2. Перед объявлением функции необходимо указать возвращаемый тип данных или void, если функция ничего не возвращает.
3. Тип данных также необходимо указывать перед объявлением переменной.
4. Комментарии могут быть строчными (//) или блочными (/* ... */).
Дополнительную информацию о типах данных, функциях, переменных, операторах и языковых конструкциях можно найти на странице по программированию Ардуино. Запоминать всю эту информацию не обязательно – всегда можно обратиться к справочнику и проверить синтаксис той или иной функции.
Каждая прошивка для Ардуино должна содержать как минимум две функции: setup() и loop().
Функция setup()
Функция setup() выполняется один раз в самом начале после включения или перезагрузки устройства. Обычно в этой функции настраивают режимы пинов, инициализируют протоколы связи, устанавливают связи с внешними модулями и настраивают используемые библиотеки. Если в вашей прошивке такие действия не требуются, функция все равно должна быть объявлена. Пример стандартной функции setup():
Код: Выделить всё
void setup() {
Serial.begin(9600); // Открываем serial соединение
pinMode(9, INPUT); // Назначаем 9 пин входом
pinMode(13, OUTPUT); // Назначаем 13 пин выходом
}
Функция loop
Функция loop() запускается после setup(). Loop, переводящийся с английского как "петля", подразумевает, что эта функция будет выполняться циклически. Например, микроконтроллер ATmega328, установленный в большинстве плат Arduino, выполнит функцию loop около 10 000 раз в секунду (если нет задержек и сложных вычислений). Это предоставляет множество возможностей.
Плата Breadbord
Вы можете создавать простые и сложные устройства. Для удобства рекомендуется приобрести макетную плату (Breadbord) и провода. Они позволяют избежать пайки и перепаивания проводов, модулей, кнопок и датчиков для разных проектов и отладки. Использование беспаечной макетной платы упрощает и ускоряет разработку. Подробнее о работе с макетной платой вы найдете в этом уроке. Вот некоторые типы беспаечных макетных плат:
Первый проект на Arduino
Давайте соберем начальное устройство с использованием Arduino. Мы просто подключим тактовую кнопку и светодиод. Схема проекта следующая: Обратите внимание на дополнительные резисторы, присутствующие в данной схеме. Один из них используется для ограничения тока, протекающего через светодиод, а второй служит для заземления контакта кнопки.
Для обеспечения функциональности, необходимо написать соответствующий скетч. Давайте создадим программу, которая будет включать светодиод при нажатии на кнопку и выключать его при следующем нажатии. Приведен ниже наш первый скетч:
Код: Выделить всё
// переменные с пинами подключенных устройств
int switchPin = 8;
int ledPin = 11;
// переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;
void setup() {
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
// функция для подавления дребезга
boolean debounse(boolean last) {
boolean current = digitalRead(switchPin);
if(last != current) {
delay(5);
current = digitalRead(switchPin);
}
return current;
}
void loop() {
currentButton = debounse(lastButton);
if(lastButton == LOW && currentButton == HIGH) {
ledOn = !ledOn;
}
lastButton = currentButton;
digitalWrite(ledPin, ledOn);
}
ШИМ Arduino
Широтно-импульсная модуляция (ШИМ) - это способ управления напряжением через изменение длительности сигнала. ШИМ позволяет плавно регулировать нагрузку. Примером может служить плавное изменение яркости светодиода. Это достигается путем изменения интервалов между низкими сигналами, а не напряжением. Принцип работы ШИМ показан на схеме: Подача ШИМ-сигнала на светодиод приводит к его быстрому мерцанию, невидимому для человеческого глаза из-за высокой частоты. Однако, съемка на видео может выявить эти моменты, если частота кадров камеры не соответствует частоте ШИМ.
Arduino включает в себя встроенный модулятор широтно-импульсных сигналов (ШИМ). Это возможно только на пинах, поддерживаемых микроконтроллером. Например, Arduino Uno и Nano предлагают 6 ШИМ-пинов: D3, D5, D6, D9, D10 и D11. Варианты могут различаться на других платах, поэтому рекомендуется ознакомиться с описанием конкретной платы.
Для использования ШИМ в Arduino служит функция analogWrite(). Она принимает номер пина и значение ШИМ (от 0 до 255), где 0 означает 0% заполнение высоким сигналом, а 255 - 100%. Приведем пример: светодиод будет плавно включаться, ожидать секунду, затем плавно выключаться, и так далее. Код примера ниже:
Код: Выделить всё
// Светодиод подключен к 11 пину
int ledPin = 11;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int i = 0; i < 255; i++) {
analogWrite(ledPin, i);
delay(5);
}
delay(1000);
for (int i = 255; i > 0; i--) {
analogWrite(ledPin, i);
delay(5);
}
}
Аналоговые пины в отличие от цифровых могут только принимать сигналы и измерять напряжение поступающего сигнала. Преобразование происходит с точностью 10 бит, где 0 соответствует 0 В, а 1023 - 5 В. Это позволяет измерять напряжение с точностью до 0,005 В, что полезно для работы с датчиками и резисторами (фоторезисторами, терморезисторами).
Для работы с аналоговыми сигналами на Arduino используется функция analogRead(). В примере мы подключаем фоторезистор и создаем скетч, который считывает и выводит показания в монитор порта. Схема включает стягивающий резистор на 10 КОм для подавления помех. Пример кода ниже:
Код: Выделить всё
int sensePin = 0; // Пин к которому подключен фоторезистор
void setup() {
analogReferense(DEFAULT); // Задаем опорное значение напряжения. Эта строка не обязательна.
Serial.begin(9600); // Открываем порт на скорости 9600 бод.
}
void loop() {
Serial.println(analogRead(sensePin)); // Считываем значение и выводим в порт
delay(500); // задержка для того что бы значений было не слишком много
}