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.

lunes, 7 de octubre de 2019

Proyecto Ascensor. 4º TPRPT

Hola a tod@s.

Para realizar el proyecto del ascensor hemos comenzado repasando las fases del proyecto tecnológico y la diferente documentación a preparar a la hora de afrontar un proyecto.
Para repasar el diseño y presentación de ideas mediante croquis hemos practicado dibujando estos dos ejemplos antes de presentar nuestro propio croquis con la propuesta del ascensor.


Croquis obtenido del pdf de la web 


 

Croquis obtenido del pdf de la web

Hemos elegido estos dos ejemplos porque entre ambos reúnen las características más importantes que debe tener un croquis completo, el cual nos debe informar de la forma del objeto, su partes, funcionamiento y medidas o cotas.

Como decíamos, una vez realizados los dos croquis de ejemplo hemos realizado el de nuestra propuesta de diseño para el ascensor teniendo en cuenta que debe ser un ascensor que tenga planta baja y dos plantas más por encima, cada una de ellas con paradas a 10cm y 20cm. 

Para la evaluación de las diferentes fases del proyecto en la primera parte se ha creado la siguiente rúbrica:


La rúbrica incluye todas las partes referentes a la elaboración de la documentación del proyecto, construcción de la maqueta y programación de la misma.

A continuación vamos a ver los primeros pasos de programación de arduino usando bitbloq: https://bitbloq.bq.com/#/ para conseguir programar nuestro ascensor de 3 paradas (planta baja, primera y segunda).

Lo primero como siempre será comprobar si somos capaces de crear y cargar el clásico programa de parpadeo (blink) de un led conectado al pin 13 de nuestra placa:



Con el fin de aprender un nivel más avanzado de programación y practicar con el uso de las variables nos hemos propuesto el reto de conseguir que nuestro led haga cada vez parpadeos más lentos. En la siguiente imagen puede verse una forma de solucionar este ejercicio:


Por último, para iniciarnos en el uso de los condicionales, nos hemos puesto el reto de conseguir que  desde los 100ms de parpadeo el led parpadee mas lento y que cuando haga un parpadeo de encendido 1000ms pase a ir cada vez más rápido hasta los 100ms y así sucesivamente.


El siguiente paso para iniciarnos en los componentes de nuestro semáforo será la programación de los botones/pulsadores.
Es muy importante aprender a conectar el pulsador a la protoboard y arduino para que funcionen correctamente. Para ello necesitaremos 3 cables y una resistencia. La conexión directa a arduino se realiza de la siguiente manera:


Cuando tengamos varios botones las conexiones de todos ellos a 5V y GND las haremos en la protoboard.

Comenzaremos por un programa sencillo en el que al pulsar un botón consigamos encender una luz.



Como puede verse en el código usamos una variable de estado "boton_baja" (para declarar variables de tipo entero hay que usar las funciones avanzadas) que tomar el valor del boton que hemos conectado.

Un siguiente paso sería añadir dos botones y dos leds más para así tener los 3 pulsadores que usaremos en nuestro semáforo. En este ejemplo tenemos 3 botones activando 3 leds de colores diferentes:




Hasta ahora para que el led esté encendido hemos tenido que estar pulsando el botón constantemente. En el siguiente programa basado en el anterior nos proponemos conseguir que esto no sea necesario y que una pulsación del botón deje el led ya encendido todo el tiempo que es lo que es un futuro querremos que haga el motor del ascensor.




Finalmente vamos a conectar un motor de rotación continua y programar la forma de controlarlo mediante los botones que hemos estado usando anteriormente para las luces. Además de las opciones de giro del motor en sentido horario y antihorario y la opción de pararlo, usaremos el bloque verde de bitbloq que nos permite escribir código directo de arduino para poder usar las opciones attach y detach que no existen en bitbloq.





El siguiente paso será añadir a nuestro arduino los sensores que detecten la posición exacta del ascensor en cada momento para así saber en que planta está y poder darle las ordenes adecuadas al motor para que el ascensor vaya a la planta desde la que se le llama.

Un saludo,
Raúl.