Как получить фиксированное количество задержек через Arduino в шаговом двигателе?

Я должен остановить шаговый двигатель определенное количество раз (для одного полного оборота) с задержками в качестве параметров остановки. Предположим, мое требование состоит в том, чтобы остановить двигатель 20 раз, так что мое значение задержки должно быть равномерно распределено между этим числом (20 ) для полного одного оборота. Я использовал цикл for для этих остановок (20), но я получаю более 20. Мой код для arduino приведен ниже, где 8000 — количество шагов в одном обороте:

    #include <Stepper.h>

    const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
    // for your motor

    // initialize the stepper library on pins 8 through 11:
    Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);

    void setup() {
    // set the speed at 60 rpm:
    myStepper.setSpeed(60);
    // initialize the serial port:
    Serial.begin(9600);
    }

   // step one revolution  in one direction:
   void loop() {
   int noi=20;// set the no of images here
   for(int i=0;i<=noi;i++){
    delay(8000/noi);
    }
    Serial.println("clockwise");
    myStepper.step(stepsPerRevolution);

    }

person user3327290    schedule 22.12.2014    source источник
comment
Непонятно, что вы хотите, чтобы код делал. Пожалуйста, переформулируйте вопрос. Прямо сейчас loop() делает задержку на 8 секунд, а затем один раз включает двигатель. Переменная noi ничего не делает.   -  person uncleO    schedule 22.12.2014
comment
на самом деле мы сделали платформу, которая будет вращаться в соответствии с шагами шагового двигателя. Мы будем держать объект на этой платформе и делать снимки (20) одного и того же, вращая его 20 раз (или любое число), чтобы охватить полные 360 градусов. Как мне установить значение задержки, чтобы все 360 градусов были охвачены для 20 изображений.   -  person user3327290    schedule 22.12.2014


Ответы (1)


Ваш вопрос все еще сбивает с толку, но более ясен, чем раньше.

Похоже, у вас есть шаговый двигатель, который приводит в движение поворотный стол. Мотор делает 200 шагов за один оборот, но чтобы повернуть проигрыватель на один оборот, требуется 8000 шагов.

В каком-то смысле все, что имеет значение, — это число 8000. Чтобы заставить стол остановиться, вам нужно разделить 8000 на равные части, как вы, похоже, и пытались. Но вы потеряли }.

void loop() {
    int noi=20;// set the no of images here
    for(int i=0;i<=noi;i++){
        delay(8000/noi);
    } <<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE
    Serial.println("clockwise");
    myStepper.step(stepsPerRevolution);

} 

void loop() {
    int noi=20;// set the no of images here
    for(int i=0;i<=noi;i++){
        delay(enough_delay_to_take_image);  // or trigger image here?
        Serial.println("clockwise");
        myStepper.step(8000/noi);
    }   
} 

Единственное место, где stepsPerRevolution = 200 имеет значение, — это расчет скорости движения вместе с myStepper.setSpeed(60);. Вы действительно хотите, чтобы стол двигался так быстро? Это может привести к тому, что объект будет слишком сильно трястись.

      myStepper.setSpeed(1);

приведет к тому, что перемещение между изображениями займет 3 секунды. Если это слишком медленно,

      myStepper.setSpeed(3);

заставит перемещение между изображениями занять 1 секунду.

person uncleO    schedule 22.12.2014