Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

Componentes e Materiais

Sobre o Projeto

Neste tutorial, utilizamos o sensor BMP280 para medir temperatura, pressão atmosférica e altitude, com o auxílio de um Arduino UNO e um display OLED. O BMP280 é um sensor de alta precisão que opera via interface I²C. Abaixo, alguns parâmetros-chave do datasheet:

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

O projeto exibe as medições nos sistemas métrico e imperial. Os componentes são conectados conforme mostrado nas imagens:

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO
Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO
Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

Teste e Solução de Problemas

Após a ligação, recomenda-se testar o código de exemplo da biblioteca (BMP280test). Se o módulo não for detectado:

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

Execute um scanner I²C (desconecte outros dispositivos I²C como LCD ou OLED). Se o módulo estiver funcional, o scanner mostrará o endereço:

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

Anote o endereço e edite o arquivo .cpp da biblioteca (geralmente em Documentos/Arduino/Libraries). Abra com um editor adequado (ex.: Dev-C++):

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO
Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

Na linha 41, altere o endereço I²C padrão (0x77) para o encontrado (ex.: 0x76):

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

Salve e execute o teste novamente:

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

Fotos do Teste

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO
Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

Espero que funcione para você. Deixe comentários se tiver dúvidas.

Código

Quatro versões disponíveis:

bmp280_Serial_metric.ino

/* Este código é para uso com Adafruit BMP280 (Métrico)
 * Mede temperatura e pressão e exibe no monitor serial com altitude
 * Versão modificada do exemplo da Adafruit
 * Consulte www.surtrtech.com ou canal SurtrTech no YouTube */
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // Interface I2C

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  if (!bmp.begin()) {
    Serial.println(F("Não foi possível encontrar um sensor BMP280 válido, verifique a fiação!"));
    while (1);
  }
  /* Configurações padrão do datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Modo de operação. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Sobreamostragem de temperatura. */
                  Adafruit_BMP280::SAMPLING_X16,    /* Sobreamostragem de pressão. */
                  Adafruit_BMP280::FILTER_X16,      /* Filtragem. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Tempo de espera. */
}

void loop() {
  Serial.print(F("Temperatura = "));
  Serial.print(bmp.readTemperature());
  Serial.println(" *C");
  Serial.print(F("Pressão = "));
  Serial.print(bmp.readPressure()/100); // Pressão em hPa
  Serial.println(" hPa");
  Serial.print(F("Altitude aprox. = "));
  Serial.print(bmp.readAltitude(1019.66)); // Pressão ao nível do mar (hPa) na sua região
  Serial.println(" m");
  Serial.println();
  delay(2000);
}

bmp280_Serial_Imperial.ino

/* Este código é para uso com Adafruit BMP280 (Imperial)
 * Mede temperatura e pressão e exibe no monitor serial com altitude
 * Versão modificada do exemplo da Adafruit
 * Consulte www.surtrtech.com ou canal SurtrTech no YouTube */
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  if (!bmp.begin()) {
    Serial.println(F("Não foi possível encontrar um sensor BMP280 válido, verifique a fiação!"));
    while (1);
  }
  /* Configurações padrão do datasheet. */
  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; // Conversão para Fahrenheit
  Serial.print(F("Temperatura = "));
  Serial.print(f);
  Serial.println(" *F");
  float P = bmp.readPressure()/3386.39; // Pressão em polegadas de mercúrio
  Serial.print(F("Pressão = "));
  Serial.print(P);
  Serial.println(" inHg");
  float A = bmp.readAltitude(1019.66)*3.28084; // Altitude em pés
  Serial.print(F("Altitude aprox. = "));
  Serial.print(A);
  Serial.println(" ft");
  Serial.println();
  delay(2000);
}

bmp280_OLED_m.ino

/* Este código é para uso com Adafruit BMP280 e tela OLED (Métrico)
 * Mede temperatura e pressão e exibe no display OLED com altitude
 * Versão modificada do exemplo da Adafruit
 * Consulte www.surtrtech.com ou canal SurtrTech no YouTube */
#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);
}

bmp280_OLED_US.ino

/* Este código é para uso com Adafruit BMP280 e tela OLED (Imperial)
 * Mede temperatura e pressão e exibe no display OLED com altitude
 * Versão modificada do exemplo da Adafruit
 * Consulte www.surtrtech.com ou canal SurtrTech no YouTube */
#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 Necessárias

Esquemático

Ambos os módulos utilizam interface I²C: SDA/SCL ligados aos pinos A4 e A5 do Arduino. O BMP280 é alimentado por 5V, enquanto o OLED utiliza 3.3V.

Medição Precisa de Temperatura, Pressão e Altitude com BMP280 e Arduino UNO

Processo de manufatura

  1. Sistema Integrado de Controle de Acesso com QR, RFID e Verificação de Temperatura
  2. Conecte Múltiplos Sensores DS18B20 1-Wire ao Raspberry Pi para Monitoramento Preciso de Temperatura
  3. Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
  4. Monitoramento Contínuo de Temperatura e Umidade no Raspberry Pi com EzTemp
  5. Controle de Temperatura Caseiro para Homebrew: Monitore e Regule com Arduino
  6. Raspberry Pi BMP085: Leituras Precisas de Temperatura e Pressão via I2C
  7. Medição e Registro Precisos de Termopar para Laboratório e Experimentos Científicos
  8. Construa um Sistema de Monitoramento de Temperatura e Luz Multi-Sensor com Raspberry Pi e DS18B20
  9. Dispositivo de Precisão para Medição de Pressão e Fluxo de Ar com Sensor Analógico
  10. Registrador de Temperatura e Umidade com Arduino, DHT11 e Ethernet Shield