sábado, 27 de enero de 2018

Fin del proyecto SEMÁFORO. Uso del LDR para el control del sonido del semáforo

Buenos días.

Con esta entrada terminamos el proyecto del semáforo cubriendo todos los pasos que nos habíamos propuesto al inicio del mismo.

Para poder controlar que el sonido del semáforo se apague por la noche vamos a recibir en el teléfono móvil la información del LDR enviados desde arduino y mediante un botón de la aplicación podremos asignar en cualquier momento ese valor al cambio entre día y noche. El valor inicial para diferenciar el día y la noche es de 40.

Empezando por app inventor, será en la aplicación será necesario añadir un reloj. Este componente se añade como el bluetooth y el notifier, no se genera ningún elemento visible en la aplicación pero podremos usarlo para controlar cada cuanto tiempo queremos recibir la información vía bluetooth. Como puede verse en la imagen el tiempo asignado ha sido de 100ms. Podría haber sido menor (incluso 0ms) o mayor. Esto simplemente cambiaría el tiempo con el que se recibirán nuevos datos.


El siguiente paso en app inventor será programar la recepción de información. Que esos nuevos datos aparezcan en el label de información del LDR y que al pulsar el botón para asignar ese valor a la noche, ese valor quede registrado en el label correspondiente.


En arduino la parte de programación no es complicada. Podríamos prácticamente enviar mediante una línea el envío de datos pero para que el envío y recepción de los mismos pueda verse mejor y con el fin de aprender a controlar también el tiempo de envío, hemos programado que se envíe un dato desde la placa cada 500ms.
Para ello primero se han creado tres nuevas variables: noche, LDR y tiempo. (es importante recordar que si hemos llamado LDR al componente no podemos llamar LDR a la variable ya que no se pueden tener dos cosas con el mismo nombre. En nuestro caso el componente se llama LDR_elemento).


Una vez creadas las variables realizamos el envío cada 500ms con el siguiente código al principio del bucle principal. Como puede verse en la siguiente imagen, tenemos que crear una variable de tiempo diferente y específica para el envío de datos cada 500ms, en este caso la hemos llamado "tiempo_envio_ldr".



Con esto habremos conseguido algo que no habíamos probado hasta ahora: enviar datos desde arduino a nuestro teléfono, ya que de momento solo enviábamos datos desde app inventor a arduino.

Por otro lado cuando en arduino recibamos la letra Z, que es la que en appinventor hemos asignado al botón de cambio del valor del LDR, deberemos indicar que la variable noche cambie del valor que tiene por defecto (en nuestro ejemplo 50) por el valor que tenga el LDR en ese momento.


Ahora será necesario poner la variable noche en el lugar en el que antes poníamos ese valor de 50 como valor fijo para indicar cuando era de día y cuando era de noche para activar y desactivar el sonido:



En algunos casos el orden de encendido de las luces del semáforo puede que no sea el correcto. Es importante recordar que hay que dejar la secuencia de encendido tanto en modo secuencia como en modo botón. Dado que es un semáforo de coches la secuencia correcta es verde - ambar - rojo - verde. Ya que el ambar se enciende antes del rojo para que los conductores tengan tiempo de frenar antes de que cambie a rojo.
Con la secuencia correcta quedaría así:



Con todo quedaría mucho por mejorar en la estética de la aplicación que ha quedado con un diseño bastante funcional para básicamente poder probar que toda la programación funciona correctamente.

Con esta entrada cerramos este proyecto que nos ha llevado a aprender a programar tanto en arduino con bitbloq como aplicaciones móviles con app inventor. 

En los siguientes proyectos tendremos que poner en práctica todo lo aprendido en este proyecto dando el salto a ser capaces de programar componentes en movimiento y controlandolos desde nuestros teléfonos. Todo un reto para la segunda parte del curso.

Un saludo,
Raúl.

miércoles, 17 de enero de 2018

Cambio de modo botón a modo secuencia y control del sonido con el móvil

Buenos días.

En esta entrada vamos a añadir a nuestra aplicación la posibilidad de controlar desde el móvil el cambio de modo de funcionamiento del semáforo entre funcionamiento "peatón pulse" al que hemos llamado modo botón y el funcionamiento secuencial normal de las luces o modo secuencia.

También añadiremos dos botones para activar o desactivar el sonido del zumbador cuando el semáforo de los coches está en rojo que sería la señal acústica que indicaría que podríamos pasar.

Dejaremos para a próxima y última entrada sobre este proyecto el control del LDR desde el móvil que nos permitirá desactivar automáticamente el sonido cuando es de noche por ejemplo.

Empezamos por mostrar en la siguiente imagen el aspecto de la aplicación con estas dos funciones incorporadas. La estética sigue siendo bastante sencilla ya que de momento lo que estamos priorizando es el funcionamiento de la aplicación.



Los cuatro botones que hemos añadido tienen una programación realmente sencilla en app inventor que puede verse en la siguiente imagen. El modo secuencia manda por bluetooth la señal G, el modo botón la J, el apagado de sonido la L y el encendido la K.


Para poder usar el zumbador sin tener que dejar bloqueado el programa durante el tiempo en que está sonando una buena opción es cambiar el elemento de programación zumbador por un led (en la imagen led_zumbador) que nos permitirá activar o desactivar el pin al que se encuentra conectado el zumbador a la placa.


En la parte de bitbloq usaremos nuevas variables para gestionar la activación o desactivación del modo botón por un lado y del sonido por otro. Al recibir las letras correspondientes estas variables irán cambiando de valor:



Posteriormente estas variables serán las encargadas en nuestro código de hacer que el semáforo tenga que esperar a que se pulse el botón para cambiar o no:


O de que suene de día o no:




Con todo esto ya tendríamos prácticamente terminadas las diferentes fase de control que se habían planteado en la hoja de seguimiento del proyecto de control de semáforo por bluetooth.



En la próxima entrada veremos los puntos referentes a la señal LDR que nos permitirán recibir en el móvil los datos del sensor de la placa y actuar desde el móvil sobre ella.

Un saludo,
Raúl.

domingo, 7 de enero de 2018

Controlando con el móvil el tiempo de encendido de las luces

Buenos días.

Feliz 2018 a tod@s. Espero que este sea un gran año lleno de buenos momentos tanto dentro como fuera del instituto.

Por lo que a Tecnología Industrial respecta empezamos el año como terminamos el 2017, avanzando en el aprendizaje de la programación de aplicaciones móviles mediante appinventor y de robótica con arduino.

Seguimos trabajando con nuestro semáforo, ahora controlando sus funciones desde el móvil. La siguiente función de control que vamos a implementar es la del tiempo de duración de los encendidos. Existen muchas manera de hacerlo y una de las más sencillas es la que os propongo en esta entrada: Utilizando un dos botones para cada luz, uno para aumentar el tiempo de encendido y otro para disminuirlo.

Empecemos con la aplicación móvil en App inventor, Vamos a añadir 3 layouts, uno para cada luz, con dos botones y una etiqueta en cada uno. Podéis ver el resultado en la siguiente imagen.


La programación de los elementos es sencilla pero incluye algunos elementos que no hemos visto hasta ahora: Creación de variables en app inventor (initialize global), realización de operaciones matemáticas con las variables y modificación del contenido de cuadros de texto usando la función "join".
Como podéis ver hemos añadido un condicional en cada botón para que el tiempo nunca sea menor que 1 segundo ni mayor de 30.


Una vez hecho para una de las luces copiamos y pegamos los bloques para las otras dos, cambiando la letra de envío por bluetooth y las variables:


Como os habréis dado cuenta no enviamos por bluetooth al arduino el valor del tiempo de las variables de app inventor, seguimos enviando solamente una letra diferente para cada operación que después en el código arduino nos indicará lo que tenemos que hacer con las variables de arduino, que será una réplica de lo que hemos hecho en app inventor. Por supuesto que existe la posibilidad de mandar variables por bluetooth con los datos del tiempo pero esto complicaría un poco más la programación ya que la señal de bluetooth además de la nueva cifra debería indicar para cual de las luces se ha realizado el cambio. Esto se realiza creando cadenas en el mensaje de bluetooth con diferentes partes que después en arduino fragmentamos y obtenemos la información correspondiente. Lo veremos más adelante en otras entradas, pero de momento en esta probaremos a programarlo de esta sencilla manera, cambio el valor de la variable en app inventor e indicando una simple letra como señal a arduino.

Pasamos a la programación en arduino que es más sencilla todavía:

Por un lado tenemos que crear 3 nuevas variables que comienzan con un valor de 5000ms (5 segundos):


En función  de la letra que recibamos por bluetooth iremos añadiendo o quitando 1000ms a cada una de las variables. Como veis aquí también controlamos que la variable no baje de 1000ms ni suba de 30000ms. Existen formas mucho más eficientes de programar esto, pero de momento para ir aprendiendo, programarlo en cada apartado, creo que es una buena manera de iniciarse en las operaciones matemáticas con variables y los condicionales.



Y por último no debemos olvidar sustituir en nuestro programa los tiempos de espera que teníamos por las variables que hemos creado.


De esta sencilla manera podemos ir controlando muchos otros parámetros como por ejemplo el tiempo de encendido y apagado de emergencia o cualquier otra que necesitemos. Un buen ejercicio ahora sería intentar controlar algún parámetro programando todo por vuestra cuenta.

Un saludo,
Raúl.