Franzininho C0: Monitoramento da Qualidade do Ar com Sensor MQ135 usando Arduino

Este post faz parte da série Franzininho C0 com Arduino

Introdução

Neste tutorial, vamos usar a Franzininho C0 em conjunto com um sensor MQ135, que mede a concentração de vários tipos de gases no ambiente, um buzzer e um display OLED SSD1306 para criar um sistema de monitoramento da qualidade do ar. 

O objetivo é ler os valores do pino analógico do sensor e exibi-los no display OLED, além de acionar um alarme quando um gás for detectado no ar. Este projeto será desenvolvido utilizando a IDE do Arduino.

Sensor MQ135

O sensor MQ-135 é um sensor de qualidade do ar utilizado para medir concentrações de diferentes gases presentes no ambiente. Esse sensor é projetado para detectar a presença de gases, como: amônia, óxido nítrico, álcool, benzeno, fumaça e dióxido de carbono.

O funcionamento do MQ-135 é baseado na mudança na resistência elétrica do seu elemento sensível quando entra em contato com diferentes gases. Cada gás tem uma resposta característica que influencia a resistência do sensor. 

O MQ-135 possui duas saídas:

  • Saída Analógica: O sensor MQ-135 possui um pino de saída analógica que fornece uma tensão que varia de acordo com a concentração dos gases detectados. Quanto maior a concentração de gases nocivos, maior será a tensão de saída. Essa saída analógica é útil para medir a concentração relativa de diferentes gases presentes no ambiente. 
  • Saída Digital: O sensor MQ-135 também possui um pino de saída digital que é usado para indicar se a concentração de gases ultrapassou um certo limite ajustável. Esse limite é definido por um potenciômetro no sensor. Essa saída é útil para criar sistemas de alarme ou acionar ações específicas quando a qualidade do ar atinge um nível perigoso.

Abaixo, temos a imagem do sensor. Quando o sensor está ligado, o botão de power acende. Além disso, quando um gás é detectado, o LED conectado ao pino digital também acende.

Figura 1 – Sensor MQ135

Materiais necessários 

  • Franzininho C0
  • Protoboard
  • Sensor MQ135
  • Buzzer
  • Display OLED SSD1306
  • Jumpers

Pinout da Franzininho C0

Para definir os pinos utilizados, precisamos consultar o pinout da placa:

Acesse a documentação completa em: https://docs.franzininho.com.br/docs/franzininho-c0/franzininho-c0-board

Circuito

Conecte a Franzininho C0 à protoboard. Em seguida, conecte os pinos GND e 3,3 V na protoboard para fornecer energia aos demais dispositivos.

Vamos começar com o sensor MQ135, que possui 4 pinos: VCC, GND, A0 (saída analógica) e D0 (saída digital). A identificação de cada pino está impressa na parte inferior do sensor. Siga os passos abaixo para conectá-lo à placa:

  1. Conecte o pino VCC do MQ135 ao trilho de 3,3 V da protoboard.
  2. Conecte o pino GND do MQ135 ao trilho de GND da protoboard.
  3. Conecte o pino A0 do MQ135 a um dos pinos analógicos da Franzininho C0 (por exemplo, A2).
  4. Conecte o pino D0 do sensor MQ135 a um dos pinos digitais da Franzininho (por exemplo, PA4).

Em seguida, conecte o terminal maior do buzzer a um dos pinos digitais da Franzininho C0 (por exemplo, PA0) e o terminal menor à trilha GND na protoboard.

Por último, siga as instruções abaixo para conectar o Display OLED:

  1. Conecte o Display OLED à protoboard.
  2. Conecte o terminal GND do Display à trilha GND da protoboard.
  3. Conecte o terminal VCC do Display à trilha VCC da protoboard.
  4. Conecte o terminal SCL ao pino PB6.
  5. Conecte o terminal SDA ao pino PC14.

Para se orientar quanto aos pinos da Franzininho C0, basta visualizar o pinout da placa acima.

A montagem ficará conforme mostrado na imagem abaixo:

Figura 2 – Montagem do projeto na protoboard.

Código

Para utilizar criar um sistema de monitoramento da qualidade do ar usando a Franzininho C0, utilizaremos o código a seguir:

#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

// Endereço I2C do SSD1306
#define I2C_ADDRESS 0x3C

// Define pinos
#define SCL_PIN PB6
#define SDA_PIN PC14
#define analogMq A2
#define digitMQ PA4
#define buzzer PA0

// Define reset do Display
#define RST_PIN -1

SSD1306AsciiWire oled;

void setup() {
  // Configura pinos i2c
  Wire.setSCL(SCL_PIN);
  Wire.setSDA(SDA_PIN);
  Wire.begin();

  // Configura pinos uart
  Serial.setRx(PA_10_R);
  Serial.setTx(PA_9_R);
  Serial.begin(115200);

  // Configura entradas e saídas
  pinMode(digitMQ, INPUT); 
  pinMode(analogMq, INPUT);
  pinMode(buzzer, OUTPUT);

  // Inicia Display
  #if RST_PIN >= 0
    oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
  #else // RST_PIN >= 0
    oled.begin(&Adafruit128x64, I2C_ADDRESS);
  #endif // RST_PIN >= 0

  oled.setFont(Adafruit5x7);
  oled.clear();
}

void loop() {
  // Leitura do pino analógico do sensor
  int odor = analogRead(analogMq);

  // Imprimindo no Display
  oled.clear();
  oled.set1X();
  oled.println("Air quality value:");
  oled.println(" ");
  oled.set2X();
  oled.println(odor);  

  // Verifica se há gás no ar e configura buzzer
   if (digitalRead(digitMQ)== 1) {
      Serial.println("Operando normalmente");     
      digitalWrite(buzzer, 0); 
    } else {
      Serial.println("Algum odor foi identificado");
      digitalWrite(buzzer, 1); 
    }
    
  delay (2000);

}

Obs.1: Antes da IDE iniciar o carregamento do programa, a Franzininho C0 deve executar o bootloader, caso contrário ocorrerá um erro.

Obs.2: Recomendamos o uso da IDE 1.8.x do Arduino para essa aplicação.

Explicação do Código

Antes do setup(), precisamos incluir as bibliotecas necessárias para utilizar o protocolo I2C e para escrever no Display OLED.

#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

Além disso, vamos criar variáveis para armazenar os pinos do I2C, o pino digital do buzzer e os pinos do sensor MQ135, onde um é digital e o outro é analógico. Também é definido o endereço do Display e o seu reset.

// Endereço I2C do SSD1306
#define I2C_ADDRESS 0x3C

// Define pinos
#define SCL_PIN PB6
#define SDA_PIN PC14
#define analogMq A2
#define digitMQ PA4
#define buzzer PA0

// Define reset do Display
#define RST_PIN -1

Por último, criamos o objeto oled que será usado para inicializar o Display, definir fontes e escrever textos e dados no Display.

SSD1306AsciiWire oled;

No setup(), começamos configurando os pinos no I2C usando ‘Wire.setSCL’ e ‘Wire.setSDA’, e também os pinos para a comunicação serial da placa utilizando ‘Serial.setRx()’ e ‘Serial.setTx()’.

void setup() {
  // Configura pinos i2c
  Wire.setSCL(SCL_PIN);
  Wire.setSDA(SDA_PIN);
  Wire.begin();

  // Configura pinos uart
  Serial.setRx(PA_10_R);
  Serial.setTx(PA_9_R);
  Serial.begin(115200);
...
}

Depois, definimos os pinos digital e analógico do MQ135 como entradas e o buzzer como saída. 

 [ ... // Configura entradas e saídas
  pinMode(digitMQ, INPUT); 
  pinMode(analogMq, INPUT);
  pinMode(buzzer, OUTPUT);
... }

Por último, inicializamos o Display, definimos a fonte e limpamos a tela para preparar o Display para uso.

{...  // Inicia Display
  #if RST_PIN >= 0
    oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
  #else // RST_PIN >= 0
    oled.begin(&Adafruit128x64, I2C_ADDRESS);
  #endif // RST_PIN >= 0

  oled.setFont(Adafruit5x7);
  oled.clear();
}

No loop(),  começamos lendo o valor do pino analógico do MQ135 e armazenamos na variável ‘odor’. O valor lido será exibido no display OLED abaixo do texto “Air quality value:”. O objetivo é ter uma indicação da quantidade de contaminante detectada pelo sensor.

void loop() {
  // Leitura do pino analógico do sensor
  int odor = analogRead(analogMq);

  // Imprimindo no Display
  oled.clear();
  oled.set1X();
  oled.println("Air quality value:");
  oled.println(" ");
  oled.set2X();
  oled.println(odor);  ...}

Além disso, a verificação da qualidade do ar é feita através do pino digital do MQ135. E quando o sensor detectar a presença de contaminantes, o buzzer emitirá um alarme. No projeto, o pino digital é responsável por detectar a presença de contaminantes, enquanto o pino analógico mede a concentração de contaminantes no ar. Esses dois pinos trabalham em conjunto para fornecer uma visão completa da qualidade do ar.

A análise do ar é feita a cada 2 segundos.

  // Verifica se há gás no ar e configura buzzer
  if (digitalRead(digitMQ)== 1) {
      Serial.println("Operando normalmente");    
      digitalWrite(buzzer, 0);
    } else {
      Serial.println("Algum odor foi identificado");
      digitalWrite(buzzer, 1);
    }
   
  delay (2000);
}

Ao executar o código, conforme mostrado no vídeo, o display exibirá o valor lido pelo pino analógico do sensor MQ135. Durante o experimento, utilizamos álcool 70 que é detectável pelo sensor, isso fez com que o alarme fosse acionado rapidamente e o valor exibido no display aumentasse.

Conclusão

Neste projeto, criamos um sistema de monitoramento da qualidade do ar utilizando a Franzininho C0, um sensor MQ135, um buzzer e um display OLED SSD1306. O sensor MQ135 é usado para medir a concentração de gases no ambiente, o display OLED foi usado como um recurso visual para o operador visualizar os níveis de contaminantes presentes no ar. Quando o sensor detectou a presença de gases, um alarme foi acionado pelo buzzer, alertando sobre a presença de contaminantes. O LED no pino digital do sensor também indicou visualmente a detecção de gases.

Esse projeto oferece uma ferramenta eficiente para avaliar a qualidade do ar em tempo real, com alertas sonoros e elementos visuais.

Desafio

Neste desafio, você irá aprimorar o projeto de monitoramento da qualidade do ar adicionando LEDs como indicadores visuais do nível da qualidade do ar. Por exemplo, use um LED verde para sinalizar “Bom”, um LED amarelo para “Moderado” e um LED vermelho para “Ruim”. Ajuste o potenciômetro do MQ135 para definir os níveis de qualidade do ar e garantir que cada LED acenda conforme a concentração de gases detectada.

Saiba Mais

Franzininho C0: Nova placa brasileira baseada no STM32C0

Bancada do Embarcados sobre a Franzininho C0

Compre a Franzininho C0

Franzininho C0 com Arduino

Franzininho C0: Controlando o Duty Cycle de um PWM com um Potenciômetro Usando Arduino Franzininho C0: Detecção de chuva usando Arduino
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Software » Firmware » Franzininho C0: Monitoramento da Qualidade do Ar com Sensor MQ135 usando Arduino

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: