Помогите пожалуйста новичку 28BYJ-48 + UNL2003 + AccelStepper.h

ArduinoUser
Offline
Зарегистрирован: 05.12.2016

   Помогите пожалуйста новичку-ардуинщику. arduino pro mini 168 5v + UNL2003 + 28BYJ-48 5v

Не могу разобраться как заставить шаговик вращаться в заданом направлнии на заданое растояние, потом ждать определенное время ,затем снова вращаться но уже в противоположном направлении на заданое растояние.

В интернете нарыл что для коректной работы UNL2003+28BYJ-48 нужно использовать библиотеку AccelStepper.h

вот код которий я нарыл. здесь шаговик делает четверть оборота, останавливаеться и вращаеться в обратную сторону:

#include<AccelStepper.h>
#define HALFSTEP 8   
 
// Определение пинов для управления двигателем
#define motorPin1  8 // IN1 на 1-м драйвере ULN2003
#define motorPin2  9 // IN2 на 1-м драйвере ULN2003
#define motorPin3  10 // IN3 на 1-м драйвере ULN2003
#define motorPin4  11 // IN4 на 1-м драйвере ULN2003
 
// Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4 
// для использования AccelStepper с 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
 
void setup(){
  // Задаём максимальную скорость двигателя
  stepper1.setMaxSpeed(1000.0);
  // Задаём ускорение двигателя
  stepper1.setAcceleration(100.0);
  // Установим скорость в шагах за секунду
  stepper1.setSpeed(200);
  // Перемещаем в абсолютно указанное положение
  stepper1.moveTo(360);
}
 
void loop(){
  // Изменяем направление, если шаговик достигает заданного положения
  if(stepper1.distanceToGo()==0)
    stepper1.moveTo(-stepper1.currentPosition());
  stepper1.run();
}

нужно сделать чтоб шаговик после первого вращения остановился и ждал какое-то время, затем продолжал вращатся в обратную сторону. Любые попытки сделать остановку через delay(2000); приводят только к замедлению вращения двигателя.

 

Буду очень признателен за помощ.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArduinoUser пишет:

 Любые попытки сделать остановку через delay(2000); приводят только к замедлению вращения двигателя.

И где эти "любые попытки"? Показывайте, что ВЫ сделали, а не скачанный скетч.

ArduinoUser
Offline
Зарегистрирован: 05.12.2016
void loop(){
  // Изменяем направление, если шаговик достигает заданного положения
  if(stepper1.distanceToGo()==0)
    stepper1.moveTo(-stepper1.currentPosition());
  stepper1.run();
  delay(2000);
}

двигатель,очень медленно растручиваеться ето видно и по індикаторам фаз на драйвере

 
void loop(){
  // Изменяем направление, если шаговик достигает заданного положения
  if(stepper1.distanceToGo()==0)
    stepper1.moveTo(-stepper1.currentPosition()); 
    delay(2000);
  stepper1.run();
  
}

то же самое

void loop(){
  // Изменяем направление, если шаговик достигает заданного положения
  if(stepper1.distanceToGo()==0)
  delay(2000);
    stepper1.moveTo(-stepper1.currentPosition()); 
    
  stepper1.run();
  
}

здесь двигатель воопще не работает(не горят светодиоды на драйвере)

 

ArduinoUser
Offline
Зарегистрирован: 05.12.2016

решил.

#include<AccelStepper.h>
#define HALFSTEP 8   

#define motorPin1  8
#define motorPin2  9
#define motorPin3  10
#define motorPin4  11

AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup(){
  stepper1.setMaxSpeed(1000.0);
  stepper1.setAcceleration(100.0);
    
}
 
void loop(){
         
    stepper1.runToNewPosition(1000);
delay (3000);
    
    stepper1.runToNewPosition(0);
delay (3000);
  
}

 

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Я не работал с данной библиотекой, но попробуйте так

void loop()
{    
    stepper.runToNewPosition(0);
	delay(2000);
    stepper.runToNewPosition(500);
	delay(2000);
    stepper.runToNewPosition(100);
	delay(2000);
    stepper.runToNewPosition(120);
	delay(2000);
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ArduinoUser пишет:

void loop(){
  // Изменяем направление, если шаговик достигает заданного положения
  if(stepper1.distanceToGo()==0)
    stepper1.moveTo(-stepper1.currentPosition());
  stepper1.run();
  delay(2000);
}

двигатель,очень медленно растручиваеться ето видно и по індикаторам фаз на драйвере

 
void loop(){
  // Изменяем направление, если шаговик достигает заданного положения
  if(stepper1.distanceToGo()==0)
    stepper1.moveTo(-stepper1.currentPosition()); 
    delay(2000);
  stepper1.run();
  
}

то же самое

void loop(){
  // Изменяем направление, если шаговик достигает заданного положения
  if(stepper1.distanceToGo()==0)
  delay(2000);
    stepper1.moveTo(-stepper1.currentPosition()); 
    
  stepper1.run();
  
}

здесь двигатель воопще не работает(не горят светодиоды на драйвере)

 

Хорошо, что решил, только Вы не решили проблему. Вы методом тыка заставили её хоть как-то сработать. Чуть новая задача и у Вас опять беда.

А проблема Ваша в том, что Вы совершенно не знаете языка. Например, понятия не имеете для чего нужны фигурные скобки и как их использовать.

Почитайте что-ибудь по языку, иначе эта проблема будет возвращаться с "каждой новой строчкой кода".