Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Componentes y materiales

Arduino UNO × 1
Adafruit BMP280 × 1
Pantalla OLED Adafruit 128x32 I2C × 1

Sobre este proyecto

Bienvenidos a este tutorial donde utilizamos el sensor BMP280 para medir temperatura, presión y altitud con la ayuda de una placa Arduino UNO y una pantalla OLED. A continuación se muestran los parámetros clave del BMP280 según su hoja de datos:

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Para este proyecto utilizaremos el módulo para medir todos estos parámetros tanto en el sistema métrico como en el imperial. Aquí están los componentes que utilizaremos:

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Pruebas y solución de problemas

Después de cablear el módulo, es recomendable probar el código del ejemplo de la biblioteca llamado "BMP280test". Si el módulo no se detecta como en la imagen siguiente:

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Puede ejecutar el código del escáner I²C (pero desconecte cualquier otro dispositivo I²C como LCD u OLED). Si el módulo no está roto ni tiene problemas de soldadura, verá que el dispositivo es detectado por el escáner:

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Anote la dirección y vaya al archivo .cpp de la biblioteca, que normalmente se instala en "Documentos/Arduino/Libraries":

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Ábralo con un editor adecuado (yo uso Dev C++):

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Luego vaya a la línea 41 y cambie la "a" en _i2caddr por la dirección que encontró en el monitor serial:

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Guarde y cierre. La biblioteca está diseñada para funcionar con módulos que tienen 0x77 como dirección I²C, pero el que estoy usando tiene 0x76.

Ejecute el código de prueba nuevamente:

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Imágenes de prueba

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO
Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Espero que les funcione. Si tienen algún problema, déjenlo en los comentarios.

Código

Se proporcionan cuatro versiones del código para diferentes configuraciones:

Código para monitor serial (métrico)

/* Uso con Adafruit BMP280 (Métrico)
 * Mide temperatura, presión y altitud, los muestra en el monitor serial
 * Versión modificada del ejemplo de Adafruit
 * Referencia: www.surtrtech.com o canal SurtrTech Youtube */
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // Interfaz I2C

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  if (!bmp.begin()) {
    Serial.println(F("No se encuentra sensor BMP280 válido, revise conexiones!"));
    while (1);
  }
  /* Configuración por defecto del datasheet */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     // Modo de operación
                  Adafruit_BMP280::SAMPLING_X2,     // Sobremuestreo temp.
                  Adafruit_BMP280::SAMPLING_X16,    // Sobremuestreo presión
                  Adafruit_BMP280::FILTER_X16,      // Filtrado
                  Adafruit_BMP280::STANDBY_MS_500); // Tiempo standby
}

void loop() {
  Serial.print(F("Temperatura = "));
  Serial.print(bmp.readTemperature());
  Serial.println(" *C");
  Serial.print(F("Presión = "));
  Serial.print(bmp.readPressure()/100); // Presión en hPa
  Serial.println(" hPa");
  Serial.print(F("Altitud aprox = "));
  Serial.print(bmp.readAltitude(1019.66)); // 1019.66 hPa = presión a nivel del mar
  Serial.println(" m");
  Serial.println();
  delay(2000);
}

Código para monitor serial (imperial)

/* Uso con Adafruit BMP280 (Imperial)
 * Mide temperatura, presión y altitud, los muestra en el monitor serial
 * Versión modificada del ejemplo de Adafruit */
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  if (!bmp.begin()) {
    Serial.println(F("No se encuentra sensor BMP280 válido, revise conexiones!"));
    while (1);
  }
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
                  Adafruit_BMP280::SAMPLING_X2,
                  Adafruit_BMP280::SAMPLING_X16,
                  Adafruit_BMP280::FILTER_X16,
                  Adafruit_BMP280::STANDBY_MS_500);
}

void loop() {
  float f = bmp.readTemperature()*9/5 + 32; // Conversión °C a °F
  Serial.print(F("Temperatura = "));
  Serial.print(f);
  Serial.println(" *F");
  float P = bmp.readPressure()/3386.39; // Presión en pulgadas de mercurio
  Serial.print(F("Presión = "));
  Serial.print(P);
  Serial.println(" inHg");
  float A = bmp.readAltitude(1019.66)*3.28084; // Altitud en pies
  Serial.print(F("Altitud aprox = "));
  Serial.print(A);
  Serial.println(" ft");
  Serial.println();
  delay(2000);
}

Código para pantalla OLED (métrico)

/* Uso con Adafruit BMP280 y pantalla OLED (Métrico)
 * Muestra temperatura, presión y altitud en pantalla OLED */
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_BMP280.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_BMP280 bmp;

void setup() {
  bmp.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.display();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.print("SurtrTech");
  display.setCursor(32,12);
  display.setTextSize(2);
  display.println("BMP280");
  display.display();
  delay(2000);
}

void loop() {
  display.clearDisplay();
  float T = bmp.readTemperature();
  float P = bmp.readPressure()/100;
  float A = bmp.readAltitude(1019.66);

  display.setCursor(0,0);
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.print("Temp");
  display.setCursor(0,18);
  display.print(T,1);
  display.setCursor(50,17);
  display.setTextSize(1);
  display.print("C");
  display.setTextSize(1);
  display.setCursor(65,0);
  display.print("Pres");
  display.setCursor(65,10);
  display.print(P);
  display.setCursor(110,10);
  display.print("hPa");
  display.setCursor(65,25);
  display.print("Alt");
  display.setCursor(90,25);
  display.print(A,0);
  display.setCursor(110,25);
  display.print("m");
  display.display();
  delay(2000);
}

Código para pantalla OLED (imperial)

/* Uso con Adafruit BMP280 y pantalla OLED (Imperial) */
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_BMP280.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_BMP280 bmp;

void setup() {
  bmp.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.display();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.print("SurtrTech");
  display.setCursor(32,12);
  display.setTextSize(2);
  display.println("BMP280");
  display.display();
  delay(2000);
}

void loop() {
  display.clearDisplay();
  float T = bmp.readTemperature()*9/5 + 32;
  float P = bmp.readPressure()/3386.39;
  float A = bmp.readAltitude(1019.66)*3.28084;

  display.setCursor(0,0);
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.print("Temp");
  display.setCursor(0,18);
  display.print(T,1);
  display.setCursor(50,17);
  display.setTextSize(1);
  display.print("F");
  display.setTextSize(1);
  display.setCursor(65,0);
  display.print("Pres");
  display.setCursor(65,10);
  display.print(P);
  display.setCursor(100,10);
  display.print("inHg");
  display.setCursor(65,25);
  display.print("Alt");
  display.setCursor(90,25);
  display.print(A,0);
  display.setCursor(110,25);
  display.print("ft");
  display.display();
  delay(2000);
}

Bibliotecas necesarias

Esquemático

Ambos módulos usan interfaz I²C (SDA/SCL con A4 y A5). El BMP280 se alimenta a 5V mientras que el OLED usa 3.3V.

Medición precisa de temperatura, presión y altitud con BMP280 y Arduino UNO

Proceso de manufactura

  1. Sistema de control de acceso integrado con QR, RFID y verificación de temperatura
  2. Conectar múltiples sensores DS18B20 1‑Wire a Raspberry Pi para monitorización precisa de temperatura
  3. Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
  4. Monitorización fluida de temperatura y humedad en Raspberry Pi con EzTemp
  5. Control de temperatura casero para cerveza: monitorizar y regular con Arduino
  6. Raspberry Pi BMP085: Lecturas precisas de temperatura y presión vía I2C
  7. Medición y registro preciso con termopar para laboratorio y experimentos científicos
  8. Construya un Sistema de Monitorización de Temperatura y Luz Multi‑Sensor con Raspberry Pi y DS18B20
  9. Dispositivo de Medición de Presión y Flujo de Aire de Precisión con Sensor Analógico
  10. Registrador de Temperatura y Humedad con Arduino, DHT11 y Ethernet Shield
  11. Medición precisa de frecuencia y ciclo de trabajo con Arduino UNO