Вращение шаговым двигателем кнопкой

Chester_Maho
Offline
Зарегистрирован: 27.12.2019

Задача максимально простая, но я не могу найти на форуме ответа. У всех задачи сложнее и не то что мне нужно

Нажал на кнопку двигатель крутится в одну сторону. Нажал на другую кнопку крутиться в другую сторону. Это все. Единственное, может быть я сам уже разберусь и смогу переделать не на кнопки, а на джойстик. Это вопрос уже к органам управления, пока я его еще не решил) Пока что хотя бы с кнопками разобраться 

Я в ардуино не эксперт и в программировании тоже, а вот задача такая есть и ардуино есть. 

Буду благодарен за помощь

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А как вы пытались? Давайте свой код, которым пытались крутить шаговым, пока без кнопок.

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

DIYMan пишет:

А как вы пытались? 

Нипанятливый какой :-)

Chester_Maho
Offline
Зарегистрирован: 27.12.2019

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

#include <Stepper_28BYJ.h> //Библиотека для управления мотором
int val=0;
const int stepsPerRevolution = 4078; // количество шагов на один оборот
const int button = 7;
const int led = 13;
Stepper_28BYJ myStepper_28BYJ(stepsPerRevolution, 2,3,4,5); // инициализируем библиотеку Stepper_28BYJ на выходы 2-5
int stepCount = 0; // количество шагов, которые мотор уже сделал   
 void setup()    
 {  
      pinMode(led, OUTPUT);         
      pinMode (button, INPUT);
 }
 
 void loop()
 {
      if(digitalRead(button)==HIGH)//если кнопка нажата ...
      {
        val++;// прибавляем к переменной 1 при каждой смене цикла.    
      delay(10);//небольшая защита от "дребезга" контактов кнопки
      }
      if(val>=1)
      {
        digitalWrite(led,!digitalRead(led));//инвертируем состояние пина
      if(digitalRead(led)==HIGH) //если светодиод работает ...
      {
        myStepper_28BYJ.step(1);  // делаем 1 шаг
        delay(5);
        stepCount++; //добавляем количество шагов по одному т.к. процедура блокирует процесс
        } 
        val=0;
      }
           
           
 }

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

И что в приведённом коде вам непонятно? Там даже есть комментарии. Если чуть-чуть подумать - то можно доработать под две кнопки.

Chester_Maho
Offline
Зарегистрирован: 27.12.2019

Непонятно следующее
Led не нужен, можно удалить, окей
 

if(digitalRead(button)==HIGH)//если кнопка нажата ...
      {
        val++;// прибавляем к переменной 1 при каждой смене цикла. 

"прибавляем к переменной 1 при каждой смене цикла. " что это значит? Что куда мы прибавляем?

      digitalWrite(led,!digitalRead(led));//инвертируем состояние пина
      if(digitalRead(led)==HIGH) //если светодиод работает ..

Это вообще что? И если светодиод не нужен, нужны ли эти строчки? И если я их удалю, оно работать будет?

 myStepper_28BYJ.step(1);  // делаем 1 шаг

1 шаг куда?

stepCount++; //добавляем количество шагов по одному т.к. процедура блокирует процесс

Какая процедура блокирует какой процесс?

val=0;
Почему val=0?

Разьяснение всех этих вопросов ни мне, ни вам не выгодно) И долго и бесполезно) Мне то от ардуино надо только эту штуку сделать

Проще, покажите что и как нужно исправить, и то меньше текста и дискуссий будет)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Если вам не надо понимать, а надо только сделать - есть раздел "ищу исполнителя". Там на возмездной основе вам реализуют все ваши хотелки.

sadman41
Offline
Зарегистрирован: 19.10.2016

А удастся ли на джойстик переделать, если уже даже на начальном этапе проблемы...

Chester_Maho
Offline
Зарегистрирован: 27.12.2019

Я понял, буду разбираться

Chester_Maho
Offline
Зарегистрирован: 27.12.2019

Не знаю, если захотеть, то удастся

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

sadman41 пишет:
А удастся ли на джойстик переделать, если уже даже на начальном этапе проблемы...

Ну что за риторические вопросы :)

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

Chester_Maho пишет:

Так он крутится в одну сторону при нажатии, но очень медленно и только в одну сторону одной кнопкой

https://youtu.be/dHFiCSxX4ec?t=24

Chester_Maho пишет:

Разьяснение всех этих вопросов ни мне, ни вам не выгодно) И долго и бесполезно) Мне то от ардуино надо только эту штуку сделать

Тогда заказывайте эту штуку на коммерческой основе и не мучайтесь.

Chester_Maho пишет:

Проще, покажите что и как нужно исправить, и то меньше текста и дискуссий будет)

