Tabla de contenido:

Estación meteorológica personal con Raspberry Pi con BME280 en Java: 6 pasos
Estación meteorológica personal con Raspberry Pi con BME280 en Java: 6 pasos

Video: Estación meteorológica personal con Raspberry Pi con BME280 en Java: 6 pasos

Video: Estación meteorológica personal con Raspberry Pi con BME280 en Java: 6 pasos
Video: BMP280 Raspberry Pi Pico W Proyecto IoT en la nube Thingspeak | Presión y Temperatura | MicroPython 2024, Mes de julio
Anonim
Image
Image
Lista de equipos esenciales
Lista de equipos esenciales

El mal tiempo siempre se ve peor a través de una ventana

Siempre nos ha interesado monitorear nuestro clima local y lo que vemos por la ventana. También queríamos un mejor control de nuestro sistema de calefacción y aire acondicionado. La construcción de una estación meteorológica personal es una gran experiencia de aprendizaje. Cuando termine de construir este proyecto, comprenderá mejor cómo funcionan las comunicaciones inalámbricas, cómo funcionan los sensores y cuán poderosa puede ser la plataforma Raspberry Pi. Con este proyecto como base y la experiencia adquirida, podrá construir fácilmente proyectos más complejos en el futuro.

Paso 1: Lista de equipos esenciales

Lista de equipos esenciales
Lista de equipos esenciales
Lista de equipos esenciales
Lista de equipos esenciales
Lista de equipos esenciales
Lista de equipos esenciales

1. Una Raspberry Pi

El primer paso es conseguir una placa Raspberry Pi. Raspberry Pi es una computadora de placa única con Linux. Su objetivo es mejorar las habilidades de programación y la comprensión del hardware. Fue rápidamente adoptado por aficionados y entusiastas de la electrónica para proyectos innovadores.

2. Escudo I²C para Raspberry Pi

El INPI2 (adaptador I2C) proporciona a la Raspberry Pi 2/3 un puerto I²C para usar con varios dispositivos I²C. Está disponible en Dcube Store

3. Sensor digital de humedad, presión y temperatura, BME280

El BME280 es un sensor de humedad, presión y temperatura que tiene un tiempo de respuesta rápido y una alta precisión general. Compramos este sensor en Dcube Store

4. Cable de conexión I²C

Teníamos el cable de conexión I²C disponible en Dcube Store

5. Cable micro USB

La fuente de alimentación del cable micro USB es una opción ideal para alimentar la Raspberry Pi.

6. Interprete el acceso a Internet a través del adaptador EthernetCable / WiFi

Una de las primeras cosas que querrá hacer es conectar su Raspberry Pi a Internet. Podemos conectarnos mediante un cable Ethernet. Otra posibilidad es que pueda conectarse a una red inalámbrica mediante un adaptador inalámbrico USB.

7. Cable HDMI (cable de conectividad y pantalla)

Cualquier monitor HDMI / DVI y cualquier televisor debería funcionar como pantalla para el Pi. Pero es opcional. Tampoco se puede descartar la posibilidad de acceso remoto (como SSH). También puede obtener acceso con el software PUTTY.

Paso 2: Conexiones de hardware para la configuración

Conexiones de hardware para la configuración
Conexiones de hardware para la configuración
Conexiones de hardware para la configuración
Conexiones de hardware para la configuración

Realice el circuito según el esquema que se muestra.

Mientras aprendíamos, adquirimos a fondo los conceptos básicos de la electrónica con respecto al conocimiento de hardware y software. Queríamos elaborar un esquema electrónico simple para este proyecto. Los esquemas electrónicos son como un modelo para la electrónica. Dibuja un plano y sigue el diseño cuidadosamente. Hemos aplicado algunos conceptos básicos de la electrónica aquí. La lógica te lleva de A a B, ¡la imaginación te llevará a todas partes!

Conexión de Raspberry Pi y I²C Shield

En primer lugar, tome la Raspberry Pi y coloque el escudo I²C (con el puerto I²C orientado hacia adentro) en él. Presione el Shield suavemente sobre los pines GPIO de Pi y terminamos con este paso tan fácil como un pastel (vea la imagen).

Conexión del sensor y Raspberry Pi

Tome el sensor y conecte el cable I²C con él. Asegúrese de que la salida I²C SIEMPRE se conecte a la entrada I²C. Lo mismo se debe seguir para la Raspberry Pi con el escudo I²C montado sobre los pines GPIO. Tenemos el escudo I²C y los cables de conexión de nuestro lado como un gran alivio y una gran ventaja ya que nos quedamos solo con el Opción plug and play. No más problemas de pines y cableado y, por lo tanto, la confusión se ha ido. Imagínese en la red de cables y en eso. Un alivio de eso. Esto simplifica las cosas.

Nota: El cable marrón siempre debe seguir la conexión de tierra (GND) entre la salida de un dispositivo y la entrada de otro dispositivo

La conectividad a Internet es una necesidad

