Sesión 4-2

Construye tu Estación Meteorológica

El Sensor BME280

En esta sesión vamos a utilizar el sensor BME280, un sensor fabricado por la empresa Bosh, parte de una familia de sensores para monitorear distintas variables meteorológicas y de los que con este modelo vamos a monitorear 3 variables; la temperatura, la humedad relativa y la presión barométrica.

Algunas de las especificaciones de este sensor son las siguientes. Trabaja con voltajes entre 1.8 y 3.3 volts, mide la presión barométrica entre los rangos de 300 a 1100 hPa, la temperatura entre -40 y 85°C y la humedad relativa entre el 0 y 100%.

Este sensor puede ser controlado con 2 de los protocolos de comunicación mas utilizados entre dispositivos electrónicos, el I2C, Inter Integrated Circuit y el SPI, Serial Peripheral Interface. Nosotros lo haremos utilizando el protocolo I2C.

Con la gran cantidad y diversidad de dispositivos que ya es posibe interconectar con los microcontroladores, sería muy difícil y poco eficiente tener metodos o protocolos de comunicación distintos para cada uno de estos. Es por ello que se han venido desarrollando varios de éstos y son algunos, como el I2C y el SPI, los que se han ido adoptando como un estandar por un gran número de fabricantes.

Con el I2C el microcontrolador actua como el dispositivo maestro y en este caso será el sensor BME280 el esclavo. Este protocolo utiliza dos cables o líneas de comunicación: el reloj (SCL, Serial Clock) y la línea de datos (SDA, Serial Data). Es el dispositivo maestro el que genera la señal de reloj y el que inicializa la transferencia de los datos con el dispositivo esclavo.

Cada uno de los dispositivos que soportan I²C, tiene una dirección predeterminada por el fabricante, la cual está definida en hardware y generalmente está impresa en el circuito. En muchos dispositivos es posible cambiar entre dos direcciones, haciendolo mediante una modificación sencilla en el circuito.

Componentes

Los componentes que utilizaremos en estos proyectos son:

  • El protoboard con el microcontrolador
  • El sensor BME280
  • Jumpers para la interconexión

El sensor BME280

El sensor BMP280 lo podemos encontrar en muy diversos dispositivos y tarjetas. La que nosotros vamos a utilizar es una tarjeta con 6 pines.

Dos de estos pines son los pines de alimentación, VCC para alimentarla con un voltaje de 3.3 volts y que conectaremos a la salida de voltaje de la tarjeta del microcontrolador y GND que es el pin de tierra, que conectaremos a uno de los pines de tierra de la tarjeta del microcontrolador.

Los otros dos pines que deberemos conectar con los respectivos pines de I2C del microcontrolador, son el pin de la señal del reloj, SCL Serial Clock, que conectaremos al pin 1 de la tarjeta y el pin de datos, SDA, Serial Data, que conectaremos al pin 0 de la tarjeta.

Circuito

Este es el circuito para la conexión del sensor

Diagrama

Este es el diagrama de la conexión

Código

Para la programación de este proyecto vamos a necesitar una biblioteca de MicroPython que nos permita conectarnos con el sensor BME280 y poder interactuar con el.

No es una biblioteca estandar que ya este en el firmware de MicroPython que tenemos ya instalado. Para poder utilizarla, vamos a necesitar cargar esta biblioteca en nuestra tarjeta y para ello vamos a utilizar el IDE Thonny.

Con la tarjeta Raspberry Pi Pico ya conectada, desde la opción Tools > Manage Packages del Tonny, nos abrirá la ventana del Manejador de Paquetes.

Desde Tools > Manage Packages nos abre esta ventana.

En la ventana de busqueda ponemos el nombre de la biblioteca que queremos instalar y nos mostrará la lista de paquetes disponibles para este sensor.
Seleccionamos la de micropython-bme280 y le pedimos que la instale.

Esta biblioteca la instalará en el sistema de archivos del MicroPython en el microcontrolador y lo hará en el subdirectorio /lib.

Una vez que termine con la instalación, desde la ventana del REPL de Tonny, podemos pedirle que importe esta biblioteca y así podemos comprobar que ha sido instalada correctamente.

 import bme280

Ya en nuestro codigo importaremos las otras bibliotecas necesarias, bibliotecas que ya hemos utilizado, pero de las que en este caso solo importaremos algunos de sus modulos.

from machine import Pin, I2C  # de machine importa Pin e I2C         
from utime import sleep       # de utime importa sleep

Para comunicarnos con el sensor utilizando el protocolo I2C, creamos un objeto I2C al que le pasamos 4 parámetros.

El primero es el canal de I2C que usaremos.

El segundo es el pin GPIO de la tarjeta que está conectado a la linea SDA.

El tercero es el pin GPIO de la tarjeta que está conectado a la linea SCL.

En el último parámetro definimos la frecuencia de comunicación de la conexión.

Por como importamos la biblioteca I2C no es necesario ponerlo como machine.I2C.

    i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=40000)

Creamos después un objeto para el sensor utilizando el protocolo I2C y en un ciclo infinito haremos la lectura de los datos y los imprimiremos.

    bme = bme280.BME280(i2c=i2c)
    print(bme.values)

Este sería el codigo completo en un script

from machine import Pin, I2C  # de machine importa solo Pin y I2C
from utime import sleep       # de la biblioteca utime importa sleep
import bme280                 # importa la biblioteca del sensor

i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=40000) # definimos el I2C

while True:                  # en un ciclo while infinito
 
    bme = bme280.BME280(i2c=i2c) # creamos el objeto para el sensor
    print(bme.values)            # imprimimos los datos
    sleep(10)                    # hacemos una pausa
    

Los valores que nos devuelve el método bme.values es una lista de microPython con los valore de temperatura, presión y humedad.

En otra versión de nuestro script, podemos asignar los valores de la lista a variables para cada uno de estos valores. Esto puede ser útil si los queremos manejar individualmente.

from machine import Pin, I2C  # de machine importa Pin y I2C
from time import sleep        # de utime importa sleep
import bme280                 # importa biblioteca del sensor bme280

i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=40000)  # definimos el I2C

while True:
    
    bme = bme280.BME280(i2c=i2c)
    
    temperatura = bme.values[0]    # el valor de la temperatura
    presion     = bme.values[1]    # el valor de la presion
    humedad     = bme.values[2]    # el valor de la humedad
   
    print('Temperatura = ', temperatura)  # imprimimos los valores
    print('Presion Bar = ', presion)      # uno por uno
    print('Humedad     = ', humedad)
    print()

    sleep(10)                             # hacemos una pausa

Como lo hemos hecho con otros sensores, mientras se ejecuta el script, acerca tu mano al sensor y ve si se producen cambios.

Referencias

www.ruoa.unam.mx/pembu/curso-ema/sesion-4-2/

Deslizar arriba