hola gente tengo un problema, quiero controlar un stepper , un servo y un motorcito dc, hice el sketch uniendo varios ya que no tengo mucho conocimiento, pero logre hacerlos funcionar a los tres pero el stepper va muy lento. el servo y el motorcito dc funcionan correctamente
detallo funcionamiento de cada uno
- stepper 28BYJ-48: en el sketch se trata de controlar con potenciómetro los rpm de izquierda a derecha con REPOSO_SUPERIOR en 524 y REPOSO_INFERIOR 500
- servo : control basico de 0 a 180 con potenciómetro
- mini motor dc: control de velocidad común con potenciómetro
todo funciona pero el stepper va muy lento, cabe recalcar que si borro las partes de la librería que controlan el servo y el motorcito dc ahí el stepper recupera su velocidad normal pero al incluirle las demás librerías se pone lento de nuevo. capaz hay que borrar o simplificar algo en el sketch pero no tengo mucho conocimiento y por eso consulto en este foro.
desde ya agradezco su ayuda. saludos
#include <Stepper.h> // incluye libreria Stepper incorporada en IDE
#include <Servo.h>
#define PASOS 32 // reemplaza toda ocurrencia de PASOS por 32
#define IN1 8 // reemplaza toda ocurrencia de IN1 por 8
#define IN2 9 // reemplaza toda ocurrencia de IN2 por 9
#define IN3 10 // reemplaza toda ocurrencia de IN3 por 10
#define IN4 11 // reemplaza toda ocurrencia de IN4 por 11
#define REPOSO_SUPERIOR 524 // reemplaza toda ocurrencia de REPOSO_SUPERIOR por 524
#define REPOSO_INFERIOR 500 // reemplaza toda ocurrencia de REPOSO_INFERIOR por 500
int POT; // variable para almacenar el valor leído del potenciómetro
Stepper motor(PASOS, IN1, IN3, IN2, IN4);
Servo myservo; // Objeto Servo
int potPin = A1; // Pin analógico conectado al potenciómetro
int pos = 0; // Variable para almacenar la posición del servo
const int Potenciometro = A3;
const int MotorPWM = 3;
void setup(){
{
myservo.attach(7); // Conecta el servo al pin 9
}
{
Serial.begin(9600);
pinMode(MotorPWM, OUTPUT);
}
}
void loop()
{
POT = analogRead(A0); // lectura de la entrada analógica A0
if(POT > REPOSO_SUPERIOR) // si el valor es mayor a REPOSO_SUPERIOR
{
int velocidad = map(POT, 524, 1023, 100, 1000); // velocidad almacena el valor convertido a rango 5-500 RPM
motor.setSpeed(velocidad); // establece velocidad con la función setSpeed
motor.step(1); // indica realizar un paso en sentido horario
}
else if (POT < REPOSO_INFERIOR) // si el valor es menor a REPOSO_INFERIOR
{
int velocidad = map(POT, 500, 0, 100, 1000); // velocidad almacena el valor convertido a rango 5-500 RPM
motor.setSpeed(velocidad); // establece velocidad con la función setSpeed
motor.step(-1); // indica realizar un paso en sentido antihorario
}
else // a esta condición se llega si se encuentra en zona de reposo
{
digitalWrite(IN1, LOW); // nivel bajo LOW a IN1
digitalWrite(IN2, LOW); // nivel bajo LOW a IN2
digitalWrite(IN3, LOW); // nivel bajo LOW a IN3
digitalWrite(IN4, LOW); // nivel bajo LOW a IN4
}
{
pos = analogRead(potPin); // Lee el valor del potenciómetro (0-1023)
pos = map(pos, 0, 1023, 0, 180); // Mapea el valor a un rango de ángulo (0-180)
myservo.write(pos); // Mueve el servo a la posición deseada
delay(15); // Pequeña pausa
}
{
int valorPOT = analogRead(Potenciometro);
int valorPWM = map(valorPOT, 0, 1023, 0, 255);
analogWrite(MotorPWM, valorPWM);
Serial.print("Valor Potenciometro: ");
Serial.print(valorPOT);
Serial.print(" - Valor PWM: ");
Serial.println(valorPWM);
delay(10);
}
}