7 de dezembro de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Sensor de pressão atmosférica MS5611

sensor de pressão atmosférica MS5611

Esse sensor de pressão atmosférica MS5611 é o primeiro da linha “popular” que vejo para concorrer com o BMP180 ou BMP280. Além da medição da pressão atmosférica, ele também lê temperatura. Sua resolução é de 10cm na variação de altitude com tempo de conversão de 1ms. Consumo de 0.15uA e tensão entre 1.8 e 3.6V. Porém, na placa GY-63 tem um regulador linear LDO (Low DropOut) configurado para comportar a alimentação em 5V. O sensor de temperatura tem uma precisão com variação em torno de 0.8C. O nível lógico também está configurado para 5V, portanto pode ser utilizado tranquilamente em Arduino UNO, Nano, Mega, Leonardo – ou no caso desse artigo, estou usando a MH-Tiny, que tem o mesmo mapeamento de pinos do Arduino Nano e do qual já escrevi outros dois artigos, que você encontra aí na caixa de pesquisa ou no menu Arduino.

sensor de pressão atmosférica MS5611

Agora que já vimos as características do sensor de pressão atmosférica MS5611 e o pinout da placa (que como citado, serão os mesmos pinos para as demais placas), podemos iniciar o código. O wiring já não é mais novidade há centenas de artigos, certo? SDA ->A4 e SCL->A5. VCC->5V e GND->GND.

A biblioteca utilizada foi a (olha só que surpresa) MS5611, que pode ser instalada pelo gerenciador de bibliotecas do Arduino IDE ou pelo PlatformIO usando sua IDE preferida. Não seja resistente a experimentar vscode com PlatformIO, será uma experiência muito agradável, se você usa só a IDE do Arduino atualmente.

Enfim, a biblioteca que escolhi é a mais utilizada. A única coisa que mudei em relação ao exemplo foi a criação do objeto como ponteiro, mas não se atenha aos detalhes, apenas experimente.

#include <Arduino.h>

#include "MS5611.h"

MS5611 *ms5611 = new MS5611(0x77);   // 0x76 = CSB to VCC; 0x77 = CSB to GND


uint32_t start, stop, count;


void setup()
{
  Serial.begin(115200);
  Serial.print(__FILE__);
  Serial.print("MS5611 lib version: ");
  Serial.println(MS5611_LIB_VERSION);

  bool b = ms5611->begin();
  Serial.println(b ? "found" : "not found");

  count = 0;
  Serial.println("CNT\tDUR\tRES\tTEMP\tPRES");
  delay(1000);
}

void loop()
{
  start = micros();
  int result = ms5611->read();
  stop = micros();

  Serial.print(count);
  count++;
  Serial.print("\t");
  Serial.print(stop - start);
  Serial.print("\t");
  Serial.print(result);
  Serial.print("\t");
  Serial.print(ms5611->getTemperature(), 2);
  Serial.print("\t");
  Serial.print(ms5611->getPressure(), 2);
  Serial.println();

  delay(1000);
}

Compile, suba o código e abra a serial. Depois de provar o conceito, introduza sua aplicação. Particularmente, pretendo colocar em um robô, que estou há bastante tempo enrolando pra terminar o projeto, mas vai ser divertido usar esse sensor nele.

Usei um BMP180 para exemplificar a medição da carbonatação de cerveja. A pressão da garrafa é bem superior a 1 atmosfera, esse sensor não serve para esse propósito, mas é interessante o artigo.

Tem mais um experimento diferente que quero fazer com ele, vamos ver se para o próximo artigo relacionado sai um vídeo também.

E normalmente quando escrevo sobre sensores, eles vem da Curto Circuito, que é (na minha opinião) o lugar mais completo em relação a sensores. – Mas placas também não ficam pra menos; a MH-Tiny também é da Curto, seu valor é 30% menor que um Nano e a placa é preta com barra de pinos amarela. Lindona! Confira o artigo relacionado a ela.