Projeto102 - Usando o módulo BMP280 com display OLED e Arduino

 Básico - Projeto 102

Medindo pressão, temperatura e altitude com BMP280 e display OLED

Objetivo

O objetivo deste projeto é mostrar como utilizar o módulo sensor BMP280 (barômetro) junto com o Arduino para medir a temperatura ambiente, a pressão atmosférica e a altitude local em relação ao nível do mar. Os valores aferidos são exibidos em um display OLED.

Módulo Sensor de Pressão e Temperatura BMP280 é um componente eletrônico desenvolvido pela empresa Bosch capaz de medir com precisão a temperatura ambiente e a pressão atmosférica, apesar do seu tamanho reduzido. Por essa característica o módulo BMP280 se tornou bastante comum em dispositivos móveis e portáteis.

O módulo BMP280 funciona com interfaces I2C ou SPI e tensão mínima de 1,7 V a 3,6 V, sendo que o baixo consumo de energia permite o funcionando por longos períodos com alimentação por bateria, e é indicado para projetos como drones, estações meteorológicas, dispositivos com GPS, relógios, etc.

O BMP280 realiza medições de pressão com precisão de ±1 hPa e temperatura com precisão de ±1 °C. Com essa precisão, é possível realizar medições de altitude local aproximada.

Definições

Pressão atmosférica ou pressão barométrica é a força exercida, por unidade de área, pela coluna de ar atmosférico acima de nós. A pressão atmosférica pode ser lida em diversas unidades, sendo as mais comuns o atm (atmosfera) e o pascal (1 atm =101.325 Pa). Portanto, 1 atm = 1.013,25 hPa (hectopascal).

 

A pressão atmosférica varia com a altitude e a temperatura: Quanto maior for a altitude, menor será a pressão atmosférica. Ao nível do mar a pressão atmosférica é igual a 1 atm. Sempre que houver aumento da pressão atmosférica, haverá aumento da temperatura. É justamente por isso que, em maiores altitudes, a temperatura tende a ser menor do que ao nível do mar. Leia mais sobre pressão atmosférica: Wikipédia

Referências

Projeto 90 - Como controlar um Display OLED SSD1306 com Arduino - biblioteca Adafruit

Aplicação

Para fins didáticos e projetos que necessitem aferir pressão atmosférica e temperatura ambiente. Também são utilizados em altímetros e variômetros em drones ou em outros aeromodelos.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Módulo Sensor de Pressão

Módulo Sensor de Pressão BMP280

1   Especificações:
– BMP280 (datasheet)
– Tensão de operação: 1.7V a 3.6V
– Consumo de corrente: 2.7µA
– Interfaces: I2C e SPI
– Faixa de medição pressão: 300 – 1100hPa (equiv. +9000 à -500m acima/abaixo do nível do mar)
– Precisão: ±0.12hPa (equiv. ±1m)
– Faixa de temperatura: -40 à 85 °C
– Precisão temperatura: ±1.0 °C
– Dimensões: 15 x 12 x 2,3mm (sem os pinos)
Display OLED

Display OLED SSD1306

1  Tarzan Componentes Eletrônicos | Shield Arduino| Display Oled 1.3 Polegadas  Branco 125x64 I2c - R$ 51,90

– Tensão de operação: 3,3-5V
– Controlador: SSD1306
– Cor: Azul e Amarelo
– Comunicação: I2C
– Resolução: 128×64
– Dimensões: 30 x 27mm

Você também poderá utilizar na cor azul, branco ou colorido.

A comunicação poderá ser I2C ou SPI

Push Button Push button 6X6X5mm 2

 

                                     

Arduino UNO R3 Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

ATENÇÃO: O módulo BMP280 deverá estar conectado no Arduino na fonte de energia 3.3V (Vcc). Tensões muito maiores podem queimar o componente. É importante lembrar que o display OLED SSD1306 opera perfeitamente na tensão de 3.3V(vcc) também. Mas se desejar, você poderá conectar o display diretamente na saída de Vcc de 5V do Arduino.


Atenção

1. Veja na imagem abaixo a "pinagem" do módulo BMP280, que funciona com interfaces SPI ou I2C.

1.1. Observe que temos os pinos de alimentação Vcc 3.3V e GND, e os pinos de interface: SCL(Clock) e SDA (Data), CSB (Chip Select) e SDO (Serial Data OUT).

1.1.1. Para a interface SPI, usamos os pinos SCL, SDA, CSB e SDO.

1.1.2. Para a interface I2C, vamos usar os pinos SCL, SDA e SDO.

 

2. No nosso exemplo usamos o protocolo I2C para fazer a montagem do módulo BMP280 no no circuito. Veja abaixo as conexões:

