Работа шагового двигателя с реле

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Karaul, 6 май 2020.

  1. Karaul

    Karaul Нуб

    Добрый день!
    Прошу совета или помощи в довольно тривиальной ситуации. А ситуация такова:
    имеется плата ардуино, внешнее устройство (работает исправно).
    На 6 пин ардуино посылается сигнал, задача в том, чтобы программно на ардуино сделать так, чтобы в этот момент двигатель начал движение на расстояние Х, после чего двигатель должен остановиться, следом должен посылаться сигнал c ардуино на реле, скажем, пин A0. Важно, что если на пин 6 не подан сигнал, то ардуино не должна посылать сигнал на A0.

    Такой код у меня получилось написать, но работает он не так, как я предполагал: Двигатель прокручивается, после этого срабатывает устройство, но если я умышленно не пропишу включение реле, двигатель всё равно прокрутится. Я в этом деле новичок, понимаю, что ошибка может быть пустячная и смешная, но всё же будут рад любой помощи.

    Код (C++):
    #include <Stepper.h>
    #define PIN_RELAY A0 // Определяем пин, используемый для подключения реле
    #define parus 6
    int dot = 0;
    int bot = 0;
      Stepper motor(400, 11, 10);  // объект motor, 400 шагов на оборот

    void setup() {
      motor.setSpeed(2000);  // скорость 60 об. в мин.

    pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход
      digitalWrite(PIN_RELAY, LOW);

    pinMode(parus, INPUT); // Объявляем пин пин 6 как вход
      digitalWrite(parus, HIGH); //
    }

    void loop() {
    dot = digitalRead(PIN_RELAY);
    bot = digitalRead(parus);

    if (bot == 1 && dot == 0){
      motor.step(540);  // 5 оборотов (240 шагов) по часовой стрелке
      delay(100);
    }
    if (bot == 0 && dot == 1) {  digitalWrite(PIN_RELAY, HIGH); // Включаем реле - посылаем низкий уровень сигнала
      delay(100);
      digitalWrite(PIN_RELAY, LOW); // Отключаем реле - посылаем высокий уровень сигнала
      delay(700);
      }
    }
     
    Последнее редактирование: 6 май 2020
  2. vvr

    vvr Инженерище

    пришёл сигнал на дуню.
    это импульс какой то длительности?
     
  3. Karaul

    Karaul Нуб

    Приходит на 6 пин 4.9 В
     
  4. Karaul

    Karaul Нуб

    Прописал возможность отлеживать монитор порта, приходят значения 1/0 сменяющие себя поочерёдно
     
  5. b707

    b707 Гуру

    Попробуйте еще раз сформулировать алгоритм. Пока вы это сделали нечетко. поэтому и с кодом у вас проблемы.
    Я в вашем описании не вижу. как двигатель зависит от реле. Реле. судя по описанию - это выход. с какой стати вы с него читаете какие-то сигналы?