domingo, 9 de junio de 2013

serruchoDinamo - 1° dispositivo {sonoluz III}

Luego de varias horas probando cosas finalmente nace el primer "robot" de iluminación mínima.

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