2.1. Para a montagem do módulo bmp280 no Arduino via protocolo I2C, faça a conexão dos pinos SCL e SDA com o Arduino da seguinte forma:

MICROCONTROLADOR SCL SDA
Arduino Uno A5 A4
Arduino Nano A5 A4
Arduino Mega 21 20
Leonardo/Micro 3 2

2.2. O pino SDO é usado para seleção do endereço I2C: 0x76 com o pino em estado baixo (LOW), e 0x77 para o estado alto (HIGH). No nosso projeto, vamos usar o endereço 0X77, portanto o pino SDO deve estar conectado no Vcc. Veja a imagem abaixo:

 

3. Para a montagem do display OLED SSD1306 via protocolo I2C, verifique a "pinagem" do módulo com comunicação I2C:

 

Observações:

a. Em algumas marcas os pino Vcc e GND estão invertidos. Portanto, preste muita atenção antes de fazer a conexão com o Arduino.

b. Caso o utilize um display OLED por comunicação via serial SPI veja como é feita a conexão no Projeto 90 - Como controlar um Display OLED SSD1306 com Arduino - biblioteca Adafruit.

3.1. Faça a conexão dos pinos SCL e SDA com o Arduino da seguinte forma:

MICROCONTROLADOR SCL SDA
Arduino Uno A5 A4
Arduino Nano A5 A4
Arduino Mega 21 20
Leonardo/Micro 3 2

4. A montagem do nosso exemplo foi realizada em um protoboard com 400 pontos e com um display OLED SSD1306 com comunicação via protocolo I2C. Verifique sempre se o seu protoboard possui linhas de alimentação contínuas ou separadas.

Incluindo a biblioteca Adafruit BMP280

Para utilizarmos o módulo BMP280 incluiremos a biblioteca Adafruit BMP280. Esta biblioteca foi escrita para obter, calcular e resolver os dados captados pelos sensores internos do componente, gerando os resultados da pressão atmosférica, altitude local e temperatura ambiente.

Instalação das biblioteca

1. No IDE do Arduino, acesse a aba Sketch, selecione [Incluir Biblioteca] e depois [Gerenciar Bibliotecas...].

 

2. No campo de pesquisa digite Adafruit BMP280. Localizada a biblioteca BMP280 clique no botão [Instalar].

 

3. Após a instalação, observe que aparecerá a informação que a biblioteca foi instalada.

 

Incluindo as bibliotecas Adafruit SSD1306 e Adafruit GFX

Para utilizar o controlador SSD1306 vamos incluir a biblioteca Adafruit SSD1306. Esta biblioteca foi escrita para resolver a complexidade do controlador SSD1306, oferecendo comandos simples para facilitar o controle de operação do display OLED. Para obtermos uma experiência completa, precisamos instalar também a biblioteca Adafruit GFX para exibir elementos gráficos primitivos como pontos, linhas, círculos, retângulos, etc.

Instalação das bibliotecas

1. No IDE do Arduino, acesse a aba Sketch, selecione [Incluir Biblioteca] e depois [Gerenciar Bibliotecas...].

2. No campo de pesquisa digite ssd1306 adafruit. Localizada a biblioteca Adafruit SSD1306 clique no botão [Instalar].

 

3. Na janela "Dependencies for library Adafruit SSD1306..." clique no botão [Install all]. Desta forma, instalaremos as bibliotecas Adafruit SSD1306, Adafruit GFX library e Adafruit BusIO todas juntas automaticamente.

4. Após a instalação, observe que aparecerá a informação que as bibliotecas foram instaladas. (Lembre-se que precisaremos das bibliotecas Adafruit SSD1306 e Adafruit GFX Library para controlar nosso display OLED).

Testando o componente (BMP280)

Depois de instaladas as bibliotecas, vamos fazer um teste para verificar se o componente é funcional e se as conexões com o Arduino foram feitas corretamente.

1. Copie o código abaixo e cole no IDE do Arduino.

/*******************************************************************************

     Projeto 101 (teste) - Medir temperatura, pressão e altitude - BMP280
     Autor: Angelo Luis Ferreira
     Data: 26/12/2021
             http://squids.com.br/arduino

*******************************************************************************/
#include <Wire.h>                     // biblioteca requerida para rodar I2C
#include <SPI.h>                      // biblioteca requerida para rodar I2C
#include <Adafruit_BMP280.h>          // biblioteca BMP280

// Objects create
Adafruit_BMP280 sensor;               // cria o objeto sensor

void setup() {
  Serial.begin(9600);
  Serial.print("Teste modulo BMP280");
  sensor.begin();

  // verifica a conexão do sensor
  if (!sensor.begin()) {
    Serial.println("Sensor não encontrado. Verifique as conexoes do circuito!");
    //while (1);
  } else Serial.println(" - testando");
}

