viernes, 3 de septiembre de 2021

Proyecto Coche Robótico con Arduino (2/5)

 

Modo Maze: Ultrasonido montado sobre un servo motor

Hola a tod@s.

En el tema anterior hemos visto como programar el ultrasonido suponiendo que este se encuentra en la parte delantera del coche y va captando la distancia a la que tiene objetos delante según el coche va girando. Otra opción para que el coche sortee obstáculos es colocar el ultrasonido encima de un servo motor de giro que una vez detecta un obstáculo permita girar el ultrasonido para detectar si hay otros obstáculos a los lados sin necesidad de que se mueva el coche.

Para ello lo primero será asegurarnos que el servomotor que vamos a montar está en posición 90º antes de colocarle en posición mirando hacia adelante. Ya que si no es así luego el servo motor no hará el giro a izquierda y derecha cuando le pongamos en posición de 5º o 175º (se le puede poner ir a 0º y 180º pero conviene evitar los ángulos extremos que pueden producir vibraciones).

Para ello podremos realizar un sencillo programa como el siguiente con el que comprobaremos que nuestro servomotor se mueve correctamente y aprovechar a desconectarlo en la pausa más larga en la que sabemos que está a 90º.




Una vez tengamos montado nuestro ultrasonido sobre el servomotor procederemos a programar la detección de objetos y las diferentes acciones que queremos vaya realizando nuestro servomotor en base a los obstáculos que encuentre el coche en su camino.

Para ello será necesario crear variables que guarden los valores de las distancias que va detectando el ultrasonido. Por un lado la variable "distancia" que detecta la distancia a los objetos que el coche tiene delante y por otro lado las variables "dist_izq" y "dist_der" que guardarán la distancia de los objetos a los lados cuando el coche encuentre un obstáculo y mire a los lados para buscar la mejor salida. Las variables se declaran al principio del programa en el apartado "Variables globales y funciones". En este apartado hemos aprovechado para crear dos funciones que nos permitirán parar el coche y hacer que se mueva hacia adelante:



El uso de servomotores puede hacer que se produzcan vibraciones en ellos aunque no estén recibiendo mensajes de la placa es por este motivo que conviene desactivarlos cuando no están en uso y activarlos para usarlo. En las instrucciones iniciales, las que solo se realizan una vez al inicio del programa, hemos incluido una línea en verde con código directo de arduino "servo.detach();" ya que de momento en bitbloq no existe el bloque de activación y desactivación de un servo motor.

En la imagen podemos ver también el inicio del código de la parte de programación en Loop en la que guardamos la lectura del sensor de ultrasonidos en la variable distancia y comprobamos si esa variable es menor o igual que 20 para en ese momento para el coche, activar el servomotor en el pin 2 "servo.attach(2);", hacerlo girar a un lado y a otro y guardar los valores de cada lectura en las variables "dist_izq" y "dist_der". En cada caso esperamos 500ms para que se realice el giro y 250ms para que se realice la lectura correctamente. Al finalizar volvemos a poner el servo motor a 90º y volveremos a poner la orden "servo.detach();" para evitar vibraciones.


La parte final, que podemos ver en la siguiente imagen, consistirá en la toma de decisiones en base a los valores de distancia captados y guardados en las variables "dist_izq" y "dist_der", las comparamos y giramos hacia el lado donde la distancia de salida sea mayor.


De nuevo, como en el tema anterior, volvemos a usar un "Mientras" en la parte final para que una vez comience a girar el coche lo siga haciendo hasta que no detecta nada delante a 20 cm o menos.

Con este programa habremos conseguido que el coche vaya tomando sus propias decisiones. Mucho ánimo para conseguirlo, es un efecto realmente divertido ver como se va moviendo de manera autónoma buscando una salida moviendo la cabeza hacia los lados.

Un saludo,

Raúl

Conexiones a arduno con protoboard

Hola a tod@s.


En este tema haremos una recopilación de imágenes y algún vídeo explicativo sobre la conexión de los componentes a arduino usando una protoboard.

Para poder hacer la simulación de la programación de nuestro proyecto necesitaremos conectar leds que haremos encender como si fuesen los motores de nuestro coche robot:

Tal y como dicen en esta web:

"Hay dos tipos de personas, los que conectan los LEDs con resistencia y los que no… y solo una de ellas lo está haciendo bien."

Es por eso que nosotros lo vamos a hacer bien, es decir, con resistencia.


Para recordar el código de colores de la resistencia podemos usar estas imágenes en función de que lleve 3 o 4 lineas de colores + la tolerancia.



Conectar los componentes es una fase que parece que tiene menor importancia que la de programar, pero sin duda es realmente importante prestar la máxima atención y entender porque se conectan los componentes de esta manera para evitar fallos que puedan dañar a la placa o los componentes y además nos puedan hacer dar mil vueltas a la programación sin darnos cuenta de que el problema no es de código si no de instalación y conexión.

Un saludo,
Raúl.

