
El año pasado editamos una nota sobre el bus NoCAN. Ahora publicaremos una estación climatológica.
Como primer paso hay que definir en qué parte del jardín se instalará el sensor BME280 que interecturá con el controlador CANZERO. Este es un sensor integrado que mide la presión atmosférica en un rango de 30 kPa a 110 kPa, así como la humedad y temperatura relativas. Posee una interfaz SPI de 3.3V, una interfaz I2C tolerante a 5V (con resistencias pull-up a 3.3V. La placa de conexión BME280 tiene 10 pines, pero no se utilizan más de seis a la vez. El lado izquierdo de la placa proporciona alimentación, tierra y pines I2C.
El sensor BME280 se puede conectar a un Arduino o cualquier microcontrolador con I2C o SPI, y funciona a 3.3V. Para nuestra conexión al CANZERO, elegimos SPI, pero sería fácil cambiar a I2C si fuera necesario. El CANZERO funciona a 3.3V, por lo que no es necesario cambiar el nivel de voltaje aquí.El CANZERO comparte el mismo pinout que el Arduino MKR Zero. La conexión se resume en la tabla a continuación.
CANZERO / MKR Zero pin | BME280 pin |
7 | CS |
8 (MOSI) | SDI |
9 (SCK) | SCK |
10 (MISO) | SDO |
GND | GND |
3.3V | 3.3V |
Aquí podemos ver el conexionado del sensor:
Instalación
Se instaló un Raspberry Pi modelo B + con un PiMaster afuera en el jardín en una gran caja eléctrica que está bien protegida del agua (con clasificación IP65). Dos cables externos llevan la red eléctrica y Ethernet al gabinete. Una pequeña fuente de CC transforma la red eléctrica a 12V DC, alimentando el PiMaster, el Raspberry Pi y toda la red NoCAN con una sola conexión. El cable Ethernet proporciona un enlace de red robusto entre la casa y la Raspberry Pi. El tutorial describe la conexión de Raspberry Pi, PiMaster y el cableado asociado. Como se sugiere en el tutorial, también utilizamos cables UTP (Ethernet) para construir nuestra red NoCAN, como se muestra en la imagen a continuación.
Los cables UTP que pueden ser utilizados con la red NoCAN se conectan al nodo CANZERO, que se instaló en una pequeña caja eléctrica cuadrada de 8 cm, como se muestra a continuación. El sensor se aisló del CANZERO con algo de envoltura de plástico, para exponer el sensor al ambiente exterior mientras no se expone el CANZERO. Aunque protegimos el sensor de la lluvia y de cualquier contacto directo con el agua, la placa BME280 probablemente no está diseñada para exponerse de esa manera a los elementos y es probable que falle a largo plazo sin medidas de protección adicionales (por ejemplo, revestimiento conformado )
Para obtener una descripción de la instalación y conexión de un nodo CANZERO, remitimos al lector al tutorial correspondiente.
Los cables UTP se colocan en tubos eléctricos flexibles, aislándolos de la humedad en el jardín.
El hardware ya está completo: ¡es hora de pasar al software!Iniciamos sesión en Raspberry Pi con un terminal shell e instalamos nocand, siguiendo las instrucciones detalladas del tutorial.
Una buena forma de no ejecutar y ejecutar en segundo plano es utilizar la utilidad de pantalla, simplemente escribiendo:
screen ./nocand
Si pierdes la conexión de shell a Raspberry Pi, podés iniciar sesión nuevamente y volver a conectarse a la sesión escribiendo screen-r. Puedes desconectarte de una sesión de pantalla en cualquier momento escribiendo Ctrl-a d en el teclado. En esta etapa, el firmware que es necesario para conducir el BME280 aún no está instalado en el CANZERO, pero es bueno verificar que la red esté conectada correctamente, utilizando los siguientes indicadores:
- El LED verde en el nodo CANZERO debe estar completamente encendido, sin parpadear.
- El uso de la herramienta nocanc y escribir nocanc list-node debería enumerar el nodo CANZERO como está instalado en la red.
Desarrollo del firmware con Arduino
Escribiremos el firmware BME280 de nuestro nodo CANZERO como un boceto en el IDE de Arduino. Suponemos que la descripción de la placa CANZERO ya se ha instalado en el IDE.También necesitaremos instalar las librerias necesarias para usar el sensor BME280. Cuando inicialmente comenzamos a jugar con el BME280, descubrimos que la solución más simple era usar la librería «Adafruit BME280» (a pesar de usar un sensor SparkFun). Para descargar la librería Adafruit BME280, vaya a Sketch > Include Library > Manage Libraries y use el cuadro de búsqueda para localizar adafruit bme280. También es probable que necesite la librería «Adafruit Unified Sensor», que se puede encontrar en Sketch > Include Library > Manage Libraries y buscando Adafruit Unified Sensor. Utilizamos el siguiente boceto.
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <nocan.h>
#define BME_SCK 9
#define BME_MISO 10
#define BME_MOSI 8#define BME_CS 7
#define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme(BME_CS);
// hardware SPI unsigned long delayTime;
NocanChannelId temperatureChannel, humidityChannel, pressureChannel, altitudeChannel;
void setup() { // put your setup code here, to run once:
Nocan.open();
Nocan.registerChannel(«bme280/temperature», &temperatureChannel); Nocan.registerChannel(«bme280/humidity», &humidityChannel); Nocan.registerChannel(«bme280/pressure», &pressureChannel); Nocan.registerChannel(«bme280/altitude», &altitudeChannel);
bool status;
// default settings status = bme.begin();
if (!status) { while (1); }
delayTime = 10000;
delay(100); // let sensor boot up}
void loop() {
publishFloat(temperatureChannel, bme.readTemperature()); publishFloat(humidityChannel, bme.readHumidity());
publishFloat(pressureChannel, bme.readPressure());
publishFloat(altitudeChannel, bme.readAltitude(SEALEVELPRESSURE_HPA)); delay(delayTime);}
void publishFloat(NocanChannelId cid, float f){ String f_s = String(f, 2); Nocan.publishMessage(cid, f_s.c_str());}
La rutina crea 4 canales llamados «bme280 / temperature», «bme280 / humidity», «bme280 / presure» y «bme280 / altitude» respectivamente. Luego, cada 10000 milisegundos (10 segundos), leemos los datos del sensor y los transmitimos en canales dedicados. Nota: Otros nodos CANZERO podrían agregarse a la red y suscribirse a estos canales, y reaccionar a su valor, por ejemplo, activando un calentador en un invernadero cuando la temperatura cae por debajo de un cierto umbral. Una vez compilado y exportado a un binario compilado (vea Sketch > Export Compiled Binary en el IDE), el firmware se puede cargar en el CANZERO con la herramienta nocanc, que generalmente debe instalarse en la misma máquina que el Arduino IDE:
$ ./nocanc upload ~/Documents/Arduino/nocan_bme280/nocan_bme280.ino.omzlo_canzero.hex 1Progress: 100%, 0 bytes, 0 bps
Done
Toma de datos:
La forma más sencilla de recopilar datos meteorológicos es utilizar la utilidad nocanc para enumerar los canales existentes. Suponiendo que solo tiene un nodo CANZERO en su red, la salida del comando debería verse como en el siguiente ejemplo.
$ ./nocanc list-channels
# Channels:
UPDATED #0 bme280/temperature «18.51»
UPDATED #1 bme280/humidity «85.07»
UPDATED #2 bme280/pressure «96464.69»
UPDATED #3 bme280/altitude «412.75»Para leer un canal en particular, puede usar nocanc read-channel con el nombre del canal como parámetro:
./nocanc read-channel bme280/temperature
UPDATED #0 bme280/temperature «18.44»
Puede procesar aún más la salida de este comando en un script. Por ejemplo, en un sistema Linux o Mac OS X, podría escribir:
TEMPERATURE=`./nocanc read-channel bme280/temperature | cut -f 4`
echo «The temperature is $(eval echo $TEMPERATURE) Celcius»
Si el canal bme280 / temperature lee un valor de «18.44», estos comandos darán como resultado La temperatura es 18.44 Celcius.
En la próxima edición publicaremos como conectar este proyecto a internet y monitorear los parámetros con Blynk.
Fuentes:
Esta nota fue publicada gracias a la autorización de Alain Pannetrat for Omzlo.
Sé el primero en comentar