Мини-уроки по Arduino версия 2

Ответить
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Мини-уроки по Arduino версия 2

Сообщение Oleg »

Что представляет собой Arduino и для каких целей оно используется?

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 пин выходом
}
В данном примере мы просто открываем последовательный порт для связи с компьютером и определяем пины 9 и 13 как вход и выход. Все довольно просто. Если у вас возникли вопросы, не стесняйтесь оставлять сообщения на форуме.

Функция loop
Функция loop() запускается после setup(). Loop, переводящийся с английского как "петля", подразумевает, что эта функция будет выполняться циклически. Например, микроконтроллер ATmega328, установленный в большинстве плат Arduino, выполнит функцию loop около 10 000 раз в секунду (если нет задержек и сложных вычислений). Это предоставляет множество возможностей.

Плата Breadbord
Вы можете создавать простые и сложные устройства. Для удобства рекомендуется приобрести макетную плату (Breadbord) и провода. Они позволяют избежать пайки и перепаивания проводов, модулей, кнопок и датчиков для разных проектов и отладки. Использование беспаечной макетной платы упрощает и ускоряет разработку. Подробнее о работе с макетной платой вы найдете в этом уроке. Вот некоторые типы беспаечных макетных плат:

Первый проект на Arduino

Давайте соберем начальное устройство с использованием Arduino. Мы просто подключим тактовую кнопку и светодиод. Схема проекта следующая:
Снимок экрана 2023-08-11 134411.jpg
Обратите внимание на дополнительные резисторы, присутствующие в данной схеме. Один из них используется для ограничения тока, протекающего через светодиод, а второй служит для заземления контакта кнопки.
Для обеспечения функциональности, необходимо написать соответствующий скетч. Давайте создадим программу, которая будет включать светодиод при нажатии на кнопку и выключать его при следующем нажатии. Приведен ниже наш первый скетч:

Код: Выделить всё

// переменные с пинами подключенных устройств
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);
}
Здесь создана дополнительная функция "debounce" для подавления дребезга контактов.

ШИМ Arduino
Широтно-импульсная модуляция (ШИМ) - это способ управления напряжением через изменение длительности сигнала. ШИМ позволяет плавно регулировать нагрузку. Примером может служить плавное изменение яркости светодиода. Это достигается путем изменения интервалов между низкими сигналами, а не напряжением. Принцип работы ШИМ показан на схеме:
Снимок экрана 2023-08-11 134509.jpg
Подача ШИМ-сигнала на светодиод приводит к его быстрому мерцанию, невидимому для человеческого глаза из-за высокой частоты. Однако, съемка на видео может выявить эти моменты, если частота кадров камеры не соответствует частоте ШИМ.

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);
	}
}
Аналоговые входы на Arduino
Аналоговые пины в отличие от цифровых могут только принимать сигналы и измерять напряжение поступающего сигнала. Преобразование происходит с точностью 10 бит, где 0 соответствует 0 В, а 1023 - 5 В. Это позволяет измерять напряжение с точностью до 0,005 В, что полезно для работы с датчиками и резисторами (фоторезисторами, терморезисторами).
Снимок экрана 2023-08-11 135532.jpg
Для работы с аналоговыми сигналами на Arduino используется функция analogRead(). В примере мы подключаем фоторезистор и создаем скетч, который считывает и выводит показания в монитор порта. Схема включает стягивающий резистор на 10 КОм для подавления помех. Пример кода ниже:

Код: Выделить всё

int sensePin = 0;  // Пин к которому подключен фоторезистор
 
void setup() {
 analogReferense(DEFAULT);  // Задаем опорное значение напряжения. Эта строка не обязательна.
 Serial.begin(9600);  // Открываем порт на скорости 9600 бод.
}
 
void loop() {
 Serial.println(analogRead(sensePin));  // Считываем значение и выводим в порт
 delay(500);  // задержка для того что бы значений было не слишком много
}

Ответить