viernes, 2 de diciembre de 2011

Primer tropiezo


Las primeras pruebas de movimiento autónomo topan con el primer problema serio: cuando el robot detecta un obstáculo, se detiene y da marcha atrás pero desde ese momento se queda sin potencia. El efecto es como si perdiera toda la energía. De hecho la batería se queda como inútil y sólo funciona con la corriente suministrada por el portátil a través del USB.

En el video se observa cómo el robot arranca a velocidad normal pero, tras detectar el obstáculo, intenta ir marcha atrás y se pierde toda la potencia.

Después de muchas pruebas parece ser que es un comportamiento anómalo del Arduino Motor Shield de DFRobot que sólo ocurre cuando se conmuta la marcha atrás a plena potencia.
Consigo solucionarlo acelerando poco a poco, es decir, llegando a la velocidad máxima de forma progresiva. El efecto es inapreciable pero al menos consigo esquivar el problema.  
/* 
  Intrucciones de retroceso del robot
 (acelera por partes para evitar bloqueo imprevisto del MotorShield) 
*/
void retrocede() {
  Serial.print("Retrocede...");
  analogWrite(Izquierdo, 0); // Paro de los motores
  analogWrite(Derecho, 0); 
  digitalWrite(M1, LOW); // Orden de marcha atrás
  digitalWrite(M2, LOW); 
  analogWrite(Izquierdo, 90); // Velocidad baja
  analogWrite(Derecho, 90);        
  delay(100); // Espera una decima de segundo
  analogWrite(Izquierdo, 175); // Velocidad media
  analogWrite(Derecho, 175);        
  delay(100); // Espera una decima de segundo
  analogWrite(Izquierdo, 255); // Velocidad máxima
  analogWrite(Derecho, 255); 
  Serial.println("OK");
}

No hay comentarios:

Publicar un comentario