Conexión arduino - Teléfono mediante aplicación de AppInventor y bluetooth

Buenos días.

En esta entrada vamos a dar los primeros pasos para conectarnos a la placa mediante el móvil usando el dispositivo bluetooth HC-06.

Lo primero será cambiar el nombre por defecto (HC-06) y el pin (1234) del dispositivo bluetooth. Para ello hay que usar el siguiente programa de arduino. Deberemos editarlo, cambiar los datos de la variable NOMBRE y PIN, conectar el bluetooth en los pines 2 (RX) y 3(TX) de nuestra placa y subir el programa a la placa.

Programa para cambiar nombre y pin del módulo bluetooth


El siguiente paso será sincronizar el módulo bluetooth con nuestro teléfono móvil, activando el bluetooth del teléfono, buscando el dispositivo por su nuevo nombre y sincronizando con el nuevo pin.
(En esta entrada del blog tenéis más información sobre la conexión vía bluetooth.)

Una vez sincronizado el dispositivo pasaremos a crear la aplicación con AppInventor. Para usar AppInventor es necesario tener una cuenta de gmail. AppInventor pedirá acceso directo a la cuenta de gmail, es por eso que recomiendo que creéis una solo para trabajar con esta web. Para simplificar los primeros pasos de conexión podéis importar este programa en el que ya están creados el ListPicker de conectar y el botón de desconectar. Podéis descargarlo en vuestro ordenador y una vez dentro de appinventor importar el archivo .aia de proyecto.

A este programa básico habrá que añadirle en un principio dos botones: Encender y apagar, que manden vía bluetooth información para que luego arduino la use para realizar las acciones de encender y apagar un led. En principio una forma sencilla de hacer esto es enviar las letras A para el encendido y B para el apagado.



Cuando tengamos terminada la aplicación debemos instalarla en el móvil, para ello hay que descargarla mediante el código QR o descargar el archivo .apk en el ordenador y enviarlo por mail al móvil o si lo conectamos con el cable usb al ordenador copiando y pegando el archivo. La opción de usar el código QR es muy cómoda. Una de las mejores aplicaciones gratuitas para leer códigos QR es QR Code Reader.

Solo nos queda programar la placa para que reciba la información del bluetooth. Para ello vamos a usar bitbloq y de momento hasta que veamos como usar el componente Bluetooth de bitbloq, las conexión vía bluetooth las vamos a realizar con el componente Puerto Serie. Es importante confirmar que el Baudrate del puerto serie es el mismo que el del bluetooth, en principio 9600 por defecto en los módulos HC-06.



Lo siguiente será programar los componentes. Para ello usaremos una variable "datos" que recibe la información del bluetooth y la almacena. Cuando la variable contenga algún dato (longitud>0) comprueba si es A o B para encender o apagar el led y a continuación borra el dato de la variable,


Es importante tener en cuenta que al usar el puerto de serie para las conexiones bluetooth será necesario conectar los pines TX y RX del módulo bluetooth a los pines 0 y 1 de arduino respectivamente (van cruzados el TX del bluetooth al RX de la placa que es el 0 y el RX del bluetooth al TX de la placa que es el 1) pero en el momento de cargar programas en la placa será necesario desconectarlos. Podemos mantener conectados los pines de Vcc y GND y por tanto seguir conectados al módulo con el móvil si ya está conectado. Una vez cargado el programa volveremos a conectar los pines del bluetooth a la placa para que la información que enviamos por el teléfono llegue hasta ella.

Una vez realizado este sencillo programa y comprobado que somos capaces de comunicarnos entre el teléfono móvil y la placa empezaremos a desarrollar la aplicaciones más específicas para el control del del coche robot.

Un saludo,
Raúl,


Bluetooth. Configuración y conexión

Buenos días.

En esta entrada voy a resolver varias dudas sobre el bluetooth: como probar los programas sin necesidad de usar el bluetooth y como configurar y solucionar los problemas más comunes con el bluetooth.

Probar la programación de bitbloq o arduino sin usar el bluetooth

Esta es una opción muy interesante si creemos que el bluetooth nos está dando problemas y aún así queremos programar con bitbloq y probar el resultado de nuestros programas.

