


Привет! Продолжаем собирать проекты на ардуино. В одном из прошлых уроков мы рассмотрели работу шагового двигателя и подключение его к ардуино. Шаговые двигатели часто используются в робототехнике и станкостроении. А самые популярные станки с использованием таких двигателей сейчас это 3д принтер, плоттер и различные чпу станки.
Содержание
Если вы уже забыли или пропустили урок про шаговые двигатели, пожалуйста, посмотрите его.
Настоящий плоттер или чпу станок сегодня мы собирать не будем. Но попробуем собрать одну его ось. Запрограммировать и попробовать управлять.
Чтобы выполнить проект нам понадобиться.
- Ардуино UNO
- Макетная плата
- Перемычки
- Потенциометр
- Шаговый двигатель и драйвер
- Болт и гайка
- Лего
- Батарейки
- Кабель USB
Корпус плоттера из Лего
Для корпуса опять будем использовать конструктор лего. Что может быть лучше для ардуино, чем лего?
Для оси плоттера нам нужно собрать крепление для шагового двигателя. Сцепление двигателя и стола плоттера. И сам движущийся стол.
Из лего это сделать довольно легко. Единственная проблема в сборке системы сцепления. Но сегодня мы опять будем использовать новейшие и самые технологичные детали, а именно — болт и гайку.



Сцепление
Если скрепить головку болта с валом двигателя, а гайку с корпусом стола из лего. То при повороте вала двигателя по часовой стрелке стол будет отъезжать от нулевой позиции. И, соответственно, наоборот.
Просто из лего закрепить вал с болтом не получилось, поэтому мы использовали скрепки. Для нашей модели подойдет. Все работает довольно точно.



Проект
Итак, сегодня мы хотим сделать ось плоттера. И управлять ей с помощью программы в ардуино. Для этого мы соединим ардуино с шаговым двигателем. Будем управлять им с помощью потенциометра и используем библиотеку AccelStepper.h. Соединим вал двигателя с системой сцепления и с подвижной частью стола плоттера.
Таким образом мы сможем поместить стол в нужную позицию по оси x нашего воображаемого плоттера повернув ручку потенциометра. Сейчас мы не будем точно рассчитывать позицию стола. Но используя потенциометр мы сможем определить направление вращения вала и, соответственно движение стола. Будем выводить все значения в последовательный порт для отслеживания.



Программа
Подключаем библиотеку, заводим необходимые переменные и создаем экземпляр класса для работы с библиотекой.
#include <AccelStepper.h>
int val, pos;
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
AccelStepper stepper(8, IN1, IN3, IN2, IN4);
В функции setup() инициируем все настройки программы.
void setup(){
Serial.begin(9600); // включим последовательный порт
stepper.setMaxSpeed(500.0); // максимальная скорость двигателя
stepper.setAcceleration(100.0); // ускорение двигателя
stepper.setSpeed(500); // скорость двигателя (шаг в секунду)
}
В цикле loop() будем считывать показания потенциометра. И переводить их в диапазон значений, который будем отправлять на плоттер. Выведем все значения в последовательный порт.
void loop(){
val = analogRead(A0);
pos = map(val, 0, 1023, -25000, 25000);
Serial.print("sensor1 = ");
Serial.print(val);
Serial.print("map = ");
Serial.println(pos);
stepper.moveTo(pos);
stepper.run();
}
Будем двигать стол на 25000 шагов в две стороны. Функция map() создаст такой диапазон в зависимости от показаний потенциометра. Функция stepper.moveTo(pos) отправит данные на шаговый двигатель. А функция stepper.run() сообщит двигателю, что пора включаться.



Полный текст программы
#include <AccelStepper.h>
int val, pos;
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
AccelStepper stepper(8, IN1, IN3, IN2, IN4);
void setup(){
Serial.begin(9600);
stepper.setMaxSpeed(500.0);
stepper.setAcceleration(100.0);
stepper.setSpeed(500);
}
void loop(){
val = analogRead(A0);
pos = map(val, 0, 1023, -25000, 25000);
Serial.print("sensor1 = ");
Serial.print(val);
Serial.print("map = ");
Serial.println(pos);
stepper.moveTo(pos);
stepper.run();
}



Если выставить на потенциометре положение 512. То есть, центральное его положение. Плоттер займет центральное положение. Поворот ручки потенциометра в одну из сторон заставит двигатель вращаться соответственно и стол поедет вперед или назад. Библиотека AccelStepper.h позволяет задать двигателю ускорение, торможение и абсолютное значение.



Заключение
Мы собрали еще один проект. Сегодня мы использовали шаговый двигатель и лего, чтобы собрать небольшой плоттер. Мы еще вернемся к этому проекту в будущем, чтобы довести его до конца. И, конечно, будем использовать шаговые двигатели в других проектах.