Hola a todos!
Os escribo porque necesito ayuda.
Hace tiempo que estroy trabajando en un prototipo con 12 steppers (5v) que dirigen distintos lásers.
Hasta ahora me ha funcionado muy bien, podia tener los 12 motores funcionando a la vez, activando/desactivando los módulos de láser, sin problemas.
Estaba trabajando con el IDE 1.8.7, con macOS High Sierra.
La alimentación de los motores 28byj48 con 5v, separada de la alimentación del Arduino.
Toda la programación construida a partir del ejemplo Accel_MultiStepper de la librería Adafruit Motor Shield V2
Esta semana abrí sin querer el patch con el IDE 1.8.3 y el sketch me pidió actualizar la libreria AF_Motor. Des de ese momento me está dando muchos problemas.
No puedo activar más de 6 motores a la vez, la alimentación es muy inestable, me disminuye hasta bajar la tensión y los motores se paran. Imposible activar los lásers y los leds y el módulo convertidor de 12v a 5v está que arde.
Creo que es un tema del IDE y de la compilación, pero no doy con el problema.
He vuelto a la versión 1.0.0 de AF_Motor, pero no conseguí nada.
Ando muy perdido con esta situación y ya no sé que tocar para recuperar el funcionamiento estable que había tenido siempre.
¿Alguién que me pueda ayudar con este problema?
Muchas gracias de antemano!
// Shows how to run three Steppers at once with varying speeds
//
// Requires the Adafruit_Motorshield v2 library
// https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library
// And AccelStepper with AFMotor support
// https://github.com/adafruit/AccelStepper
// This tutorial is for Adafruit Motorshield v2 only!
// Will not work with v1 shields
#include <AccelStepper.h>
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
// variables to hold the LED color
int B_rVal = 0;
int B_gVal = 0;
int B_bVal = 0;
int C1_rVal = 0;
int C1_gVal = 0;
int C1_bVal = 0;
int C2_rVal = 0;
int C2_gVal = 0;
int C2_bVal = 0;
// constants to name the pins
const int B_rPin = 3;
const int B_gPin = 4;
const int B_bPin = 5;
const int C1_rPin = 6;
const int C1_gPin = 7;
const int C1_bPin = 8;
const int C2_rPin = 9;
const int C2_gPin = 10;
const int C2_bPin = 11;
int relayLaser1 = 53; //BLAU
int relayLaser6 = 26; //BLAU
int relayLaser7 = 47; //BLAU
int relayLaser12 = 32; //BLAU
int relayLaser2 = 22; //VERD
int relayLaser3 = 51; //VERD
int relayLaser8 = 28; //VERD
int relayLaser9 = 48; //VERD
int relayLaser4 = 24; //VERMELL
int relayLaser5 = 49; //VERMELL
int relayLaser10 = 30; //VERMELL
int relayLaser11 = 43; //VERMELL
Adafruit_MotorShield V2_06(0x65);
Adafruit_MotorShield V2_05(0x64);
Adafruit_MotorShield V2_04(0x63);
Adafruit_MotorShield V2_03(0x62);
Adafruit_MotorShield V2_02(0x61);
Adafruit_MotorShield V2_01(0x60);
// Connect two steppers with 200 steps per revolution (1.8 degree)
// to the top shield
Adafruit_StepperMotor *myStepper1 = V2_01.getStepper(200, 1);
Adafruit_StepperMotor *myStepper2 = V2_01.getStepper(200, 2);
Adafruit_StepperMotor *myStepper3 = V2_02.getStepper(200, 1);
Adafruit_StepperMotor *myStepper4 = V2_02.getStepper(200, 2);
Adafruit_StepperMotor *myStepper5 = V2_03.getStepper(200, 1);
Adafruit_StepperMotor *myStepper6 = V2_03.getStepper(200, 2);
Adafruit_StepperMotor *myStepper7 = V2_04.getStepper(200, 1);
Adafruit_StepperMotor *myStepper8 = V2_04.getStepper(200, 2);
Adafruit_StepperMotor *myStepper9 = V2_05.getStepper(200, 1);
Adafruit_StepperMotor *myStepper10 = V2_05.getStepper(200, 2);
Adafruit_StepperMotor *myStepper11 = V2_06.getStepper(200, 1);
Adafruit_StepperMotor *myStepper12 = V2_06.getStepper(200, 2);
// you can change these to DOUBLE or INTERLEAVE or MICROSTEP!
// wrappers for the first motor!
void forwardstep1() {
myStepper1->onestep(FORWARD, INTERLEAVE);
}
void backwardstep1() {
myStepper1->onestep(BACKWARD, INTERLEAVE);
}
// wrappers for the second motor!
void forwardstep2() {
myStepper2->onestep(FORWARD, INTERLEAVE);
}
void backwardstep2() {
myStepper2->onestep(BACKWARD, INTERLEAVE);
}
void forwardstep3() {
myStepper3->onestep(FORWARD, INTERLEAVE);
}
void backwardstep3() {
myStepper3->onestep(BACKWARD, INTERLEAVE);
}
// wrappers for the second motor!
void forwardstep4() {
myStepper4->onestep(FORWARD, INTERLEAVE);
}
void backwardstep4() {
myStepper4->onestep(BACKWARD, INTERLEAVE);
}
void forwardstep5() {
myStepper5->onestep(FORWARD, INTERLEAVE);
}
void backwardstep5() {
myStepper5->onestep(BACKWARD, INTERLEAVE);
}
// wrappers for the second motor!
void forwardstep6() {
myStepper6->onestep(FORWARD, INTERLEAVE);
}
void backwardstep6() {
myStepper6->onestep(BACKWARD, INTERLEAVE);
}
void forwardstep7() {
myStepper7->onestep(FORWARD, INTERLEAVE);
}
void backwardstep7() {
myStepper7->onestep(BACKWARD, INTERLEAVE);
}
// wrappers for the second motor!
void forwardstep8() {
myStepper8->onestep(FORWARD, INTERLEAVE);
}
void backwardstep8() {
myStepper8->onestep(BACKWARD, INTERLEAVE);
}
void forwardstep9() {
myStepper9->onestep(FORWARD, INTERLEAVE);
}
void backwardstep9() {
myStepper9->onestep(BACKWARD, INTERLEAVE);
}
void forwardstep10() {
myStepper10->onestep(FORWARD, INTERLEAVE);
}
void backwardstep10() {
myStepper10->onestep(BACKWARD, INTERLEAVE);
}
void forwardstep11() {
myStepper11->onestep(FORWARD, INTERLEAVE);
}
void backwardstep11() {
myStepper11->onestep(BACKWARD, INTERLEAVE);
}
void forwardstep12() {
myStepper12->onestep(FORWARD, INTERLEAVE);
}
void backwardstep12() {
myStepper12->onestep(BACKWARD, INTERLEAVE);
}
// Now we'll wrap the 3 steppers in an AccelStepper object
AccelStepper stepper1(forwardstep1, backwardstep1);
AccelStepper stepper2(forwardstep2, backwardstep2);
AccelStepper stepper3(forwardstep3, backwardstep3);
AccelStepper stepper4(forwardstep4, backwardstep4);
AccelStepper stepper5(forwardstep5, backwardstep5);
AccelStepper stepper6(forwardstep6, backwardstep6);
AccelStepper stepper7(forwardstep7, backwardstep7);
AccelStepper stepper8(forwardstep8, backwardstep8);
AccelStepper stepper9(forwardstep9, backwardstep9);
AccelStepper stepper10(forwardstep10, backwardstep10);
AccelStepper stepper11(forwardstep11, backwardstep11);
AccelStepper stepper12(forwardstep12, backwardstep12);
void setup()
{
pinMode(relayLaser1, OUTPUT);
pinMode(relayLaser2, OUTPUT);
pinMode(relayLaser3, OUTPUT);
pinMode(relayLaser4, OUTPUT);
pinMode(relayLaser5, OUTPUT);
pinMode(relayLaser6, OUTPUT);
pinMode(relayLaser7, OUTPUT);
pinMode(relayLaser8, OUTPUT);
pinMode(relayLaser9, OUTPUT);
pinMode(relayLaser10, OUTPUT);
pinMode(relayLaser11, OUTPUT);
pinMode(relayLaser12, OUTPUT);
digitalWrite(relayLaser1, LOW);
digitalWrite(relayLaser2, LOW);
digitalWrite(relayLaser3, LOW);
digitalWrite(relayLaser4, LOW);
digitalWrite(relayLaser5, LOW);
digitalWrite(relayLaser6, LOW);
digitalWrite(relayLaser7, LOW);
digitalWrite(relayLaser8, LOW);
digitalWrite(relayLaser9, LOW);
digitalWrite(relayLaser10, LOW);
digitalWrite(relayLaser11, LOW);
digitalWrite(relayLaser12, LOW);
V2_01.begin();
V2_02.begin();
V2_03.begin();
V2_04.begin();
V2_05.begin();
V2_06.begin();
stepper1.setMaxSpeed(300.0);
stepper1.setAcceleration(100.0);
stepper1.moveTo(500);
stepper2.setMaxSpeed(300.0);
stepper2.setAcceleration(100.0);
stepper2.moveTo(500);
stepper3.setMaxSpeed(300.0);
stepper3.setAcceleration(100.0);
stepper3.moveTo(500);
stepper4.setMaxSpeed(300.0);
stepper4.setAcceleration(100.0);
stepper4.moveTo(500);
stepper5.setMaxSpeed(300.0);
stepper5.setAcceleration(100.0);
stepper5.moveTo(500);
stepper6.setMaxSpeed(300.0);
stepper6.setAcceleration(100.0);
stepper6.moveTo(500);
stepper7.setMaxSpeed(300.0);
stepper7.setAcceleration(100.0);
stepper7.moveTo(500);
stepper8.setMaxSpeed(300.0);
stepper8.setAcceleration(100.0);
stepper8.moveTo(500);
stepper9.setMaxSpeed(300.0);
stepper9.setAcceleration(100.0);
stepper9.moveTo(500);
stepper10.setMaxSpeed(300.0);
stepper10.setAcceleration(100.0);
stepper10.moveTo(500);
stepper11.setMaxSpeed(300.0);
stepper11.setAcceleration(100.0);
stepper11.moveTo(500);
stepper12.setMaxSpeed(300.0);
stepper12.setAcceleration(100.0);
stepper12.moveTo(500);
// declare the pinModes pels LEDS
pinMode(B_rPin, OUTPUT);
pinMode(B_gPin, OUTPUT);
pinMode(B_bPin, OUTPUT);
pinMode(C1_rPin, OUTPUT);
pinMode(C1_gPin, OUTPUT);
pinMode(C1_bPin, OUTPUT);
pinMode(C2_rPin, OUTPUT);
pinMode(C2_gPin, OUTPUT);
pinMode(C2_bPin, OUTPUT);
}
void loop()
{
//LASERS
//BLAUS
digitalWrite(relayLaser1, HIGH);
digitalWrite(relayLaser6, HIGH);
digitalWrite(relayLaser7, HIGH);
digitalWrite(relayLaser12, HIGH);
//VERDS
digitalWrite(relayLaser2, HIGH);
digitalWrite(relayLaser3, HIGH);
digitalWrite(relayLaser8, HIGH);
digitalWrite(relayLaser9, HIGH);
//VERMELLS
digitalWrite(relayLaser4, HIGH);
digitalWrite(relayLaser5, HIGH);
digitalWrite(relayLaser10, HIGH);
digitalWrite(relayLaser11, HIGH);
//LEDS BRAÇ
B_rVal=255;
B_gVal=255;
B_bVal=255;
//LEDS CÚPULA 1
C1_rVal=255;
C1_gVal=255;
C1_bVal=255;
//LEDS CÚPULA 2
C2_rVal=255;
C2_gVal=255;
C2_bVal=255;
// Change direction at the limits
if (stepper1.distanceToGo() == 0)
stepper1.moveTo(-stepper1.currentPosition());
if (stepper2.distanceToGo() == 0)
stepper2.moveTo(-stepper2.currentPosition());
if (stepper3.distanceToGo() == 0)
stepper3.moveTo(-stepper3.currentPosition());
if (stepper4.distanceToGo() == 0)
stepper4.moveTo(-stepper4.currentPosition());
if (stepper5.distanceToGo() == 0)
stepper5.moveTo(-stepper5.currentPosition());
if (stepper6.distanceToGo() == 0)
stepper6.moveTo(-stepper6.currentPosition());
if (stepper7.distanceToGo() == 0)
stepper7.moveTo(-stepper7.currentPosition());
if (stepper8.distanceToGo() == 0)
stepper8.moveTo(-stepper8.currentPosition());
if (stepper9.distanceToGo() == 0)
stepper9.moveTo(-stepper9.currentPosition());
if (stepper10.distanceToGo() == 0)
stepper10.moveTo(-stepper10.currentPosition());
if (stepper11.distanceToGo() == 0)
stepper11.moveTo(-stepper11.currentPosition());
if (stepper12.distanceToGo() == 0)
stepper12.moveTo(-stepper12.currentPosition());
stepper1.run();
stepper2.run();
stepper3.run();
stepper4.run();
stepper5.run();
stepper6.run();
stepper7.run();
stepper8.run();
stepper9.run();
stepper10.run();
stepper11.run();
stepper12.run();
}