Hace tiempo quería hacer algo con la Raspberry Pi a nivel electrónico, de hecho, este Raspberry Pi lo compré con un kit de electrónica básica. El problema es que no lo compré con un manual y yo sé la nada misma sobre electrónica. Como este equipo sólo está alojando un sitio web y poco más, decidí hacer algo sencillo. Algo que quería saber era la temperatura de la habitación a través de un sensor. Hay varios tipos de sensores de temperatura pero el más sencillo y básico es el DS18B20 que permite medir temperatura con un simple sensor y que también se puede encontrar en versión sumergible con un cable para medir temperatura de agua por ejemplo.

El hardware

Yo utilizo un Raspberry Pi antiguo, @arandano es un Raspberry Pi 1B rev. 2.

Fui a AliExpress y encontré este adaptador para el ds18b20:

DS18B20 de TZT

Es el DS18B20 con una plaquita adaptadora. La gracia es que con ella no necesitas un breadboard ni poner resistencias como sugiere la mayoría de los tutoriales que no es mucho más difícil pero sí es más engorroso de mantener. Además puedes comprar la sonda del largo que quieras (entre 1 y 3 metros, supongo que otras tiendas tendrán largos mayores). Me llegó en dos semanas de AliExpress y en cuanto tuve tiempo uní las partes. Un detalle importante: El Raspberry Pi tiene que tener sus patitas presoldadas, de lo contrario tendrías que soldar las uniones o soldarle “las patitas”. Por lo demás, entiendo que el Raspberry Pi tiene pines estándar en todas las versiones así que debería ser muy parecido (y vamos a usar los primeros pines). Documentación oficial de pines GPIO.

Una vez recibidas las piezas (cables, sonda y adaptador) es sólo cosa de conectar todo en orden:

  • La sonda (el cable largo con terminación metálica) a la entrada atornillable
  • Unir los cables con terminaciones hembra a los pines del otro extremo de la placa
  • El otro extremo de los cables hembra al Raspberry Pi.

Todo esto con el Raspberry Pi apagado, por supuesto.

Sonda y adaptador unidos

Los pines que se unen son:

El cable de tierra (GND) va al sexto pin (contando de abajo hacia arriba de izquierda a derecha). El cable de energía (VCC) al primer pin (entrega 3,3 volts) y el cable de datos (DATA) al séptimo pin físico del Raspberry Pi (GPIO 4). En el caso de mi Raspberry Pi 1B rev. 2 la lista de pines es así:

lista de pines rpi 1B rev. 2

Si tienes dificultades para encontrar los pines o no estás seguro, es recomendable instalar en Raspbian python3-gpiozero que contiene la herramienta pinout que permite ver en pantalla el orden de los pines de acuerdo a tu modelo real de Raspberry Pi.

También es importante señalar que para que funcione el cableado hemos de habilitar en raspi-config (en opciones de interfaz) el protocolo 1-wire.

El software

Si conectamos todo y habilitamos el protocolo 1-wire, reiniciamos para que los cambios se habiliten y luego probamos los siguientes módulos:

sudo modprobe wire
sudo modprobe w1-gpio
sudo modprobe w1-therm

Luego vamos a /sys/bus/w1/devices/ y listamos para ver si nuestra Raspberry Pi ha detectado el sensor:

cd /sys/bus/w1/devices/
ls

Si no aparece nada y ya habilitamos 1-wire en raspi-config recomiendo revisar el cableado, los pines que estamos ocupando, etc. Si todo está bien debería aparecer algo parecido a lo siguiente al listar lo de arriba:

28-012063e4354f  w1_bus_master1

El código del primer archivo varía pero tiene un formato similar. De aparecer algo así ya estamos del otro lado.

cat /sys/bus/w1/devices/28-012063e4354f/w1_slave

83 01 4b 46 7f ff 0c 10 a2 : crc=a2 YES
83 01 4b 46 7f ff 0c 10 a2 t=24187

Donde t=24187 es la temperatura detectada por la sonda en grados Celsius multiplicada por 1000. Sólo toca dividirla.

En Internet hay scripts que permiten leer la temperatura con un simple comando, pero lo más sencillo es hacer esto:

#!/bin/bash

tempsenso=$(grep "t=" /sys/bus/w1/devices/28-012063e4354f/w1_slave | cut -d\= -f2)
temp=`echo "scale=2; "\`echo ${tempsenso##*=}\`" / 1000" | bc`
day=`date +"%d-%m-%Y"`
time=`date +"%r"`
echo "La temperatura el $day a las $time es de " $temp "°C"

Reemplaza la ruta de la primera variable con la de tu sensor.

Para que los módulos del sensor se carguen en cada reinicio debemos abrir (con sudo) el archivo de sistema /etc/modules y agregar w1-gpio y w1-therm (uno por línea)

Conclusión

Es un proyecto muy simple pero efectivo. Sin embargo, este sensor es el más básico que hay y en mi opinión está mejor preparado para tomar temperaturas de líquidos o en exteriores pero no es capaz de medir humedad como el sensor DHT11/22. Otra idea posible es añadir un LCD y mostrar la salida directamente en ella ya que hasta ahora necesito loguearme en la máquina para leer la salida o en el mejor de los casos entrar a una página web que muestre la temperatura.