Иванов Константин Игоревич

Уроки по Arduino: Урок 10

Урок 10: Назад в будущее!

План:

1. Переменные

2. Функции

3. Основы алгоритмизации

4. Шаговый двигатель

5. Библиотека для работы с шаговым двигателем

 

 


 

Теоретическая часть

дизайн

 

1. Переменные

Как и в Skretch, переменные в С++ представляют собой некоторые области памяти, которые имеют имя и могут принимать различные значения. В Skretch все переменные создаются одинаково, не учитывая какие данные будут храниться в этой переменной: целое значение, дробное значение, true/false, текст. В С++ при создании переменной так же указывается и тип данных, которые будут храниться в этой переменной. В общем виде объявление переменной выглядит следующим образом:

тип_данных имя_переменной;

Основные типы данных перечислены ниже:
int – целые значения
bool - false/true
double - вещественные числа (с дробной частью после запятой, например 3.14)
char - символьный тип.


Таким образом, объявление (создание) целочисленной переменной с именем a будет выглядеть так: int a;
Задать (присвоить) значение можно при объявлении: int a = 10;
Или в любом месте программы после объявления: а = 10;

 

 

2. Функции

 

Функция - это именованная последовательность операций, которая находится вне других функций и может быть использована в любой другой функции. Функции позволяют разделить программу на несколько маленьких подпрограмм, которые в совокупности выполняют поставленную задачу. Также функции можно многократно использовать, что значительно сокращает размер кода программы.
Определение функции:

тип_возвращаемого_значения имя_функции (тип имя_переменной1, тип имя_переменной2)
{тело функции; }

Сама функция может принимать значение определенного типа. Этот тип указывается перед именем функции. Значение, которое принимает функция, пишется после слова return и называется возвращаемым значением. Если функция не имеет возвращаемого значения, а просто выполняет какую-либо последовательность операций, то перед именем функции указывается слово void.
Функция может иметь параметры. Это те значение, которые в ходе своего выполнения может использовать функция, и которые передаются в нее из главной функции (в нашем случае функции loop()). Параметры функции указываются в круглых скобках после имени функции. При определении функции параметры указываются с их типами. При вызове функции параметры могут указываться явно в виде значений или как переменные (без указания типа переменной), причем имена переменных при определении и вызове функции могут не совпадать.
Например: Есть два светодиода, которые подключены к 10 и 11 пинам. С использованием функции нужно поочередно зажигать светодиоды с интервалом 1000 миллисекунд.

 

void ledOn(int n) //создание функции с параметром n (номер светодиода)
{
if (n == 1)
{
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
}
else if (n == 2)
{
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
}
}

void setup()
{
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}

void loop()
{
ledOn(1); //вызов функции с параметром 1 (зажжётся первый светодиод)
delay(1000);
ledOn(2); //вызов функции с параметром 2 (зажжётся второй светодиод)
delay(1000);
}

 

Функции, которые имеют схожее назначение, например, предназначены для работы с определенным устройством, для удобства объединяются в библиотеки. Существуют библиотеки для работы с серводвигателем, шаговым двигателем, дальномером и т.д. Стандартные библиотеки можно посмотреть, выполнив команду Меню Скетч - > Импортировать библиотеку. Можно добавлять дополнительные библиотеки, написанные самостоятельно, либо сторонними разработчиками.
Библиотека подключается в начале программы строкой вида:
#include «название_библиотеки»

 

 

 

3. Основы алгоритмизации

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

 

Блок - схемы

Блок - схемы

 

4. Шаговый двигатель

Шаговые двигатели – это особый вид двигателей, который позволяет управлять вращением ротора пошагово. Это значит, что ротор может иметь несколько устойчивых положений на один оборот. Когда положение ротора было задано, двигатель стремится его сохранить неизменным до тех пор, пока не будет задано новое положение. Данный тип двигателей применяется для контролируемого и точного перемещения различных механизмов. В частности, применяется в различных роботах, ЧПУ фрезерных, токарных станках и т.д. Еще шаговый двигатель обладает большой надежностью, т.к. у него кроме подшипников нет трущихся частей. Поэтому ресурс двигателя определяется только качеством подшипников. Благодаря своей надежности данный тип двигателей широко применяется в космонавтике.

 

