Официальный сайт компании Arduino по адресу arduino.cc
Управление двумя шаговыми двигателями 28BYJ-48 5V одновременно по сигналу прерывания.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Нужна помощь. В 2017 году сконструировал скетч: по сигналу прерывания одновременно вращались шаговики -28BYJ-48 5v, один вправо на 140 град., другой влево на -140 град. (Открывались две половинки ворот.) Через некоторое время то же по сигналу прерывания две половинки ворот одновременно закрывались. После перерыва в работе полтора года в 2019 г вновь пытался запустить скетч. Но компиляция не проходила. Появились ошибки. Загрузил последнюю редакцию IDE, новые библиотеки. Компиляция стала проходить без замечаний, но скетч стал работать не правильно: на открытие стал работать только один шаговик (ШД). По второму сигналу прерывания на закрытие работал уже другой ШД. Первый не двигался. И так далее. Не могу разобраться, что произошло в скетче. Прошу помочь. Работал с Arduino Mega и Мотор Шилдом. В скетче ещё включён код на проигрование колокольных звонов. Привожу сам скетч.
#include <MultiStepper.h> #include <AFMotor.h> #include <AccelStepper.h> #include <DFPlayer_Mini_Mp3.h> volatile byte intruder; // two stepper motors one on each port AF_Stepper motor1(64, 1); AF_Stepper motor2(64, 2); // you can change these to DOUBLE or INTERLEAVE or MICROSTEP! // wrappers for the first motor! void forwardstep1() { motor1.onestep(FORWARD, SINGLE); } void backwardstep1() { motor1.onestep(BACKWARD, SINGLE); } // wrappers for the second motor! void forwardstep2() { motor2.onestep(FORWARD, SINGLE); } void backwardstep2() { motor2.onestep(BACKWARD, SINGLE); } // Motor shield has two motor ports, now we'll wrap them in an AccelStepper object AccelStepper stepper1(forwardstep1, backwardstep1); AccelStepper stepper2(forwardstep2, backwardstep2); void setup() { Serial.begin (9600); mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module delay (100); mp3_set_volume (20); delay (100); mp3_play (1); // Проигрываем "mp3/0001.mp3" attachInterrupt (0,intruder_detect,FALLING); //Initialize the intterrupt pin for the motion sensor (Arduino digital pin 2) intruder = 0; //Инициализировать вывод прерывания для датчика движения (цифровой контакт 2 Arduino) stepper1.setMaxSpeed(120.0); stepper1.setAcceleration(100.0); stepper1.moveTo(750); stepper2.setMaxSpeed(100.0); stepper2.setAcceleration(100.0); stepper2.moveTo(-760); } void loop() { stepper1.run(); stepper2.run(); } void intruder_detect() //This function is called whenever an intruder is detected by the arduino { intruder++; { Serial.begin (9600); mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module delay (100); mp3_set_volume (20); delay (100); mp3_play (1); // Проигрываем "mp3/0001.mp3" stepper1.setMaxSpeed(100.0); stepper1.setAcceleration(80.0); stepper1.moveTo(-40); stepper2.setMaxSpeed(120.0); stepper2.setAcceleration(80.0); stepper2.moveTo(-7); } stepper1.run(); stepper2.run(); }
Странно, что он вообще работал.
вы бы посмотрели примеры в библиотеке AccelStepper и поигрались с ними, а потом за проект брались.
jur47mih04bryu, а зачем Вы поворачиваете шаговики в разные стороны?
Вращайте в одну и ту же, и тогда управление существенно упростится. (возможно, поменяь местами обмотки)