Iluminación LED controlada con Android

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. 




Deja tu voto

2 puntos
Upvote Downvote

Total votes: 2

Upvotes: 2

Upvotes percentage: 100.000000%

Downvotes: 0

Downvotes percentage: 0.000000%

Mario

35 Comments

Deja una respuesta
  1. Gracias Mario, tengo en mente esto desde que empezaste a trabajar con App inventor y el modulo Bluetooth, compre el modulo pero me falta el movil con android, que ya estoy buscando. Cuando lo tenga me pondre a practicar ya que lo queria implementar en un proyecto de led RGB en el que estoy metido, Saludos

  2. Hola Mario, me agradó este proyecto y desearía realizarlo, pero no encuentro ese pic ni el hardware amicus 18 para desarrollarlo. ¿Puedes sugerirme otro pic o hardware? el 18F877A se puede emplear.

    • #6
      Hola!
      Lo único que necesitas comprar es el PIC 18F25K20 para hacer este proyecto. El "software" de Amicus es gratis y está en la web:
      http://www.myamicus.co.uk/content.php
      Es gratis, pero es sólo para esa línea de PIC (K20, K22 y tal vez algún otro. Yo sólo uso el K20)
      Si deseas utilizar el 16F877 junto a la instrucción "HPWM" deberás programar en cualquier otro lenguaje BASIC, pero deberás adaptar el código (agregarle fuses) para que pueda funcionar.

      Hacerlo funcionar es posible, sólo tienes que adaptar el código (no en su escencia, sino en los complementos que necesita para ser útil en otro IDE) y encontrar CCP1 en el 16F877 (pin 17)

      Saludos!
      Mario

  3. Al ponerle un moc con un triac puedes sustituir el led y controlar la intensidad de un foco. O de un motor. Creo que me tendré que comprar un módulo para hacer algunas pruebas.

  4. Hola amigos, una duda.
    Que programador (USB) conectan a la entrada ICSP del circuito propuesto?

    O que es lo que hay entre el SOFTWARE y la entrada ICSP de este circuito?

  5. la programacion en hardware es con el pickit 2, el software es el amicus 18.

    pregunto:

    ¿si no tengo el pickit 2 y solo tengo un programador o grabador generico( que solo sirve para cargar el archivo en hexa al pic) este dispositivo gravador soporta el PI18F2520 (SIN LA K), me servira este para cargarle el codigo en hexa al 18F25K20.

  6. oye disculpa amigo estoy siguiendo tu proyecto,tengo todo y utilizo arduino para controlar el led mi duda es cuando corro la aplicacion en el cel que variables o nombres de variable recibe el arduino???

  7. Querido Mario, ¿como estas?. Quería contactarme con vos, por lo siguiente.
    Soy estudiante de Electrónica, y en una materia tengo que hacer un proyecto, y esto me gusto mucho, por lo cual, si no tenes problema, me gustaría hacerlo.
    Por otro lado, estoy teniendo problemas con AppAndroid, parece que ya no va mas, o no se que es lo que paso. Y migrar toda la programación a otro tipo de lenguaje, quizás sea muy complicado. ¿Que me recomendas?
    Quedo a tu disposición.
    Gracias!

  8. UNa consulta ya arme todo pero en el android me pide permisos de bluetooh_admin con runtime error como corrijo eso?
    Aparte baje el blueterm pero no se que comandos mandar para que por lo menos prenda y apague porfavor respondeme.
    Saludos

  9. hola tengo una duda, se puede programar con arduino, que diferencias abría en cuanto al funcionamiento. es mas eficiente que con amicus.
    y si quisiera ponerle unos 100 leds de alta luminocidad que cambios abría que hacer.
    gracias
    buena explicacion

  10. Hola, muchas gracias por el proyecto lo pienso usar para mi proyecto de la escuela pero por favor algien me podria decir la medida de cada componente como las resistencias y lo demas por favor es que de verdad me urge si no no podre utilizar este proyecto. Y otra cosa mas alguien me recomienda una paguina para proyectos relaconados con la Domotica, les estare muy agradecida por favor ayuda

  11. Hola Mario, antes de nada darte miles de enhorabuena por ser un fenómeno con la electrónica y con app inventor, eres la inspiración de muchos,pero ante app inventor me surge 2 problemas, el primero es… como puedo dejar trabajando la aplicación en segundo plano sin que cierre o pierda la comunicación con el bluetooth ? y el segundo problemas es… en caso de perder la comunicación por falta de batería, o fuera de rango con HC-06 como podría hacer que salte una alarma (sonido)en mi telefono? Gracias.

  12. Hola
    me gustaría saber si el módulo bluetooht sirve para cualquier pic o depende de la referencia del pic se usa un bluetooth en especifico, en mi caso el pic 18f4550.
    Gracias

    • Hola valentina, el módulo sirve para cualquier microcontrolador, no es exclusivo de la familia PIC, en mi caso lo utilize con un microcontrolador motorola y tuvo un buen funcionamiento

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.