sábado, 16 de diciembre de 2017

Controlando el semáforo desde el móvil 1

Buenos días.

En las siguiente entradas vamos a ir incorporando a nuestro programa de arduino de control de un semáforo el código necesario para controlarlo desde el móvil.

En estas dos entradas previas se puede ver como fuimos programando el arduino para controlar el semáforo:



En esta primera entrada comenzaremos por añadir al programa más sencillo de semáforo, en el que se iban encendiendo las luces de manera secuencial (sin usar la función esperar, todo mediante el uso de tiempos de ejecución), la opción de apagar o encender el semáforo o de ponerlo en modo ámbar intermitente.


Sobre este programa de base vamos a añadir el código que nos va a permitir manejarlo desde el teléfono. Previamente tendremos que haber creado una aplicación con appinventor que envíe mensajes a nuestro arduino. En la entrada anterior del blog vimos como crear una aplicación sencilla que permitía enviar una A y una B. Para poder añadir el modo ámbar intermitente o modo de emergencia del semáforo deberemos añadir un tercer botón que envíe por ejemplo la señal C.

Una vez confirmado que tenemos el componente puerto serie en bitbloq y el Baudrate del mismo coincidiendo con el del bluetooth (en nuestro caso 9600), lo primero que deberemos programar en bitbloq son las nuevas variables que vamos a utilizar:


Como veis hemos añadido dos variables. La variable "datos", de la que ya hablamos en la entrada anterior, que usaremos para guardar el texto que llegue vía bluetooth. Y la variable MODO, que indicará el modo de funcionamiento del semáforo. De momento tendremos tres modos de funcionamiento. 0 cuando este apagado, 1 para modo normal en secuencia de colores y 2 para el modo ambar parpadeante.
En la imagen anterior puede verse también que en el apartado Setup de instrucciones iniciales comenzamos por defecto con el MODO 1 de funcionamiento normal del semáforo.

Al comienzo del bucle principal LOOP añadiremos las opciones para que en función de la letra recibida el programa cambie de un MODO a otro.



Vamos a ver que hace cada una de las opciones:
Si recibe una A, el semáforo pasa a modo normal (secuencia de encendidos) volviendo a comenzar como en las instrucciones iniciales por el rojo. Añadimos aquí que A_on y V_on pasen a ser 0 para asegurarnos que volverá a empezar de nuevo solo con una de las tres variables en 1, la de R_on.

Si recibe una B, el semáforo pasa a modo apagado. Enviamos señal de apagado a los tres leds y pasamos las tres variables a 0.

Si recibe una C el semáforo pasa a MODO 2, enciende solo el ámbar poniendo solo A_on a 1 y tomar el tiempo de ejecución como momento de encendido del ámbar.

El MODO 0 no necesita más programación el semáforo estará apagado hasta que enviemos alguna otra señal.

El MODO 1 es muy sencillo, simplemente tendremos que incluir todo el código que manejaba antes el semáforo dentro de esta opción como puede verse en la siguiente imagen:


Y por último programamos el MODO 2 de la siguiente manera:


Con esto conseguiremos un parpadeo de tiempo de encendido y apagado de 500ms en cada caso sin usar la función esperar que bloquearía el programa y dificultaría el envío de datos vía bluetooth.

Como veis un programa ya de un nivel muy interesante en el que empezamos a trabajar con las variables y los condicionales de manera ordenada. Siguiendo esta misma dinámica podremos ser capaces de ir añadiendo a este programa el resto de opciones que proponíamos en la entrada anterior:


En la siguiente entrada veremos como implementar algunas de ellas.

Un saludo,
Raúl.

lunes, 11 de diciembre de 2017

Semáforo Conexión Bluetooth - Arduino y Aplicación AppInventor

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.


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 aplicación específica para el control del semáforo que deberá realizar al menos las siguientes funciones:

  • Encender y apagar el semáforo
  • Cambiar de modo secuencia a modo botón
  • Cambiar a modo ámbar parpadeando
  • Permitir cambiar los tiempos de espera de cada fase: rojo, ámbar y verde
  • Permitir activar y desactivar el sonido del zumbador
  • Recibir la información del sensor de luz en el móvil
  • Permitir variar el valor que determina si es de día o de noche
  • Alguna otra opción de creación propia

En el siguiente enlace tenéis la hoja de seguimiento de esta fase del proyecto:


Con esta parte terminada concluiremos este primer proyecto del semáforo en el que hemos podido trabajar: electrónica digital, analógica, programación, impresión en 3D, realización de proyectos, aplicaciones móviles y conexiones inalámbricas. Todo esto formará la base para los proyectos que realizaremos en la segunda parte del curso.

Un saludo,
Raúl.