Шаговый двигатель

Шаговый двигатель

 

 

Рассмотрим двигатель с маркировкой 28BYJ-48. Для совершения полного оборота он делает 32 шага. Он имеет 5 выводов: один общий вывод, который подключается к плюсу питания и 4 управляющих вывода, которые подключаются к минусу питания с помощью управляющего устройства. Управляющие выводы потребляют значительный ток, поэтому для них требуется специальная микросхема (ULN2003AN). Эта микросхема называется драйвер шагового двигателя. Что бы заставить ротор двигателя вращаться, необходимо подавать сигналы на драйвер в определенной последовательности. Драйвер в свою очередь их усилит и передаст на двигатель. Управляющие последовательности сигналов формируются в зависимости от режима работы двигателя – шаг или полушаг. Как правило, используются только режимы с дроблением шага. На таблице представлена последовательность для полушагового режима работы.

 

Комбинации управляющих сигналов

Комбинации управляющих сигналов

 

5. Библиотека для работы с шаговым двигателемь

Для облегчения работы с шаговым двигателем существует библиотека Strepper.h.
Она содержит следующие функции:
Stepper(intsteps, int pin1, int pin2, int pin3, int pin4)
Описание:
С помощью этой функции создается переменная (объект) типа Stepper, которая будет соответствовать подключенному к Arduino шаговому двигателю. В функции задаются номера портов, к которым подключен шаговый двигатель и количество шагов, необходимых для полного оборота вала вокруг своей оси.
Функцию необходимо задавать в начале программы, перед функциями loop() и setup() в виде:

Stepper motorName = Stepper(steps, pin1, pin2, pin3, pin4)
или
Stepper motorName(steps, pin1, pin2, pin3, pin4)
Если значение steps неизвестно, необходимо посмотреть в документации двигателя сколько градусов составляет один шаг. Затем необходимо разделить 360 градусов на эту величину. Обратите внимание, что значение должно быть целочисленное.
setSpeed(long rpms) - функция предназначена для задания скорости вращения двигателя в количестве оборотов в минуту. Аргумент – целое положительное число. Функция не приводит вал в движение, но задает его скорость после вызова функции step().
step(steps) - поворачивает вал двигателя на указанное число шагов. Скорость определяется последним вызовом функции setSpeed(). Обратите внимание, что программа не продолжит выполнение, пока не закончится выполнение функции step().Поэтому нужно стараться задавать высокую скорость вращения и минимальное количество шагов.
Положительное число вращает двигатель в одну сторону. Отрицательное – в другую.

 


 

Практическая часть

дизайн

 1. Сделать часы, которые идут в обратную сторону.

Шаг 1. Самостоятельно сделать циферблат для часов. В качестве основы можно использовать обыкновенный CD или DVD диск. Так же сделать стрелку, которая надевается на вал двигателя
Шаг 2. Подключить шаговый двигатель к Arduino, как показано на рисунке.

 

 Практика

 

Шаг 3. Написать программу.

#include //подключение библиотеки для ШД
Stepper myStepper(32, 8, 9, 10, 11); // объявление ШД

void setup()
{
/* задание скорости вращения 32 оборота в минуту. За минуту совершит полный оборот */
myStepper.SetSpeed(32);
}

void loop()
{
/* сделать 32 шага против часовой стрелки */
myStepper.step(-32);
}

 

 

Хотите узнать больше об Arduino, посетите нашу летнюю школу робототехники!

Увлекательнейшие занятия в совокупности с веселыми развлечениями!

 

 


Похожие посты:

Уроки по Arduino: Урок 11

Уроки по Arduino: Урок 12

0
Комментировать
Введите код: