Electrónica y Programación en Personal
«Si no se soluciona con un script en Python entonces no es viable»

por Yeison Cardona el 18 de agosto de 2011 a las 13:54 UTC
A continuación se desarrollará un sensor de temperatura con Pinguino, Python y comunicación a Pachube, es bastante simple y un ejemplo ideal para entrar en el desarrollo de GUIs con Python y Pinguino (y claro Pynguino).

Lista de materiales

Hardware:
  • Tarjeta de desarrollo pinguino.
  • Lm35 (sensor de temperatura).
  • Resistencias varias.
  • Leds para visualización.
Software:

Montaje (sensor)

El Lm35 es un sensor de temperatura bastante ideal para aplicaciones sencillas que no requieran de una alta presición, en su datasheet se encuentran las siguientes configuraciones:


Por simplicidad se ha trabajado con la configuración de la derecha donde R1=100kΩ ya que Vs=5V



Este es la forma de la conexión para el Lm35 mas unos leds de visualización y los correspondientes pines de Pinguino.


Software

La parte del software está toda diseñada en Python y con WxPython en la interfaz gráfica, del lado de Pinguino de tiene únicamente el código de pynguino.pde, el resto se hace en Python.


Cálculo de la temperatura

Del código en Python sólo merece la pena comentar las siguientes líneas, orientadas al cálculo de la temperatura, que se encuentra en el archivo metodos.py.
def lectura(self):
    cont=0
    while self.run:
        cont+=1
        value=self.pinguino.analogRead(13)    #Se lee el pin análogo
        temp_c=(5.0*value*100.0)/1023.0       #Y se calcula la temperatura 
        
        if self.run: time.sleep(0.5)
        if self.run: self.pinguino.digitalWrite(7,"high")
        if self.run: time.sleep(0.5)
        if self.run: self.pinguino.digitalWrite(7,"low")
        
        wx.PostEvent(self, ResultEvent([temp_c,cont]))
        
        if cont>=60*self.spinCtrl1.GetValue():
            cont=0
            self.pinguino.digitalWrite(6,"high")
            time.sleep(2)
            self.pinguino.digitalWrite(6,"low")
La forma de calcular la temperatura es simple, con la siguiente formula:(5.0*value*100.0)/1023.0, donde value es el valor leído desde la entrada análoga, el resto del código hace la animación de los leds, un led parpadea cada actualización de la temperatura en el GUI y el otro se encenderá al actualizar los datos en Pachube.
Actualización en Pachube
Para quien no está familiarizado con Pachube aqui podrán encontrar información.
La actualización de datos a pachube se logra con un módulo para python llamado eeml el cual funciona de la siguiente manera:
Primero descargamos el módulo desde aquí y se instala como cualquier otro paquete, es decir:
$ sudo python setup.py install
Creamos un script en python en donde procederemos asi:
Importamos el módulo:
import eeml
Creamos los parámetros para la conexión, estos parámetros son generados en la cuenta de Pachube;
API Key:
Igual pasa con la API Url, sólo que es mas obvia:
Ya con estos datos entonces los inicializamos:
API_KEY="XXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX-XXXXXXX"
API_URL=15507

cuenta_pachube=eeml.Pachube(API_URL, API_KEY)
Ahora se utiliza los métodos update y put para actualizar los datos y enviarlos a pachube.
cuenta_pachube.update([eeml.Data(0, value, ['device'])])
cuenta_pachube.put()

Los parámetros de eeml.Data son los siguientes; el primero es el ID que haya elegido en Pachube en este caso el 0, el segundo el valor a enviar y como tercer parámetro los tags necesarios en este caso device.

Si todo se ha hecho correctamente se tienen los datos actualizados en pachube, debe de recordar que no puede enviar mas de 1 dato cada 3 minutos, a menos de que se tenga un plan con Pachube.


Interfaz de la aplicación
La aplicación es muy simple y gráfica, incluye un recuadro para ingresar nuestras API key y API url, un selector para escoger cada cuantos minutos se actualizarán los datos en pachube, un visualizador con forma de "termómetro" y una "mini terminal" en donde visualizaremos lo que esta ocurriendo, la aplicación NO necesariamente tiene que enviar datos a pachube sólo basta con no pulsar el botón de "conectar con Pachube" y tendrá un termómetro digital con visualización en pc.




Resultado
https://pachube.com/feeds/15507
Una gráfica en tiempo real, la cual podemos incrustar en nuestro sitio como esta:


Nota
Es de mi naturaleza olvidar cosas importantes, y con esta aplicación no paso lo contrario, ya que es muy útil tener una opción para elegir el ID y los tags correspondientes, pero bueno, les encargo la corrección a la persona que esté interesada en ello, esto no significa que no funcione como termómetro digital, sólo que las aplicaciones del programa se limitan considerablemente al usarlo con pachube.


Descargar

Descargar desde
Google Code


También podría interesarte:

Comentarios:
Anonymous dijo:
6 de febrero de 2012 07:13
k tarjeta de desarrollo debería usar para esta aplicación... se puede la tradicional?
Responder a Anonymous
Respuesta de Yeison Cardona:
6 de febrero de 2012 09:14
si, cualquier tarjeta va bien, este montaje sólo lo probé con la 18F2550, pero debería funcionar igual en todas.
Responder a Yeison Cardona
HenryLaredoQ dijo:
7 de septiembre de 2012 18:52
Excelente post, dime todo lo mencionado puede correr en win7 tambien?
Responder a HenryLaredoQ
Respuesta de Yeison Cardona:
7 de septiembre de 2012 18:55
En W7 a 32bit sin ningún problema, pero al parecer hay un problema con PySerial para 64bit, PySerial es el encargado de establecer la comunicación con Pinguino.
Responder a Yeison Cardona
Añadir un nuevo comentario:
Si desean una respuesta para su comentario sólo deben agregarme en G+ y hacer una mención a Yeison Cardona, así les podré responder lo antes posible.