Con el retorno de App Inventor a la web, los desarrollos para móviles con Android vuelven a decir presente en NeoTeo y la aplicación de hoy, posee características de expansión muy interesantes. En esta oportunidad, controlaremos mediante PWM, la iluminación de un LED sencillo que estará conectado a un PIC18F25K20. El control de intensidad luminosa variable o extrema, estará operada desde un teléfono móvil, a través de un enlace Bluetooth, utilizando los conocidos y económicos módulos HC-06. Como todo comienzo (Hola Mundo), iniciamos el trabajo con un LED y luego veremos como controlar toda la iluminación LED de la casa, desde la comodidad de nuestro dispositivo móvil. Aplicaciones Android, nuevamente en NeoTeo.
Primero fue el mando a distancia a través de los infrarrojos; hoy, con cualquier dispositivo móvil que utilice Android, podemos controlar la iluminación LED de nuestra habitación o de toda nuestra casa. El proyecto que te proponemos en esta oportunidad, además de encender y apagar una pequeña luminaria, permite variar la intensidad de encendido de la misma, gracias a la utilización de una señal PWM que generaremos con el hardware interno de un PIC18F25K20. El circuito es muy sencillo y ya conocido por todos nosotros, con la novedad de que, en esta ocasión, utilizaremos una de las salidas CCP (Capture, Compare, PWM) que trae el microcontrolador. Queremos aclararte que esto no es exclusividad de este microcontrolador, sino que la mayoría lo trae, sólo hay que saber encontrar el pin correspondiente dentro del encapsulado del mismo. El beneficio que nos ofrece esta conexión es la posibilidad de utilizar, en el software gratuito Amicus, la instrucción HPWM que, básicamente, nos permite operar la mencionada salida (que comparte el pin con PORTC.2) en modo secundario. Es decir, no debemos poner al microcontrolador a estar atento y pendiente del uso de una interrupción para operar una salida PWM.
La instrucción se ejecuta y el PWM continúa su operación hasta que le indiquemos un cambio de trabajo, dentro de las líneas de programa del PIC. Dicho en otras palabras, mientras el PWM se mantiene activo en segundo plano, podemos aprovechar el PIC para otras operaciones. Como te adelantamos al comienzo, el circuito es un clásico en nuestras publicaciones y con su ayuda, vamos viendo y analizando diferentes alternativas para aprovechar las opciones que nos brinda este formidable conjunto que reúne al microcontrolador, el módulo Bluetooth y a nuestro dispositivo móvil con Android, para manipular y trabajar equipos o desarrollos a distancia, sin cables molestos, ni complejos sistemas, difíciles de programar o configurar. Para realizar la conexión Bluetooth y poner a funcionar el PWM de salida, nuestro PIC necesita tan sólo estas pocas líneas de programa.
En esta oportunidad, durante todo el tiempo de trabajo, el microcontrolador se encarga de “escuchar” con atención al módulo Bluetooth (trabajando a 115200bps) y tomará las variables que reciba desde el dispositivo móvil y ejecutará un programa muy elemental, muy sencillo. Con la instrucción HSERIN recibimos el dato de una variable BYTE y lo almacenamos en la variable PWMLED; luego, con ese valor nos encargaremos de dar forma a la instrucción HPWM. En esta última instrucción, el 1 significa que utilizaremos el canal número 1 (el 18F25K20 posee dos módulos CCP), luego viene la variable que tomaremos desde el módulo Bluetooth (PWMLED) y finalmente, encontramos la frecuencia de trabajo en “ciclos por segundo” sobre la que enviaremos la información, modulada por ancho de pulsos. Para este tipo de configuración, que utilizamos en el PIC, la frecuencia es de 4000 ciclos por segundo. Según la aplicación, utilizar frecuencias altas de PWM no favorece a la linealidad de la respuesta en la variación del ciclo de trabajo. Es decir, regular el ancho de los impulsos será más “efectivo” cuanto más baja sea la frecuencia de oscilación. Para la frecuencia utilizada por nosotros, las variaciones de la intensidad luminosa del LED más importantes se observaron en el primer tercio de la capacidad de la variable.
Con una alta frecuencia de salida, la inercia de “encendido y apagado” del LED como elemento físico luminoso, sumado a nuestra percepción visual, nos provoca la sensación de que el LED está intensamente encendido cuando, quizás, sólo se encuentra activo durante la mitad del tiempo. El fenómeno a destacar es la velocidad en que ocurre ese “encendido”. Cuatro mil veces en un segundo es muy rápido (al menos para mí) como para que el ojo humano identifique un PWM al 50%. Por este motivo, sólo podremos “apreciar” una variación efectiva durante el primer tercio de actividad. De todos modos, hay variaciones notables entre el 50% y el máximo, pero lo importante (para el ojo humano), se desarrolla en las partes bajas del PWM. Para otro tipo de aplicaciones, que no sea el encendido de una luminaria y donde un dispositivo electrónico sea el encargado de decodificar esta señal sin las limitaciones humanas, el circuito trabajará del modo esperado y sin observaciones, ya que será capaz de acompañar las variaciones en el ancho de los impulsos.
El montaje del circuito es, como mencionamos antes, muy sencillo de realizar y no plantea grandes o nuevos desafíos, respecto a los que ya hemos visto y trabajado con este (u otro) microcontrolador y un módulo Bluetooth. Un cristal, sus pequeños capacitores asociados, un circuito ICSP para la programación sin extracción del PIC del circuito, la alimentación con la fuente modular para protoboard y el módulo Bluetooth conectado a los terminales Rx y Tx del microcontrolador. Luego, el LED con su resistencia limitadora y un buen filtrado contra ruidos externos en la línea de alimentación del protoboard. Con este elemental hardware entonces, damos paso al trabajo realizado en el dispositivo móvil, viendo antes, hacia dónde vamos con este montaje.
En la aplicación “armada” en App Inventor realizaremos una estructura habitual donde creamos variables y constantes a las que les asignamos nombres y luego utilizaremos o “llamaremos” en los momentos en que sea necesario, dentro de lo que el desarrollo de la aplicación requiera. Por ejemplo, haremos uso de nuestro conocido objeto BluetoothClient para comunicarnos con el módulo HC-06, utilizaremos un temporizador (timer o clock) para observar cada pocos milisegundos la actividad de un elemento llamado “Ball” y los clásicos botones de conectividad Bluetooth con su pulsado corto, para conexión y extendido para su desconexión (LongClick). No debemos olvidar de incorporar el botón de “Salir” para cerrar en forma eficiente la aplicación (close application), además de la constante para incorporar de manera sencilla la dirección MAC de nuestro módulo Bluetooth.
Como mencionamos antes, lo destacado de esta aplicación es el uso de una zona rectangular que, dentro de ella haremos que el dispositivo móvil sea sensible al tacto y, entre otras cosas, sepa devolvernos una información útil, en valores x e y, como si estuviéramos hablando de un par de ejes cartesianos. Por supuesto, estamos hablando de una zona en dos dimensiones (2D). La particularidad de este objeto llamado “Canvas” es que la referencia que nos entregará será considerada del siguiente modo: dentro del eje horizontal “x” a partir del margen izquierdo de la zona empleada y en el caso del eje vertical “y” será desde el margen superior del área que abarca este objeto que, te repetimos, se denomina “Canvas” y lo encontrarás fácilmente dentro de los elementos básicos a utilizar con App Inventor. Dentro de este objeto puede ocurrir mucho más que una simple devolución de posiciones relativas, sino que puedes incorporar otros objetos móviles llamados “Sprite” o “Ball” (como hemos utilizado nosotros) y que encontrarás en el apartado de objetos de animación.
Históricamente, a cualquier objeto móvil en la pantalla de un ordenador se lo denominó “Sprite” aunque aquí encontramos una variedad más sencilla que se denomina “Ball”. Éste objeto es sólo circular, liso, llano y puede poseer un color definido en App Inventor, mientras que el “Sprite” tiene posibilidades de incorporar una imagen. Por supuesto, esta imagen puede ser desde el cursor de un resistor variable lineal (potenciómetro) como es el caso que nos reúne, pasando por una nave espacial decidida a invadir el planeta, hasta llegar a un monstruo dispuesto a comer tu cerebro. Como te explicábamos, estos objetos móviles pueden obedecer nuestra acción externa (táctil) o pueden tener movimiento propio, según el armado de la aplicación ya que, como te darás cuenta, de este modo se inicia la construcción de un simple juego Pong en Android y con App Inventor. Nosotros haremos uso de la primera opción y seleccionaremos los bloques que nos permitan mover el objeto “Ball”, que llamamos “Cursor”, dentro del objeto “Canvas” que haciendo abuso de nuestra creatividad e imaginación llamamos “Zona_cursor”. En la primera imagen del conjunto de bloques obtenidos, puedes ver que tenemos un par de sectores importantes que reúnen la mayoría de los elementos que intervienen en el movimiento del cursor. No sólo cuando tocamos (Touch) dentro de la zona del cursor sino además, cuando arrastramos (Drag) el objeto móvil dentro de la zona.
Cuando trabajamos con el elemento móvil en el conjunto de bloques, observa que hacemos referencia al valor que el mismo adquiere dentro de la zona habilitada con las posiciones iniciales, previas, y actuales a cada momento. Esto nos permitirá ubicar el objeto en pantalla (en la zona canvas) y desplazarlo, obteniendo así los valores de referencia en los ejes “x” e “y”, que en nuestra aplicación sólo será para el eje “x”, ya que no utilizaremos otro tipo de movimiento para el objeto. Al valor de posición dentro de este eje lo llamaremos “PWM” y será como mencionamos al principio, un número comprendido entre 0 y 255 (variable BYTE). Ese valor que adquiera según su posición en le eje “x” se transmitirá vía Bluetooth cada un determinado intervalo de tiempo seleccionado en “Clock” (10mS) y nuestro montaje con el LED, recibirá ese dato interpretándolo como el valor a asignar a la variable que controla el ciclo de trabajo del LED. Por último, se encuentran los botones que apagan o encienden el LED en forma directa y mueven el objeto “Cursor” a la vez que asignan el valor apropiado (a PWM) según sea el botón activado. De esta manera, se completa esta sencilla aplicación realizada en App Inventor.
A partir del código que te dejamos al final del artículo tú puedes ampliar, reformar y mejorar todo este inicio de trabajo (que nosotros continuaremos ampliando en otras entregas) aprovechando que, todo lo necesario para su implementación y uso, es gratuito y se encuentra disponible en la web. Sólo debes ir tomarlo y comenzar a disfrutar realizando aplicaciones personales a tu gusto y a la medida de tus necesidades. Nosotros, seguiremos trabajando en este desarrollo, paso a paso para lograr un sistema de iluminación variable y eficiente que pueda ser incorporado a un sistema domótico o para simplemente, activar las luminarias empleadas en nuestra habitación.