Sensor de temperatura, humedad y luminosidad en Raspberry Pi

Temperature Sensor IRP102

Sensor de temperatura, humedad y luminosidad en Raspberry Pi

14 Febrero, 2016 DIY, Raspberry Pi 0

En este tutorial vamos a explicar cómo dotar a la Raspberry PI de un sensor de temperatura y humedad y uno de luminosidad. Con el sensor de luminosidad conseguiremos un control del brillo de la pantalla automático, según la luz ambiental.
Podemos convertir fácilmente nuestra Raspberry en una estación meteorológica que incluirá también la hora del próximo orto y ocaso y el calendario lunar.

Para conseguirlo vamos a necesitar el siguiente hardware:

  • HAT Board IRP-102
  • Sensor de temperatura y humedad SHT21 por I2C. Alternativamente sonda temperatura 1-wire
  • Sensor de luminosidad LDR (fotoeléctrico) conectado al ADC o en su defecto, un módulo YL-40 por I2C)
  • 4 cables
  • Pantalla SPI, en nuestro caso TFT 320x240px color

Como alternativa al dispositivo SHT21, que incorpora sensor de humedad y temperatura, se puede utilizar una sonda de temperatura del tipo 1-wire. El código fuente que vamos a desarrollar en este tutorial buscará una sonda 1-wire en caso de no detectar el SHT21.

En referencia al sensor de luminosidad, hemos utilizado una fotocélula LDR cuyo coste es muy bajo en relación a la otra opción disponible: el módulo YL-40 que provee una de estas fotocélulas pero con interfaz I2C. En el caso del LDR, éste debe de estar conectado a una entrada de ADC. Como en este tutorial estamos utilizando nuestra “HAT” IRP102, el ADC disponible tiene un divisor resistivo 1/10. Esto implica que los valores leídos en el ADC van a ser 10 veces menos que la salida del componente conectado. En este caso, se obtiene una sensibilidad correcta de la fotocélula, por lo que los valores que proporciona son válidos aplicando este divisor.

La aplicación que hemos programado es para Python por lo que es necesario instalarlo desde el repositorio. Este tutorial se ha realizado con Raspbian como sistema operativo. Como en cualquier instalación, para obtener las versiones más recientes de los paquetes que deseamos instalar vamos a ejecutar primero la siguiente instrucción:

Y si deseas realizar una actualización de los paquetes ya instalados debes ejecutar:

Si aún no tienes instalado Python deberás ejecutar (para Python 2 version):

No todos los paquetes de Python están disponibles en los repositorios de Raspbian, incluso algunos pueden estar desactualziados. Por este motivo, vamos a instalar la herramienta PIP (para Python version 2):

Instalamos la librería ephem que vamos a usar para mostrar la información relativa al orto, ocaso y calendario lunar. Se trata de una librería muy potente que puedes usar para muchas mas cosas que las utilizadas en este tutorial. Para ello ejecutamos:

Ahora activaremos el puerto I2C que va a ser usado por los sensores. Los pasos para hacerlo se describieron en la entrada ‘Configura un RTC (Reloj Tiempo Real) en tu Raspberry Pi’.
Realiza los pasos 2 y 3. Para este tutorial, el paso 4 difiere levemente por lo que lo describimos a continuación:

4. Carga de módulos durante el arranque

Editamos el fichero rc.local

y añadimos las siguientes líneas justo antes del exit 0

Si el proyecto lo estamos realizando con una sonda 1-wire deberemos añadir adicionalmente las siguientes lineas en este mismo fichero:

Salimos del editor guardando los cambios y reiniciamos con sudo reboot.
SOLO para quienes vayan a utilizar el módulo el YL-40 para hacer uso de su sensor de luminosidad debemos instalar su controlador desde los repositorios ejecutando:

Si todo ha ido bien, al repetir el comando i2cdetect -y 1 deberíamos obtener:

Los caracteres UU indican que el dispositivo que ocupa dicha dirección está en uso.

5. Instalación Display SPI para mostrar los datos de los sensores

Para poner en funcionamiento el display por primera vez puedes seguir el tutorial ‘Maneja un LCD de 2.2″ desde tu Raspberry Pi con Python’.

6. Descarga código fuente

Una vez tengamos todo funcionando: Python para la aplicación, I2C para los sensores y SPI para el display, solo nos queda descargar el código fuente utilizado que tenemos disponible en el siguiente enlace:
http://ingeniapp.com/sources/weather_station/
o simplemente

desde la consola.

7. Descripción de cada módulo de la aplicación

gy21.py: Módulo para la lectura por I2C de los sensores.

Función para obtener el valor de la humedad

Función para obtener el valor de la temperatura:

adc.py: Módulo para la lectura de los canales del ADC. En el canal 0 leemos el sensor de luminosidad LDR.

Función para obtener el valor del LDR

weather_station.py: Main de la aplicación.

Es importante recordar que para poder utilizar el display y los sensores se deben importar sus módulos:

Para mostrar los datos de orto, ocaso y calendario lunar se deben añadir los siguientes módulos:

Destacamos también la opción disponible en el código fuente para activar el sensor de luminosidad según el dispositivo que vayamos a usar. Está definida en las lineas siguientes a los import
Por defecto está configurado para utilizar un LDR:

En caso de utilizar el módulo YL-40 se debería cambiar el valor de la variable a 1:

Función para mostrar en el display los valores leídos de temperatura y humedad, la hora del próximo orto y ocaso y la fecha de la próxima luna nueva y luna llena. Se muestra también la fecha, día de la semana y hora actual. Dependiendo de los sensores detectados durante el arranque de la aplicación, podrá tomar el valor de temperatura de una sonda 1-wire si no existiera conexión con el sensor SHT21.

Función para el ajsute de brillo de la pantalla según el nivel de luz ambiental:

Definimos este módulo como el main de la aplicación y su contenido contendrá el hilo principal:

 

NOTA:

Hemos añadido un parámetro adicional llamado ‘bgcolor‘ en la función ‘def draw_rotated_text‘ (función escrita en el driver de la pantalla) para permitir cambiar el color de fondo del texto. De esta manera indicaremos el color sobre el cual estamos escribiendo.

 

8. Visualización de la aplicación Estación Meteorológica

Pantalla Estación Meteorológica (Día)

Utilizamos las horas de orto y ocaso para cambiar la pantalla de visualización. Pasado el ocaso se muestra el modo noche y pasado el orto se muestra el modo día. Hacemos uso del sensor de luminosidad para cambiar el nivel de brillo de la pantalla.

About the author

IngeniApp:

0 Comentarios

Would you like to share your thoughts?

Your email address will not be published. Required fields are marked *

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR