Hola SrDonGato
Tengo hecho un programita para mover un motor de CC con variador de velocidad y cambio de giro que quizás te pueda valer, lo que pasa que no lo he probado todavía.
Si te funciona me lo dices. (y sinó también ;-) )
/*
Lee el valor de un potencimetro, y segun lo leido genera pulsos PWM para controlar la
velocidad de un motor.
En funcion de la posicion de un conmutador de 3 posiciones mueve el motor en un sentido, en el otro
o automaticamente cambia de sentido cada cierto tiempo.
Indica mediante dos Leds el sentido de giro (en modo automatico el led parpadea)
El circuito(Abataduino), utiliza un Arduino-ATtiny85:
* D0 a IN2-IN3 de L293D.
* D1 a IN1-IN4 de L293D.
* (D2)A1 Interruptor tres posiciones de modo
* D3(A3) Led de señalizacion
* (D4)A2 Potenciometro de velocidad
* D5(A0) Led se señalizacion
Creado el 2 Jul. 2011
por Iñigo Zuluaga
Este codigo es de dominio publico.
*/
// PINES UTILIZADOS
const int Motor1 = 0; // Salida analogica que mueve el motor
const int Motor2 = 1; // Salida analogica que mueve el motor
const int IntModoPin = A1; // Entrada analogica de seleccion de modo 0v=Adelante, 2,5v=Automatico, 5v=Atras
const int Led1 = 3; // Salida digital del Led1
const int PotVelPin = A2; // Entrada analogica a la que esta conectado el potenciometro de velocidad
const int Led2=5; // Salida digital del Led2
// CONSTANTES
const int VelMin=80; // Velocidad minima del motor (valor PWM)
const int VelMax=250; // Velocidad maxima del motor (valor PWM)
const int ContMaxSentido = 15000; // Valor de tiempo maximo para que cambie de sentido en modo automatico
//VARIABLES
int Cont=0; // Valor del contador de tiempo para cambio de sentido en automatico
boolean Adelante=true; // Valor de la variable sentido para automatico (True=Adelante, False=Atras)
int PotVelocidad = 0; // valor leido del potencimetro (0-1023)
int Velocidad = 0; // valor de salida del PWM (VelMin-VelMax)
int IntModo=0; // Valor leido del interruptor (0,~512,1023)
int Modo=0; // Valor de la variable de modo (0=Adelante, 1=Automatico, 2=Atras)
void setup()
{
pinMode(PotVelPin, INPUT); // Entrada analgica del Potenciometro de velocidad
pinMode(IntModoPin,INPUT); // Entrada analogica del interruptor tres posiciones de modo
pinMode(Motor1, OUTPUT); // Salida 1 Digital/PWM de control del motor
pinMode(Motor2, OUTPUT); // Salida 2 Digital/PWM de control del motor
pinMode(Led1,OUTPUT); // Salida Digital del Led de señalizacion Adelante
pinMode(Led2,OUTPUT); // Salida Digital del Led de señalizacion Atras
}
void loop()
{
IntModo=analogRead(IntModoPin); // leemos el interruptor de modo de funcionamiento (0-1023)
Modo = map(IntModo, 0, 1023, 0, 2); // Lo mapeamos a valores del motor.(0,1,2)
PotVelocidad = analogRead(PotVelPin); // Leemos el valor del potenciometro (0-1023)
Velocidad = map(PotVelocidad, 0, 1023, VelMin, VelMax); // Lo mapeamos a valores del motor (VelMin-VelMax)
if (Modo==0) //Adelante
{
Adelante=true;
}
else if (Modo==2) // Atras
{
Adelante=false;
}
else // 1=Modo automatico
{
digitalWrite (Led1,LOW); //Apaga los leds para que parpadee el led activo
digitalWrite (Led2,LOW);
Cont=Cont+1;
if (Cont> ContMaxSentido) //Si ha llegado al final del conteo
{
Cont=0; // Pone el contador a 0
Adelante=-Adelante; // y cambia de sentido
}
delay(200); //Espera para mantener el led apagado
}
MoverMotor(Adelante,Velocidad); //manda mover el motor y encender el led activo
delay(200); // Esperamos un poco antes de la siguiente pasada
}
//____________________________________________
// Mueve el motor en el sentido y velocidad indicados
void MoverMotor(boolean Sentido,int Velocidad)
{
if (Sentido) //mover hacia adelante
{
digitalWrite (Motor1, LOW);
analogWrite (Motor2, Velocidad);
digitalWrite (Led1,HIGH);
digitalWrite (Led2,LOW);
}
else //mover hacia atras
{
analogWrite (Motor1, Velocidad);
digitalWrite (Motor2, LOW);
digitalWrite (Led1,LOW);
digitalWrite (Led2,HIGH);
}
}
Notas:
Adjunto te paso el circuito para que veas el montaje en formato pdf (solo se ve si estás logeado)
Aunque esté para un ATtiny, vale para ATMega (Arduino)
Utiliza un potenciómetro con interruptor incorporado para el encendido y velocidad
Un interruptor de 3 posiciones (con resistencias añadidas) para el sentido: Adelante, Atrás y en el centro cambio automático de marcha al cabo de un tiempo.
La carátula es porque todo el circuito está dentro de una fuente de alimentación ATX, y los mandos en la tapa de la misma.
Algunos componentes se sueldan directamente sobre el potenciómetro o sobre el conmutador.
En el circuito se controlan dos motores que se mueven sincronizadamente (cada uno utiliza un puente H del L293D)
Saludos