Кому проще? Мне - нет. Показывать что-то человеку, который не понимает и не хочет понимать - то ещё удовольствие.

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

sadman41 пишет:
А удастся ли на джойстик переделать, если уже даже на начальном этапе проблемы...

А чего не удастся-то? Я вот на днях тормозные колодки в авто поменял, хотя даже не знаю как они выглядят.

DIYMan пишет:
есть раздел "ищу исполнителя".

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ЕвгенийП пишет:
А чего не удастся-то? Я вот на днях тормозные колодки в авто поменял, хотя даже не знаю как они выглядят.
А открыли бы тему на "тормозном" форуме , то узнали бы все. И как колодки выглядят, и как меняют, и как выглядят люди,которые меняют колодки, ну и наконец как выглядят ники людей на форуме, которые думают что знают как меняют колодки.  А так подъехал, заплатил,поменяли, уехал.Романтизма нету.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Согласен с Квоном. Никакой романтики!

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

qwone пишет:

А открыли бы тему на "тормозном" форуме , то узнали бы все. 

Вот шо да, то да! Заодно ещё узнал бы куда там посылают за фразу "вам тут на пять минут работы, а вы за бабки сразу, я вот типа на ардуино ру бесплатно консультирую" :-)))

gena321
Offline
Зарегистрирован: 19.01.2019

Chester_Maho пишет:

Задача максимально простая, но я не могу найти на форуме ответа. У всех задачи сложнее и не то что мне нужно

Нажал на кнопку двигатель крутится в одну сторону. Нажал на другую кнопку крутиться в другую сторону. Это все. Единственное, может быть я сам уже разберусь и смогу переделать не на кнопки, а на джойстик. Это вопрос уже к органам управления, пока я его еще не решил) Пока что хотя бы с кнопками разобраться 

Я в ардуино не эксперт и в программировании тоже, а вот задача такая есть и ардуино есть. 

Буду благодарен за помощь

https://photoscs.wordpress.com/2014/03/20/arduino-stepper-code-basic/

// define a constant value named stepPin and assign the value 9 to it - this value will not change during our code
// this assumes digital pin 9 of your Arduino is attached to the step input of your driver
#define stepPin 9
 
// define a constant value named dirPin and assign the value 8 to it - this value will not change during our code
// this assumes digital pin 8 of your Arduino is attached to the step input of your driver
#define dirPin 8
 
// define a variable, name stepCounter, which keeps track of how many steps we've taken - this value will change during our code based on position
byte stepCount = 0;
 
// setup() loop, the Arduino only runs through this once
void setup() {
  // digital pins on the Arduino can only be either set as an output or input - in our case we want to send data to the driver, so we choose output
  pinMode(stepPin , OUTPUT);
  pinMode(dirPin , OUTPUT);
 
  // let's set an initial value of low to both our step and dir pins, we could easily write false or 0 instead of LOW
  digitalWrite(stepPin , LOW);
  digitalWrite(dirPin , LOW);
}
 
// loop() loop, the Arduino continuously cycles through this as fast as it can
void loop() {
 
  if (stepCount <= 100) {
    digitalWrite(dirPin, HIGH);  // move in this direction if we've moved less than 100 steps
  } else {
    digitalWrite(dirPin, LOW); // move in the opposite direction if we've moved 100 steps or more
  }
  stepCount = stepCount + 1;  // increment how far we've stepped by 1 step
 
  // once we've moved a total of 200 steps, set our stepCounter to 0 so that we can repeat the move
  if (stepCount > 200) {
    stepCount = 0;
  }
 
  // set a HIGH value to our step pin, this turns the voltage on for that pin
  digitalWrite(stepPin , HIGH);
 
  // let's wait here for 50 milliseconds; note the units, this means 0.05s
  delay(50);
 
  // let's set our step pin to false, this turns the voltage off for that pin and gives us the on/off cycle we need
  digitalWrite(stepPin , LOW);
 
  // wait another 50 milliseconds after which time we loop back to the beginning of the loop() loop
  delay(50);
}

 

gena321
Offline
Зарегистрирован: 19.01.2019

Добавить кнопку и поменять поменять строку #26 , 

 if (digitalRead(7) == HIGH)

 

agnec2001
Offline
Зарегистрирован: 08.11.2019

gena321 пишет:

 

/ define a constant value named stepPin and assign the value 9 to it - this value will not change during our code
// this assumes digital pin 9 of your Arduino is attached to the step input of your driver
#define stepPin 9

Класс !

Чел с русскими комментариями врубаться не хочет, а ему ещё и на инглише загадку подкинули :)

Реально бесит, когда с таким уровнем знаний в "песочницу" идти не хотят :(