Вращение шагового двигателя вправо влево от нажатия кнопок с ускорением Arduino
- Информация о материале
- Обновлено: 24.03.2023, 17:00
- Опубликовано: 24.03.2023, 16:16
- Автор: DeniS
Цель: Заставить вращаться биполярный шаговый двигатель по часовой и против часовой стрелки при нажатии одной или другой кнопки. Управление из Arduino
Материалы и компоненты:
- Шаговый двигатель 28BYJ-48 5В передалн в биполярный (как переделать здесь >>>)
- Драйвер шагового двигателя A4988
- Arduino NANO
- кабель USB - дополнительное питание 5в
- конденсатор 47мкф 16В
- библиотека AccelStepper скачать >>> AccelStepper.h Команды
- Шаговый двигатель 28BYJ-48 5В однополярный как переделать в биполярный
- Как подключить шаговый двигатель от CD ROM к Arduino драйвер ШД A4988
Программа (скетч) управления шаговым двигателем двухполярным 28BYJ-48 5В
********************************************************************
// Подключаем библиотеку AccelStepper
#include <AccelStepper.h>
// Устанавливаем выводы
const int dirPin = 2;
const int stepPin = 3;
//Кнопки
const int buttonA0 = 14; //14 контакт он же А0
const int buttonA3 = 17; //17 контакт он же А3
int buttonState1 = 0;
int buttonState2 = 0;
int i1 = 0;
int i2 = 0;
// Определение типа интерфейса двигателя
#define motorInterfaceType 1
// Создаем экземпляр
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
void setup()
{
// Устанавливаем максимальную скорость, коэффициент ускорения,
// начальную скорость и целевую позицию
myStepper.setMaxSpeed(1000);
myStepper.setAcceleration(30);
myStepper.setSpeed(800);
// назначение контактов кнопок
pinMode(A0, INPUT_PULLUP); //А0 кнопка на GND
pinMode(A3, INPUT_PULLUP); //А3 кнопка на GND
}
// функция продления
void prodlit()
{
buttonState1 = digitalRead(buttonA0); //чтение состояния кнопки на пине A0
buttonState2 = digitalRead(buttonA3); //чтение состояния кнопки на пине A3
if (buttonState1 == LOW)
{
i1--; //декремент i1
}
if (buttonState2 == LOW)
{
i2--; //декремент i2
}
}
void loop()
{
// Изменение направления вращения, при нажатии одной из кнопок
buttonState1 = digitalRead(buttonA0);
if (buttonState1 == LOW) {
while (i1 < 1) { //Вращения мотора в одну сторону, пока нажата кнопка с ускорением
myStepper.move(1000); // Переместиться в относительно указанное положение
myStepper.run(); //Старт шагового двигателя с ускорением
i1++;
prodlit();
}
i1 = 0;
myStepper.stop(); //Немедленная остановка шагового двигателя
}
myStepper.setCurrentPosition (1); //Обнуление текущей позиции
buttonState2 = digitalRead(buttonA3);
if (buttonState2 == LOW) {
while (i2 < 1) { //Вращения мотора в другую сторону, пока нажата кнопка с ускорением
myStepper.move(-1000); // Переместиться в относительно указанное положение
myStepper.run(); //Старт шагового двигателя с ускорением
i2++;
prodlit();
}
i2 = 0;
myStepper.stop(); //Немедленная остановка шагового двигателя
}
myStepper.setCurrentPosition (1); //Обнуление текущей позиции
}
********************************************************************