La solución es mandar las ordenes a la placa mediante el Serial Monitor de la pestaña Ver de bitbloq (opción Mostrar Serial Monitor). Desconectamos completamente el bluetooth de la placa y teniéndola conectada con el cable usb al ordenador podemos dar las ordenes correspondientes desde el Serial Monitor, simplemente hay que tener el cuidado de poner el Baudrate que hayamos puesto al componente Puerto Serie (que en principio para la placa UNO debería de ser 9600).
Desde el puerto de serie podemos mandar las letras o textos que hayamos predefinido para mandar las ordenes desde appinventor a bitbloq. Escribiremos A y le damos al botón de enviar si es ese el mensaje que queremos probar o cualquier otro. Para poder hacer esto hay que colocar el robot de manera que las ruedas no toquen el suelo ya que lo tendremos conectado al ordenador con el cable. No servirá por tanto para verlo en movimiento pero si para ver la respuesta de la programación a la entrada de comandos.
Dos consideraciones importantes para usar el Serial Monitor de esta manera:
- Hay que asegurarse de que el bluetooth no está conectado a la placa y que no están ocupados los pines 0 y 1 por ningún otro componente, ya que el puerto serie usa esos pines para enviar y recibir datos. (Esto también es imprescindible para cargar programas en la placa).
- Es necesario tener el interruptor encendido y por tanto las pilas alimentando a la controladora de motores, ya que aunque por el USB le llega corriente a la placa y resto de componente no es suficiente como para hacer girar los motores.

Cambio de nombre, pin y baudrate del bluetooth

Esta es una opción muy interesante ya que todos los bluetooth que tenemos tienen un mismo nombre por defecto (normalmente HC-06) y un mismo PIN, 1234, y por tanto si tenemos varios coches con el mismo nombre de bluetooth puede hacerse difícil identificar si estamos conectando con el nuestro o con otro (aunque cada dispositivo bluetooth tiene identificador único del tipo 20:68:6A... y algunos teléfonos móviles permiten asignarle nombre a ese identificador sin cambiar directamente el nombre al módulo bluetooth).

Hay dos posibilidades dependiendo del tipo de módulo bluetooth que tengamos. Como exteriormente son iguales toca probar una forma y luego la otra en caso de no funcionar la primera.

El proceso viene explicado en la siguiente web:
https://www.aranacorp.com/es/comunicacion-con-arduino-y-el-modulo-hc-06/


Es sencillo: hay que poner el bluetooth con TX en el 2 y RX en el 3 y desde el IDE de arduino cargar el programa que viene en la web que es el siguiente:

#include <SoftwareSerial.h>

SoftwareSerial hc06(2,3);

void setup(){
  //Initialize Serial Monitor
  Serial.begin(9600);
  Serial.println("ENTER AT Commands:");
  //Initialize Bluetooth Serial Port
  hc06.begin(9600);
}

void loop(){
  //Write data from HC06 to Serial Monitor
  if (hc06.available()){
    Serial.write(hc06.read());
  }
  
  //Write from Serial Monitor to HC06
  if (Serial.available()){
    hc06.write(Serial.read());
  }  
}
A partir de aquí tenemos dos opciones en función del tipo de módulo Bluetooth que tengamos:

PRIMERA OPCIÓN: Configuración tipo HC-06 (etiquetado ZS-040 con la versión 3.0-20170609)

Después abrir el Monitor Serie, (seleccionado en la parte inferior "Ambos NL & CR" y "9600 baudio") y escribir:
AT para comprobar que da OK estamos conectados y para cambiar nombre y pin:
AT+NAME=<Nombre>   Ejm: AT+NAME=Robot 
AT+PSWD=<"Pin">   Ejm: AT+PSWD="2560"  


SEGUNDA OPCIÓN: Configuración tipo HC-06 diferentes

La diferencia es muy pequeña con la opción primera, simplemente para el cambio de nombre es no poner el = después de AT+NAME que en la primera opción si que hay que ponerlo y en la segunda no y para el cambio de pin en esta segunda opción es AT+PIN y justo pegado el pin y en la primera era AT+PSWD= y el pin entre comillas. 
De esta manera los comandos a escribir en el monitor (seleccionado en la parte inferior "Ambos NL & CR" y "9600 baudio") serie serían:

Para cambiar el nombre del módulo, escriba AT+NAMEmodulename. El módulo debe responder OK setname. (Por ejemplo: si desea cambiar el nombre del módulo a BTM1, escriba AT+NAMEBTM1)

Para cambiar el código PIN del módulo, escriba AT+PINxxxx. El módulo debe responder OKsetPIN. (Por ejemplo: si desea cambiar el PIN a 0000, escriba AT+PIN0000)

Son pequeñas diferencias pero que hacen que funcione o no el cambio de nombre y pin. 

Para más opciones y modelos diferentes puede consultarse esta web con mucha información: http://www.martyncurrey.com/bluetooth-modules/

Un saludo,
Raúl.


Guía de las diferentes fases del proyecto


Buenos días.

Tras las primeras fases en la que hemos aprendido a programar y configurar las placas Zumkit con bitbloq y app inventor y a construir la base de los robots y el chasis, en esta tercera fase estamos ya centrados en la programación de las placas y de las aplicaciones móviles finales para el robot educativo. En el siguiente enlace podemos descargar una guía para realizar los primeros ensayos que llevaremos a cabo tanto con las placas Zumkit de BQ como con placas UNO genéricas.

En el siguiente documento podéis descargar el documento para paso a paso poder ir trabajando con las placas las diferentes programas y aplicaciones de control del robot:


Un saludo,
Raúl


No hay comentarios:

Publicar un comentario