Ось для плоттера. Проекты. Ардуино.

Плоттер на ардуино
Плоттер из лего и Ардуино
Плоттер из лего и Ардуино

Привет! Продолжаем собирать проекты на ардуино. В одном из прошлых уроков мы рассмотрели работу шагового двигателя и подключение его к ардуино. Шаговые двигатели часто используются в робототехнике и станкостроении. А самые популярные станки с использованием таких двигателей сейчас это 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 позволяет задать двигателю ускорение, торможение и абсолютное значение.

Сцепление и стол плоттера
Сцепление и стол плоттера

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован.