Midiendo temperatura con Beaglebone

Preliminares

Para comenzar en el uso de Beaglebone mostraremos la medición de temperatura usando las puertas analógicas.Beaglebone en la mano

El beaglebone consta de una serie de pines disponibles, en dos grupos llamados P8 y P9. Por ahora nos interesan los 7 Conversores Analógo Digital o ADC, todos ellos estan ubicados en el grupo P9, estos son nuestros sensores analógicos.

Atención: El manual de referencia de beaglebone indica claramente que no se deben superar los 1.8V en estas puertas ADC, por lo que hemos respetado esa recomendación

Materiales

  • Beaglebone Rev. A5
  • Cable de red
  • Fuente de poder 5V @ 1800mA
  • Conectores Varios
  • Protoboard
  • LM35 Sensor de temperatura

A conectar !

Conectamos el Beaglebone con el cable de red y la fuente de poder

Al conectar vía SSH podemos  acceder a los valores de los ADC  con un simple cat

root@beaglebone:~# cat /sys/devices/platform/tsc/ain1
4000

Los valores que se obtienen estaran cerca de 4000 y no tienen significado sin algun elemento conectado al PIN correspondiente, en este caso el P9.39

La tabla indica la relación de cada archivo con la puerta física en el Beaglebone,

Archivo Pin en Beaglebone
/sys/devices/platform/tsc/ain1
P9.39
/sys/devices/platform/tsc/ain2
P9.40
/sys/devices/platform/tsc/ain3
P9.37
/sys/devices/platform/tsc/ain4
P9.38
/sys/devices/platform/tsc/ain5
P9.33
/sys/devices/platform/tsc/ain6
P9.36
/sys/devices/platform/tsc/ain7
P9.35

Esta numeración tan «curiosa» la comprobamos en todos los casos y vimos que NO coincide lo indicado en el manual de referencia Tabla 11. por eso lo indicamos para futura referencia.

Ahora conectamos el sensor LM35 a un protoboard como se indica en la foto

Detalle sensor de temperatura

Esta es la forma más simple de conectar el sensor, entregando en el PIN OUTPUT una señal analógica de 10 mV/ C

Las puertas del sensor LM35 se conectan a las puertas del Beaglebone que se indican a continuación

Gnd             en P9.1
+Vs              en P9.3 // corresponde a 3.3 V, es el mínimo para polarización del sensor
OUTPUT  en P9.39 que, de acuerdo a la tabla anterior, corresponde a AIN1

La foto muestra el resultado final

Ahora los valores obtenidos de AIN1 tienen un significado, se pueden convertir a mV con la siguiente expresión

V [mV] = (valor_medido/4096)* 1800

Usando Python

Estos son nuestros primeros pasos, ahora que sabemos como capturar estos valores les dejaré un script, escrito en Python para mostrar la funcionalidad

Primero vamos a escribir estos datos en un archivo, que llamaremos tempe2.txt y ademas imprimirlos en pantalla. Para fines de prueba esto se realizara en un loop infinito con un período de muestreo 30 segundos

from time import sleep
g = open("tempe2.txt","w")
while(True):
	f = open("/sys/devices/platform/tsc/ain1","r")
	datos  = f.read() # lee el contenido de ain1
	vect   = datos.split('\x00')
	num    = float(vect[0])
	temp   = (num/4096)*180  # convierte en unidad de temperatura
	temp2d = ("%.2f" % temp)
	print temp2d  # imprime los valores
	g.write(str(temp2d)+ '\n') # escribe en el archivo
	f.close
	sleep(30)

Si necesitas pasar los valores medidos en una URL se usan los siguientes comandos;

1)  Fuera del loop

import urllib
url = http://www.ejemplo.com/hola.php?

2) Dentro del loop

params = urllib.urlencode({'id':'sensor1','temp':temp2d})
new_url = url + params
urllib.urlopen(new_url)

Asi nos queda el siguiente script

from time import sleep
import urllib
url = ("http://www.ejemplo.com/hola.php?")
g = open("tempe2.txt","w")
while(True):
      f = open("/sys/devices/platform/tsc/ain1","r")
      datos  = f.read() # lee el contenido de ain1
      vect   = datos.split('\x00')
      num    = float(vect[0])
      temp   = (num/4096)*180  # convierte en unidad de temperatura
      temp2d = ("%.2f" % temp)
      print temp2d  # imprime los valores
      g.write(str(temp2d)+ '\n') # escribe en el archivo
      params = urllib.urlencode({'id':'sensor1','temp':temp2d})
      new_url = url + params
      urllib.urlopen(new_url)
      f.close
      sleep(30)

Comentarios y Mejoras

Al muestreo se debe aplicar algun promedio móvil (MA) para reflejar un mejor valor de temperatura.

El loop infinito es para fines demostrativos, una implementación en el mundo real debe incluir algun límite en el tamaño del archivo o en la cantidad de muestras.

El valor +Vs del sensor puede ir conectado al PIN  P9.5 del beaglebone, 5.5V, que esta dentro del rango de polarización.

Pruebas en los ADC, por ejemplo con un potenciómetro, se recomienda usar el PIN P9.32 con V = 1.8V

Author: Manuel Carrasco

Ingeniero Eléctrico, Institutano, instructor certificado Cisco, en twitter @mcarrasco con comentarios y opiniones personales.

One thought

  1. Ola,

    querio mas informationes…pero ha olvidado mi espanol 🙂

    I’m using Ubuntu distro on my Beaglebone, and I can’t find AIN devices (/sys/devices/platform/tsc/ain1-2-3…)

    root@zeus:/# find / -name ain1
    /sys/kernel/debug/omap_mux/ain1

    Do I had to create then like GPIO ?

    Regards

Deja una respuesta

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