Estación meteorológica (Arduino pro mini, BME280, LCD1602)

Introduccion

¿Qué se puede mostrar en una pantalla de dos líneas excepto "¡Hola, mundo!"? ¿Por qué no mostrar la temperatura, humedad y presión?

Los sensores ofrecidos como ayuda de entrenamiento para arduino (DHT11, DHT22) muestran la temperatura y la humedad. Para fines educativos (para la universidad) era necesario observar la presión de la misma manera. Naturalmente, el departamento tiene un barómetro, pero ¿por qué no recolectar el suyo? Además, puede acumular más lecturas en modo automático, y esta es una buena experiencia en el aprendizaje de arduino.

De una forma u otra, se ordenaron componentes de China y se ensambló este dispositivo.

Componentes necesarios

Arduino Pro Mini
I2C para LCD (fue posible ordenar inmediatamente ensamblado, pero resultó un poco más barato)
LCD 1602
BME280

Se usó USB-UART para enviar el boceto a arduino. También fue posible usar una Raspberry Pi o una computadora con un puerto COM.

Diagrama de conexión para firmware y código de programa

Desde China, USB-UART vino con un conjunto de cables:

imagen

Eran bastante suficientes. Dejé el puente a 3.3 voltios, a pesar de que mi versión arduino funciona con 5 voltios.

UART - Arduino
5v - VCC
TXD - RXD
RXD - TXD
GND - GND
CTS - DTR (opcional, no funcionó para mí, tal vez porque el voltaje de la señal se mantuvo 3.3V)

Si no conecta el DTR, luego de enviar el firmware de arduino debe reiniciar con el botón incorporado, el intercambio de datos activo comenzará en ambos lados (como lo indican los LED USB-UART), después de que el firmware se descargue correctamente, se reiniciará.

Bibliotecas de terceros necesarias:

SparkFunBME280
LiquidCrystal I2C

Directamente el código, con comentarios de los ejemplos (en caso de que alguien necesite cambiar algo).

Código
#include <stdint.h> #include "SparkFunBME280.h" #include "Wire.h" #include "SPI.h" #include <LiquidCrystal_I2C.h> //Global sensor object BME280 mySensor; LiquidCrystal_I2C lcd(0x3F,16,2); // ,    0x3F void setup() { lcd.init(); lcd.backlight(); //***Driver settings********************************// //commInterface can be I2C_MODE or SPI_MODE //specify chipSelectPin using arduino pin names //specify I2C address. Can be 0x77(default) or 0x76 //For I2C, enable the following and disable the SPI section mySensor.settings.commInterface = I2C_MODE; mySensor.settings.I2CAddress = 0x76; // ,      //For SPI enable the following and dissable the I2C section //mySensor.settings.commInterface = SPI_MODE; //mySensor.settings.chipSelectPin = 10; //***Operation settings*****************************// //renMode can be: // 0, Sleep mode // 1 or 2, Forced mode // 3, Normal mode mySensor.settings.runMode = 3; //    Forced mode,        Normal mode //tStandby can be: // 0, 0.5ms // 1, 62.5ms // 2, 125ms // 3, 250ms // 4, 500ms // 5, 1000ms // 6, 10ms // 7, 20ms mySensor.settings.tStandby = 5; //    //filter can be off or number of FIR coefficients to use: // 0, filter off // 1, coefficients = 2 // 2, coefficients = 4 // 3, coefficients = 8 // 4, coefficients = 16 mySensor.settings.filter = 0; //tempOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.tempOverSample = 1; //pressOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.pressOverSample = 1; //humidOverSample can be: // 0, skipped // 1 through 5, oversampling *1, *2, *4, *8, *16 respectively mySensor.settings.humidOverSample = 1; //Calling .begin() causes the settings to be loaded mySensor.begin(); } void loop() { //    ,    ,          . lcd.setCursor(0,0); lcd.print("H="); lcd.print((uint8_t)mySensor.readFloatHumidity()); lcd.print("%"); lcd.print(" T="); lcd.print(mySensor.readTempC()); lcd.setCursor(13,0); lcd.print(" P:"); lcd.setCursor(0,1); int mmH=mySensor.readFloatPressure()/133; lcd.print(mmH); lcd.print("mmH "); lcd.print(mySensor.readFloatPressure()); lcd.setCursor(14,1); lcd.print("Pa"); delay(1000); } 


La dirección del sensor se puede adivinar, solo hay dos de ellos.

Cómo averiguar la dirección de su pantalla, puede ver aquí . Dependiendo del chip, hay dos placas.

En este caso:

imagen

Y la dirección será 0x3F desde A0 - A2 abierto:

imagen

El LED que está encerrado en un círculo en el óvalo es mejor para evaporarse.

Diagrama de cableado

La resistencia se seleccionó como la mitad de la resistencia del sensor (entre VVC y GND), de modo que la caída de voltaje fue de 1.7 voltios. Además, el circuito puede alimentarse desde la entrada de RAW, otro voltaje (por ejemplo, desde la corona).

imagen

La foto muestra que, para ser compactos, puede llevar energía al sensor y mostrarlo desde otro pin. También muestra una rama de un par de cables naranja-amarillo, una resistencia de 100 ohmios cuelga de ellos para reducir el brillo de la luz de fondo (puede dejar el puente, pero le cortará los ojos).

imagen

En mi caso, todo funciona con una fuente de alimentación de computadora antigua. Puede ser alimentado por USB. Todos los componentes se pegaron con pegamento Moment, que estaba a la mano.

Resumen

En el lugar de trabajo apareció 1602 atornillado a la mesa, que muestra la presión, la humedad, la temperatura. Arduino se puede volver a actualizar sin quitarlo ( puede convertirse en una línea rastrera ).

Foto
imagen

Lugar de trabajo, vista general.

imagen

Vista frontal

imagen

Vista trasera

Source: https://habr.com/ru/post/es406693/


All Articles