De hecho, tienes una opción aquí. Puede conectar Raspberry Pi con el cable LAN o el adaptador Nano USB inalámbrico para conectividad WIFI. De cualquier manera, el manifiesto es conectarse a Internet, lo cual se logra.

Encendido del circuito

Enchufe el cable Micro USB en el conector de alimentación de Raspberry Pi. ¡Golpea y listo! Todo está listo y comenzaremos de inmediato.

Conexión a la pantalla

Podemos tener el cable HDMI conectado a un monitor o un televisor. Podemos acceder a una Raspberry Pi sin conectarla a un monitor usando -SSH (Acceder a la línea de comandos de la Pi desde otro ordenador). También puede usar el software PUTTY para eso. Esta opción es para usuarios avanzados, por lo que no la cubriremos en detalle aquí.

Escuché que va a haber una recesión, he decidido no participar

Paso 3: Programación de Raspberry Pi en Java

Programación Raspberry Pi en Java
Programación Raspberry Pi en Java

El código Java para el sensor Raspberry Pi y BME280. Está disponible en nuestro repositorio de Github.

Antes de continuar con el código, asegúrese de leer las instrucciones dadas en el archivo Léame y configure su Raspberry Pi de acuerdo con él. Solo tomará un momento hacerlo. Una estación meteorológica personal es un conjunto de instrumentos de medición del tiempo operados por un individuo, club, asociación o incluso empresa privada. Las estaciones meteorológicas personales pueden funcionar únicamente para el disfrute y la educación del propietario, pero muchos operadores de estaciones meteorológicas personales también comparten sus datos con otros, ya sea compilando datos manualmente y distribuyéndolos, o mediante el uso de Internet o radioaficionados.

El código está en la forma más simple que pueda imaginar y no debería tener ningún problema con él, pero pregunte si lo ha hecho. Incluso si sabes mil cosas, pregúntale a alguien que sepa.

También puede copiar el código Java de trabajo para este sensor desde aquí.

// Distribuido con licencia de libre albedrío.// Úselo de la forma que desee, lucrativa o gratuita, siempre que encaje en las licencias de sus obras asociadas. // BME280 // Este código está diseñado para funcionar con el mini módulo BME280_I2CS I2C disponible en ControlEverything.com. //

import com.pi4j.io.i2c. I2CBus;

import com.pi4j.io.i2c. I2CDevice; import com.pi4j.io.i2c. I2CFactory; import java.io. IOException;

clase pública BME280

{public static void main (String args ) throws Exception {// Crear bus I2C bus I2CBus = I2CFactory.getInstance (I2CBus. BUS_1); // Obtener el dispositivo I2C, la dirección BME280 I2C es 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Leer 24 bytes de datos de la dirección 0x88 (136) byte b1 = new byte [24]; device.read (0x88, b1, 0, 24); // Convertir los datos // coeficientes temporales int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] y 0xFF) + ((b1 [3] y 0xFF) * 256); si (dig_T2> 32767) {dig_T2 - = 65536; } int dig_T3 = (b1 [4] y 0xFF) + ((b1 [5] y 0xFF) * 256); si (dig_T3> 32767) {dig_T3 - = 65536; } // coeficientes de presión int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] y 0xFF) + ((b1 [9] y 0xFF) * 256); si (dig_P2> 32767) {dig_P2 - = 65536; } int dig_P3 = (b1 [10] y 0xFF) + ((b1 [11] y 0xFF) * 256); si (dig_P3> 32767) {dig_P3 - = 65536; } int dig_P4 = (b1 [12] y 0xFF) + ((b1 [13] y 0xFF) * 256); si (dig_P4> 32767) {dig_P4 - = 65536; } int dig_P5 = (b1 [14] y 0xFF) + ((b1 [15] y 0xFF) * 256); si (dig_P5> 32767) {dig_P5 - = 65536; } int dig_P6 = (b1 [16] y 0xFF) + ((b1 [17] y 0xFF) * 256); si (dig_P6> 32767) {dig_P6 - = 65536; } int dig_P7 = (b1 [18] y 0xFF) + ((b1 [19] y 0xFF) * 256); si (dig_P7> 32767) {dig_P7 - = 65536; } int dig_P8 = (b1 [20] y 0xFF) + ((b1 [21] y 0xFF) * 256); si (dig_P8> 32767) {dig_P8 - = 65536; } int dig_P9 = (b1 [22] y 0xFF) + ((b1 [23] y 0xFF) * 256); si (dig_P9> 32767) {dig_P9 - = 65536; } // Leer 1 byte de datos de la dirección 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Leer 7 bytes de datos de la dirección 0xE1 (225) device.read (0xE1, b1, 0, 7); // Convertir los datos // coeficientes de humedad int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); si (dig_H2> 32767) {dig_H2 - = 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] y 0xFF) * 16) + (b1 [4] y 0xF); si (dig_H4> 32767) {dig_H4 - = 65536; } int dig_H5 = ((b1 [4] y 0xFF) / 16) + ((b1 [5] y 0xFF) * 16); si (dig_H5> 32767) {dig_H5 - = 65536; } int dig_H6 = b1 [6] & 0xFF; si (dig_H6> 127) {dig_H6 - = 256; } // Seleccione el registro de control de humedad // Humedad sobre la frecuencia de muestreo = 1 dispositivo.write (0xF2, (byte) 0x01); // Seleccione el registro de medición de control // Modo normal, temperatura y presión sobre la frecuencia de muestreo = 1 dispositivo.write (0xF4, (byte) 0x27); // Seleccione el registro de configuración // Tiempo de espera = 1000 ms device.write (0xF5, (byte) 0xA0); // Leer 8 bytes de datos de la dirección 0xF7 (247) // presión msb1, presión msb, presión lsb, temp msb1, temp msb, temp lsb, humedad lsb, humedad msb byte datos = nuevo byte [8]; device.read (0xF7, datos, 0, 8); // Convierta los datos de presión y temperatura a 19 bits de largo adc_p = (((largo) (datos [0] y 0xFF) * 65536) + ((largo) (datos [1] y 0xFF) * 256) + (largo) (datos [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Convierta los datos de humedad long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Cálculos de compensación de temperatura double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); double var2 = ((((doble) adc_t) / 131072.0 - ((doble) dig_T1) / 8192.0) * (((doble) adc_t) /131072.0 - ((doble) dig_T1) /8192.0)) * ((doble) dig_T3); doble t_fine = (largo) (var1 + var2); cTemp doble = (var1 + var2) / 5120.0; fTemp doble = cTemp * 1.8 + 32; // Cálculos de compensación de presión var1 = ((doble) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((doble) dig_P6) / 32768.0; var2 = var2 + var1 * ((doble) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((doble) dig_P4) * 65536.0); var1 = (((doble) dig_P3) * var1 * var1 / 524288.0 + ((doble) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((doble) dig_P1); doble p = 1048576.0 - (doble) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((doble) dig_P9) * p * p / 2147483648.0; var2 = p * ((doble) dig_P8) / 32768.0; presión doble = (p + (var1 + var2 + ((doble) dig_P7)) / 16.0) / 100; // Cálculos de compensación de humedad double var_H = (((double) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); doble humedad = var_H * (1.0 - dig_H1 * var_H / 524288.0); si (humedad> 100,0) {humedad = 100,0; } else if (humedad <0.0) {humedad = 0.0; } // Enviar datos a la pantalla System.out.printf ("Temperatura en grados Celsius:%.2f C% n", cTemp); System.out.printf ("Temperatura en Fahrenheit:%.2f F% n", fTemp); System.out.printf ("Presión:%.2f hPa% n", presión); System.out.printf ("Humedad relativa:%.2f %% RH% n", humedad); }}

Paso 4: La practicidad del código

La practicidad del código
La practicidad del código

Ahora, descargue (o git pull) el código y ábralo en la Raspberry Pi.

Ejecute los comandos para compilar y cargar el código en el terminal y vea la salida en Monitor. Después de unos momentos, filtrará todos los parámetros. Asegurándose de tener una transición de código sin problemas y un resultado tranquilo (ish), piensa en más ideas para hacer más modificaciones (cada proyecto comienza con una historia).

Paso 5: Utilización en el mundo constructivo

El BME280 logra un alto rendimiento en todas las aplicaciones que requieren medición de humedad y presión. Estas aplicaciones emergentes son la conciencia del contexto, p. Ej. Detección de piel, Detección de cambio de habitación, Monitoreo de condición física / Bienestar, Advertencia sobre sequedad o altas temperaturas, Medición de volumen y flujo de aire, Control de automatización del hogar, Control de calefacción, ventilación, Aire acondicionado (HVAC), Internet de las cosas (IoT), Mejora del GPS (por ejemplo, mejora del tiempo hasta la primera localización, navegación a estima, detección de pendientes), navegación interior (detección de cambio de piso, detección de ascensor), navegación al aire libre, aplicaciones deportivas y de ocio, pronóstico del tiempo e indicación de velocidad vertical (subida / caída Velocidad).

Paso 6: Conclusión

Como puede ver, este proyecto es una gran demostración de lo que el hardware y el software son capaces de hacer. ¡En poco tiempo, se puede construir un proyecto tan impresionante! Por supuesto, esto es solo el comienzo. Hacer una estación meteorológica personal más sofisticada como las estaciones meteorológicas personales de aeropuerto automatizadas puede involucrar algunos sensores más como anemómetro (velocidad del viento), transmisómetro (visibilidad), piranómetro (radiación solar), etc. Tenemos un video tutorial en Youtube que tiene el funcionamiento básico del Sensor I²C con Rasp Pi. Es realmente sorprendente ver los resultados y el funcionamiento de las comunicaciones I²C. Compruébalo también. ¡Diviértete construyendo y aprendiendo! Háganos saber lo que piensa de este instructivo. Nos encantaría hacer algunas mejoras si es necesario.

Recomendado: