Leer temperatura con raspberry pi

Públicado el 07/07/2017 — HARDWARE, PROGRAMMING, RASPBERRY-PI

A partir del 2012 en la distribución de raspbian se le agregó soporte al sensor DS18B20, con éste se puede leer la temperatura de una forma fácil y precisa. Con motivos de la elaboración de cerveza y control de temperatura en la fermentación vamos a iniciar este proyecto.

Elementos necesarios

  1. Raspberry Pi - Amazon
    Raspberry pi zero
  2. Sensor DS18B20 - Amazon
    Sensor DS18B20
  3. Resistencia de 4.7K o 10K ohm - Amazon
    Resistencia
  4. Protoboard o Breadboard en inglés - Amazon
    Protoboard
  5. Cables Varios Amazon
    Cables varios

Montaje

El esquema de montaje es muy sencillo, se va a utilizar la alimentación de 3.3v del 1er pin al rojo del sensor, la tierra lo sacamos del 6to pin y es conectado al negro del sensor, salida del sensor (el amarillo) lo conectaremos al 4to GPIO del raspberry y por último vamos a situar la resistencia de 4.7k entre la alimentación y la salida del sensor.

montaje

montaje

DS18B20

El sensor viene equipado el protocolo de comunicación 1-Wire lo cual permite conectar n cantidad de sensores en serial a un sólo GPIO y esto se verá reflejado en el raspberry como una carpeta y archivo independiente.

Habilitando soporte para 1-Wire

Iniciemos por agregar la siguiente linea a /boot/config.txt

Para editar este archivo se puede usar sudo vi /boot/config.txt y al final del archivo agregar:

dtoverlay=w1-gpio

Ahora reiniciar con sudo reboot y una vez el raspberry inicie ejecutaremos los siguientes comandos:

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices
ls
cd 28-xxxx # cambiamos xxxx con el serial que nos aparece
cat w1_slave

commands

La respuesta del sensor va a tener YES o NO al final de la primera linea. Si es sí, entonces la temperatura va a estar al final de la segunda linea, en 11000 grados C. Por ejemplo en la foto anterior tenemos una temperatura de 28.125 C˚.

Leer con un programa

Para leer usaré el siguiente script de python:

import os
import glob
import time
# Cargar los módulos del kernel necesarios
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

# Buscar el archivo para leer la temperatura
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

# Leer todo el archivo para procesarlo luego
def read_temp_raw():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines

# Lee la temperatura verificando que este disponible
def read_temp():
    lines = read_temp_raw()
    # Verificar que al final de la primera linea se encuentre una lectura exitosa.
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c, temp_f

# Leer por siempre haciendo una breve pausa cada 1 segundo
while True:
	print(read_temp())
	time.sleep(1)

Luego de subir el script al raspberry podemos probar como funciona corriendo sudo python leer.py

temperature

Conclusión

Hemos visto que leer la temperatura con nuestro raspberry pi ha sido muy fácil, es un proyecto muy rápido y que nos va ser muy útil cuando tengamos que hacer el control de la temperatura.

comments powered by Disqus