miércoles, 23 de octubre de 2019

Evolución de 5 Programas de control del coche robótico

Hola a tod@s.

En este tema vamos a ver, en 5 fases, como ir añadiendo comandos a la programación del coche robótico controlado por bluetooth para empezar simplemente haciéndole avanzar y parar y terminar controlando todos sus movimientos además de la activación del modo autónomo de detección de obstáculos con ultrasonido y servomotor.

Empezaremos por realizar una aplicación móvil que mande diferentes letras a arduino mediante bluetooth que posteriormente nos servirán para decidir el modo de funcionamiento del coche.

Un ejemplo de diseño de la aplicación con app inventor podría ser este.


Y el código de la misma el que ya hemos visto con el listpicker de conectar al bluetooth y el botón de desconectar además del resto de botones que enviarán letras para cada acción:
Aunque en la imagen del diseño se ha incluido un slider de control del giro en este tema no veremos todavía como usarlo.





En arduino empezaremos por el programa más sencillo posible que hace simplemente avanzar al coche hacia adelante o pararlo.



Es imprescindible saber que led activa cada una de las ruedas en su correspondiente sentido de giro. Y también es importante que conectemos los cables a los pines PWM de arduino (alguno de los siguientes: 3,5,6,9,10,11) que nos van a permitir controlar la potencia de encendido más adelante.

En el siguiente programa daremos un paso más allá añadiendo la posibilidad de que el coche vaya hacia atrás y gire a izquierda o derecha.




En este punto es importante añadir la función "parar" que apaga los 4 leds y que usaremos antes de indicar cada movimiento ya que si del movimiento anterior arrastramos un encendido por ejemplo de derecha_atras y en el nuevo movimiento sin apagar ese led encendemos el de derecha_alante la rueda se quedará quieta ya que estará recibiendo esas dos señales al mismo tiempo.

El siguiente paso será añadir giros no en redondo si no en arco, para ello aprochamos la posibilidad que nos dan los pines PWM de encenderlos con un valor de intensidad entre 0 y 255. En el ejemplo encendemos una rueda al máximo de potencia y la otra a la mitad dandole un valor de encendido al pin digital de 127. Esto para los 4 giros amplios que nos quedan para controlar totalmente el robot.


El siguiente paso consistirá en añadir la posibilidad de que el coche se mueva de manera autónoma detectando obstáculos mediante el sensor de ultrasonidos colocado en la parte delantera.

Para ello añadiremos dos componentes a nuestro arduino, el sensor de ultrasonidos y el servo motor sobre el que va instalado.


Para poder programar este modo de funcionamiento tendremos que generar dos nueva variables, una que guardará la distancia y otra que guardará el modo de funcionamiento seleccionado. Se definen 5 modos de funcionamiento:
El modo 0 es en el que no se usa el ultrasonido y se controla el robot con las funciones explicada antes.
El modo 1 es en el que el coche al detectar un obstáculo a 20cm o menos gira siempre hacia la izquierda para evitarlo.
El modo 2 es en el que el coche al detectar un obstáculo a 20cm o menos gira siempre hacia la derecha para evitarlo.
El modo 3 es en el que el coche al detectar un obstáculo a 20cm o menos gira aleatoriamente a la izquierda o a la derecha para evitarlo.
El modo 4 es en el que el coche al detectar un obstáculo a 20cm o menos utilizará el servo motor para mover el ultrasonido a un lado y a otro para saber hacia que lado tiene menos obstáculos y dirigirse hacia ese lado.



Si el usuario manda un comando que activa alguna de las funciones que no son de modo ultrasonido es importante que añadamos en cada una de ellas el hecho de que el "ultra_mode" pasa a ser 0.


Para el resto de letras enviadas por la aplicación activaremos los diferentes modos de funcionamiento que hemos comentado.

Los modos 1 y 2 funcionan de manera sencilla:



El 3 incluye el uso de número aleatorios y redondeo:


Y por último el modo 4 nos llevará a crear dos nuevas variables para comparar las distancia y el uso del comando detach y attach del servo para evitar que este vibrando cuando no lo usamos. Como este comando no existe en bitbloq lo añadimos con el código verde que nos permite introducir código arduino directamente.




Con esta última versión del programa tendremos un buen repertorio de formas de controlar el coche robot tanto de manera directa como autónoma.

En temas posteriores veremos como poder modificar algunos parámetros como el ángulo de los giros para el modo dirigido o cambiar la distancia de detección de obstáculos para el modo autónomo.

Un saludo,
Raúl.

No hay comentarios:

Publicar un comentario