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.
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:
- Conecte o pino VCC do MQ135 ao trilho de 3,3 V da protoboard.
- Conecte o pino GND do MQ135 ao trilho de GND da protoboard.
- Conecte o pino A0 do MQ135 a um dos pinos analógicos da Franzininho C0 (por exemplo, A2).
- 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:
- Conecte o Display OLED à protoboard.
- Conecte o terminal GND do Display à trilha GND da protoboard.
- Conecte o terminal VCC do Display à trilha VCC da protoboard.
- Conecte o terminal SCL ao pino PB6.
- 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:
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 -1Por ú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