void loop() {
  Serial.print("Temeperature: ");
  Serial.print(sensor.readTemperature(), 2);
  Serial.print(" ºC - Pressure: ");
  Serial.print(sensor.readPressure()/101325, 2); // // converte pressão em hPa para atm
  Serial.print(" atm - Altitude: ");
  Serial.print(sensor.readAltitude(1013.25), 2);
  Serial.println(" m");

  delay(1000);
}

2. Rode o programa e abra o monitor serial.

2.1. Se o componente está funcionando e as conexões estão corretas, a tela aparecerá conforme figura abaixo:

2.1.1. Observe que a leitura da pressão atmosférica pela biblioteca BMP280 é feita em Pa (pascal). Para convertermos o valor para atm (atmosfera), dividimos o valor por 101325, pois 1 atm = 101.325 Pa (pascal).

2.1.2. Para obtermos a altitude local aproximada, usamos o parâmetro 1.013.25 no comando sensor.readAltitude(1013.25). Usando esse parâmetro vamos obter a altitude do local aferido aproximada em relação ao nível do mar.

2.1.3. Caso o resultado ao abrir o Monitor Serial for "Sensor não encontrado. Verifique as conexoes do circuito!", é porque houve algum erro nas conexões do módulo BMP280 ou porque o componente está danificado. Isso pode ocorrer caso você tenha utilizado uma fonte de energia maior que 3.3V, que é a tensão de operação do componente. Também pode acontecer problemas com o componente no momento da soldagem dos pinos. Por isso, tome muito cuidado com a soldagem dos mesmos.

Código do Projeto (Sketch)

1. Faça o download e abra o arquivo projeto102.ino no IDE do Arduino: DOWNLOAD - projeto102.ino

2. Se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************

     Projeto 102 - Medir temperatura, pressão e altitude - BMP280 (display OLED)
     Autor: Angelo Luis Ferreira
     Data: 05/01/2021
             http://squids.com.br/arduino

*******************************************************************************/
#include <Wire.h>                     // biblioteca requerida para rodar I2C
#include <SPI.h>                      // biblioteca requerida para rodar I2C
#include <Adafruit_BMP280.h>          // biblioteca BMP280
#include <Adafruit_GFX.h>             // biblioteca OLED
#include <Adafruit_SSD1306.h>         // biblioteca OLED

// Instancia o objeto sensor da biblioteca Adfruit
Adafruit_BMP280 sensor;               // cria o objeto sensor

// configuração do display OLED
#define SCREEN_WIDTH 128             // OLED display width, in pixels (128)
#define SCREEN_HEIGHT 64             // OLED display height, in pixels (64)
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1            // Reset pin # (or -1 if sharing Arduino reset pin)

// instancia o objeto display da biblioteca Adfruit
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); 

void setup() {
  Serial.begin(9600);                                      // inicializa comunicação serial
  sensor.begin();                                          // inicializa bmp280
  // initialize OLED display with the I2C addr 0x3C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);               // inicializa display OLED
  display.clearDisplay();                                  // limpa a exibição do display

  // verifica a conexão do módulo
  if (!sensor.begin()) {
    Serial.println("Sensor não encontrado. Verifique as conexoes do circuito!");
    //while (1);
  } 
}

void loop() {
  display.clearDisplay();                                // limpa a exibição do display 
  show();                                                // chama a função show()
  delay(1000);                                           // espera de 1000ms (1seg)
}

// função de exibição no display OLED
void show() {
  display.drawRoundRect(0, 0, 128, 16, 3, WHITE);       // retângulo superior
  display.drawRoundRect(0, 16, 128, 48, 3, WHITE);      // retângulo inferior
  display.setTextColor(WHITE);
  display.setCursor(22, 4);
  display.setTextSize(1);
  display.print("Arduino Squids");  
  display.setCursor(10, 23);
  display.print("Temp :         C");
  display.setCursor(10, 23);
  display.drawCircle(96, 23, 1, WHITE);
  display.setCursor(55, 23);
  display.print(sensor.readTemperature(), 2); 
  display.setCursor(10, 35);
  display.print("Press:        atm");
  display.setCursor(55, 35);
  display.print(sensor.readPressure()/101325, 3);  // converte para atm
  display.setCursor(10, 49);
  display.print("Altit:        m");
  display.setCursor(55, 49);
  display.print(sensor.readAltitude(1013.25), 1); // em relação ao nível do mar
  
  display.display();  
}

Imagem do resultado

Como o projeto deve funcionar

1. Ao rodar o programa, será exibido no display LCD a temperatura ambiente em ºC, a pressão atmosférica em atm e a altitude aproximada em relação ao nível do mar.

Desafios

Com base neste projeto, resolva o seguinte desafio: 

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores