Armado sobre el carro de los cartuchos de una impresora a chorro de tinta posee dos motores:
1 motor de corriente contínua común que es controlado digitalmente por Arduino.
1 motor paso a paso que actúa de dínamo y alimenta los Leds pues el eje del rotor está colocado de forma tal que ejerce fricción sobre la correa original de la impresora y al girar transforma la energía cinética en eléctrica.
Código de programación:
/*
Motor_PWM_Pote - Original de Miguel Grassi con Modificaciones.
Hace girar un motor de CC mediante un Puenta H conectado a los pines digitales
7 y 8 controlando la velocidad por PWM sobre el pin Enable del puente H en base
a la lectura de un potenciometro conectado al pin analogico 5
Dos leds, uno rojo y otro amarillo indican el sentido de giro del motor y con ello,
el de desplazamiento del carro que contiene los Leds.
*/
int ledRed = 13; // LED conectado al pin digital 13
int ledYellow = 12; // LED conectado al pin digital 12
int M1_A = 7; // Motor 1 entrada A
int M1_B = 8; // Motor 1 entrada B
int M1_Enable = 9; // Motor 1 Enable
int Pote = 5; // Lectura del Potenciometro
void setup(){
// Inicializa los pines de salida digital y entrada analogica para el pote
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode( M1_A, OUTPUT);
pinMode( M1_B, OUTPUT);
pinMode(M1_Enable, OUTPUT);
pinMode(Pote, INPUT);
}
void loop(){
digitalWrite(ledRed, HIGH); // enciende el led Rojo
digitalWrite( M1_A, HIGH); // Valores ON en A y OFF en B simultaneamente
digitalWrite( M1_B, LOW); // hacen girar el motor desplazando el carro al tope contrario
int valorPote = analogRead(Pote); // Lee el valor del potenciometro
int valorVeloc = map(valorPote, 0, 1023, 0, 255); //Convierte un valor entre 0 y 1023 (10 bits) al rango 0-255 (8 bits)
analogWrite(M1_Enable,valorVeloc); // y establece la velocidad del motor con ese valor
delay(750); // 750 milisegundos en los que esta encendido el motor
digitalWrite(ledRed, LOW); //apaga el led Rojo
digitalWrite(M1_Enable,LOW); //apaga el motor
delay(200); // 200 milisegundos de pausa, donde el motor permanece apagado
digitalWrite(ledYellow, HIGH); //enciende el led amarillo
digitalWrite(M1_A, LOW); // Valores OFF en A y ON en B simultaneamente
digitalWrite(M1_B, HIGH); // hacen girar el motor desplazando el carro en direccion a el
analogWrite(M1_Enable, valorVeloc); //establece la velocidad del motor indicada anteriormente
delay(450); //450 milisegundos de funcionamiento del motor en esa direccion
digitalWrite(ledYellow, LOW); //apaga el led amarillo
digitalWrite(M1_Enable,LOW); //detiene el motor
delay(800); //800 milisegundos de pausa para que arranque otra vez en direccion opuesta
}
la única diferencia con la realidad es que utilicé un "puente h - L293D", en lugar del que figura en fritzing
No hay comentarios:
Publicar un comentario