Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto102 - Usando o módulo BMP280 com display OLED e Arduino
Projeto102 - Usando o módulo BMP280 com display OLED e Arduino
Angelo Luis Ferreira | 11/01/2022
Acessos: 2.898
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 |
|
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 |
|
– 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:
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:
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