Библиотека Stepper
Для управления шаговым двигателем в Arduino имеется стандартная библиотека
Набор функций у нее следующий:
Stepper();
setSpeed();
step().
Функция Stepper()
Функция Stepper() создает новый объект класса Stepper, привязанный к одному шаговому двигателю, подключенному к контроллеру Arduino. Конструктор следует использовать при объявлении переменной класса Stepper, обычно в самом начале — вне setup() и loop(). Количество параметров зависит от способа подключения — 2 или 4 выхода используются для управления двигателем.
Синтаксис:
Stepper(steps, pin1, pin2) Stepper(steps, pin1, pin2, pin3, pin4)
Параметры:
steps — количество шагов в полном обороте используемого двигателя. Если в документации к двигателю указан угол одного шага, то следует разделить 360° на этот угол, что даст нам искомое количество шагов;
pin1, pin2, pin3, pin4 — выходы Arduino для подключения шагового двигателя. Возвращаемое значение: новый экземпляр объекта класса Stepper.
Функция setSpeed(rpm)
Функция setSpeed(rpm) устанавливает скорость вращения в оборотах в минуту. Эта функция не заставляет двигатель вращаться, а лишь устанавливает скорость вращения, которая будет использована при вызове функции step().
Синтаксис:
Stepper.setSpeed(rpm)
Параметр: rpm — скорость, на которой будет производиться вращение шагового двигателя, выражается в оборотах в минуту.
Возвращаемого значения нет.
Функция step(steps)
Функция step(steps) вращает шаговый двигатель на определенное количество шагов на скорости, заданной функцией setSpeed(). Эта функция блокирующая, т. е. она ожидает окончания вращения двигателя, прежде чем передать управление в следующую строку кода. Во избежание длительной блокировки выполнения кода скетча, управление необходимо организовывать так, чтобы скорость была высокая, а за один вызов step() делалось всего несколько шагов.
Синтаксис:
Stepper.step(steps)
Параметр: steps — количество шагов:
• положительное число — вызывает вращение в одну сторону;
• отрицательное — в противоположную. Возвращаемого значения нет.
Пример использования библиотеки Stepper
В примере представлен пример использования библиотеки Stepper — поворот шагового двигателя при нажатии кнопок "влево" и "вправо" на определенный угол, что можно представить как программную заготовку для поворота панорамной камеры в одной плоскости. В примере использованы шаговый двигатель и аналоговая клавиатура
#include <Stepper.h>
const int stepsPerRevolution=200; // количество шагов в полном обороте двигателя
Stepper myStepper(stepsPerRevolution,8,9,10,11);
int minangle=15; // угол поворота на 1 нажатие (шаг камеры) struct KEYS // структура для хранения статусов клавиш
{
int button; // нажатая кнопка
long millisbutton[7]; // millis для button
};
void setup() {;}
void loop() { int valbutton;
// опрос клавиатуры valbutton=analogRead(A0); if(valbutton<1000)
{buttonClick2(buttonClick1(valbutton));}
}
// обработка нажатия кнопки int buttonClick1(int val)
{
if(val>650) {KEYS1.button=1;return 1;}
if(val>600) {KEYS1.button=2;return 2;}
if(val>530) {KEYS1.button=3;return 3;}
if(val>450) {KEYS1.button=4;return 4;}
if(val>300) {KEYS1.button=5;return 5;}
if(val>200) {KEYS1.button=6;return 6;}
return 0;
}
void buttonClick2(int val)
{
if(millis()-KEYS1.millisbutton[val]<100) // проверка на дребезг return;
KEYS1.millisbutton[val]=millis(); KEYS1.button=val;
switch(val) { case 1: // left
myStepper.step(stepsPerRevolution*minangle/360*(-1)); break;
case 2: // up break;
case 3: // down break;
case 4: // right myStepper.step(stepsPerRevolution*minangle/360); break;
case 5: // white break;
case 6: // red
// код на нажатие кнопки камеры break;
default: break;
}
}