domingo, 16 de marzo de 2014

Arduino Car I de IV: Base , controlador y montaje

Ya comenté en un post anterior(primeros pasos y intenciones) mis primeros avances en la conexión del motor al coche y un programa de ejemplo, pero he decidido dar un poco más de detalle del proceso , ya que ahora el coche cuenta con mando IR, Sonar para esquivar obstáculos , siguelíneas , buzzer y led de estado y es mejor que organice el proceso por si alguien quiere seguir mis pasos (alguno creo que es mejor no seguirlo, por que los resultados son .... ;), pero de todo se aprende, y de los fallos más )

 ,. En fin Empecemos:


Uno de los montajes más repetidos en Arduino es el coche teledirigido con sensores. Hay kits de montaje que supera ampliamente los 100 dólares y que vienen con todo preparado para empezar a montar e incluso con programas de ejemplo. Arduino tiene su propia versión  a 180€

y en España BQ, ha empezado a hincarle el diente a este mercado por 84 Euros (Robótica Educativa):



Pero yo quiero aprender en como hacerlo desde cero , asi que compré el kit que ya os he comentado en Bangood y otros componentes (ver http://arduinoleaks.blogspot.com.es/2014/01/lista-de-la-compra-para-un-coche-arduino.html )  

  • Motor Shield compatible con adafruit   en banggood                    3,1€
  • Base para el coche robótico de banggood                                 8,5€
  • Siguelineas de 5 sensores ya integrados    de DX                     3,5€
  • Sensor de distancia    banggood                                                2€
  • IR y mando banggood                                                               3,5€
  • arduino (Ya lo tenia, pero en banggood estan a )                         8,5

En total el coste es de unos 30€. Ya veremos que para algunos usos la parte que es mejorable es la base robótica, por la calidad y tipo de motores usados.






La primera parte, la del montaje de la base no está exenta de interés, ya que como es costumbre en los chinos :(, no hay instrucciones!. En fin la única parte que requiere de probar y pensar es el par de  placas de metal que parece no tener sentido hasta que se intenta montar la rueda. Una imagen vale más que mil palabras: 


Una vez montado se coloca el arduino con el motor shield encima, y lo primero que se da uno cuenta es que el portapilas impide enchufar el usb y por lo tanto programarlo. Solución temporal (para siempre ;): un trozo de corcho blanco.



Después se trata de conectar las pilas al motor shield y hacer un pequeño programa de test usando las librerías de Adafruit: http://learn.adafruit.com/adafruit-motor-shield/overview


Básicamente la librería funciona de la siguiente manera: 

Incluimos la librería (previamente la copiamos en el directorio libraries de arduino) y creamos dos instancias de motores (hay instancias con distintas velocidades y consumos, pero la versión por defecto suele valer para el caso:

 #include <AFMotor.h>
  
  AF_DCMotor motorIzq(1);
  AF_DCMotor motorDer(2);

La salida de corriente de cada motor la hemos puesto en el motor shield donde marca M1 y M2 (tb se podría haber elegido M3 y M4, pero viene mas cerca de la posición de los motores estos dos y los cables no son muy largos): 





Par mover los motores hay que asignarles una velocidad, que puede variar durante el proceso de 0 a 255, pero con ciertas limitaciones, porque por debajo de 60-70 los motores no tienen fuerza para mover el peso y sólo andan en vacío. Esto dificulta ciertos movimientos delicados como el de seguimiento de lineas (ya hablaremos de esto más adelante). Otra características es que no tienen la misma velocidad de giro y hace falta calibrarlos , así que lo habitual es poner una velocidad que compense  los dos motores. En mi caso un motor es un 90% de la velocidad máxima del otro:
   
    velocidadD=250;
    velocidadI=250*calibracion; 
    motorIzq.setSpeed(velocidadI);
    motorDer.setSpeed(velocidadD);




Para que se muevan sólo hay que decirles el sentido (este ejemplo produce un giro rápido al mover cada rueda en un sentido):


  motorIzq.run(FORWARD);
  motorDer.run(BACKWARD);

Finalmente cuanto queremos parar los motores :

   motorIzq.run(RELEASE);  
   motorDer.run(RELEASE);

Algunas consideraciones :

 - La carga de las baterías afecta a la velocidad de los motores de manera importante, por lo que no es fácil tener una velocidad de giro conocida y ello es importante para saber cuanto giramos al esquivar un obstáculo o cuando seguimos una linea. El kit trae unas arandelas radiadas para colocar en las ruedas en las que se supone que se puede colocar un medidor de velocidad.:


 Pero son de baja calidad y se rompen al ponerlas y además no tengo aún estos medidores (aunque andan en camino...).

Siguiente Post: Añadiendo lógica medidor de Distancia con Radar  Sónico y pines libres en el Shield

1 comentario: