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 necesariosArduino Pro MiniI2C para LCD (fue posible ordenar inmediatamente ensamblado, pero resultó un poco más barato)
LCD 1602BME280Se 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 programaDesde China, USB-UART vino con un conjunto de cables:

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:
SparkFunBME280LiquidCrystal I2CDirectamente 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:
Y la dirección será 0x3F desde A0 - A2 abierto:

El LED que está encerrado en un círculo en el óvalo es
mejor para evaporarse.
Diagrama de cableadoLa 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).

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).

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.
ResumenEn 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
Lugar de trabajo, vista general.

Vista frontal

Vista trasera