- Componentes necessários
- Sensor Nova PM SDS011 para medição de PM2.5 e PM10
- Noções básicas de módulo de display OLED de 0,96 '
- Preparando o Sensor MQ-7 para Medir Monóxido de Carbono (CO)
- Cálculo do Índice de Qualidade do Ar
- Diagrama de circuito
- Construindo o circuito do sistema de monitoramento da qualidade do ar na placa Perf
- Adafruit IO Setup
- Explicação do código para
- Caixa impressa em 3D para sistema de monitoramento AQI
- Testando o Sistema de Monitoramento AQI
À medida que o inverno se aproxima, o ar que paira sobre nós fica mais espesso com a fumaça e as emissões de gases de campos em chamas, fábricas industriais e tráfego de veículos, bloqueando o sol e dificultando a respiração. Especialistas dizem que os altos níveis de poluição do ar e a pandemia de COVID-19 podem ser uma mistura perigosa que pode ter consequências graves. A necessidade de monitoramento em tempo real da Qualidade do Ar é muito evidente.
Portanto, neste projeto, vamos construir um Sistema de Monitoramento da Qualidade do Ar ESP32 usando o sensor Nova PM SDS011, o sensor MQ-7 e o sensor DHT11. Também usaremos um módulo de exibição OLED para exibir os valores da qualidade do ar. O Índice de Qualidade do Ar (AQI) na Índia é baseado em oito poluentes, PM10, PM2,5, SO2 e NO2, CO, Ozônio, NH3 e Pb. No entanto, não é necessário medir todos os poluentes. Portanto, vamos medir a concentração de PM2,5, PM10 e monóxido de carbono para calcular o índice de qualidade do ar. Os valores AQI serão publicados no Adafruit IO para que possamos monitorá-los de qualquer lugar. Anteriormente, também medimos a concentração de gás GLP, fumaça e amônia usando o Arduino.
Componentes necessários
- ESP32
- Sensor Nova PM SDS011
- Módulo de exibição OLED de 0,96 'SPI
- Sensor DHT11
- Sensor MQ-7
- Jumper Wires
Sensor Nova PM SDS011 para medição de PM2.5 e PM10
O Sensor SDS011 é um sensor de qualidade do ar muito recente desenvolvido pela Nova Fitness. Ele funciona com base no princípio de espalhamento de laser e pode obter a concentração de partículas entre 0,3 a 10μm no ar. Este sensor consiste em um pequeno ventilador, válvula de admissão de ar, diodo laser e fotodiodo. O ar entra pela entrada de ar onde uma fonte de luz (Laser) ilumina as partículas e a luz espalhada é transformada em sinal por um fotodetector. Esses sinais são então amplificados e processados para obter a concentração de partículas de PM2,5 e PM10. Anteriormente, usamos o Nova PM Sensor com Arduino para calcular a concentração de PM10 e PM2,5.
Especificações do sensor SDS011:
- Saída: PM2.5, PM10
- Faixa de medição: 0,0-999,9μg / m3
- Tensão de entrada: 4,7 V a 5,3 V
- Corrente máxima: 100mA
- Corrente de sono: 2mA
- Tempo de resposta: 1 segundo
- Frequência de saída de dados serial: 1 vez / segundo
- Resolução do diâmetro de partícula: ≤0,3μm
- Erro relativo: 10%
- Faixa de temperatura: -20 ~ 50 ° C
Noções básicas de módulo de display OLED de 0,96 '
OLED (Organic Light Emitting Diode) é um tipo de diodo emissor de luz que é feito com compostos orgânicos que excitam quando a corrente elétrica pode fluir por eles. Esses compostos orgânicos têm sua própria luz, portanto, não requerem nenhum circuito de luz de fundo como os LCDs normais. Por esse motivo, a tecnologia de exibição OLED é eficiente em termos de energia e amplamente utilizada em televisões e outros produtos de exibição.
Vários tipos de OLEDs estão disponíveis no mercado com base na cor da tela, no número de pinos, no tamanho e no IC do controlador. Neste tutorial, usaremos o módulo OLED SSD1306 de 7 pinos monocromático azul com 128 pixels de largura e 64 pixels de comprimento. Este OLED de 7 pinos suporta o protocolo SPI e o controlador IC SSD1306 ajuda o OLED a exibir os caracteres recebidos. Saiba mais sobre OLED e sua interface com diferentes microcontroladores seguindo o link.
Preparando o Sensor MQ-7 para Medir Monóxido de Carbono (CO)
MQ-7 O Módulo Sensor de Monóxido de Carbono CO detecta as concentrações de CO no ar. O sensor pode medir concentrações de 10 a 10.000 ppm. O sensor MQ-7 pode ser adquirido como módulo ou apenas como sensor. Anteriormente, usamos muitos tipos diferentes de sensores de gás para detectar e medir vários gases. Você também pode verificá-los se estiver interessado. Neste projeto, estamos usando o módulo sensor MQ-7 para medir a concentração de Monóxido de Carbono em PPM. O diagrama de circuito para a placa MQ-7 é fornecido abaixo:
O resistor de carga RL desempenha um papel muito importante em fazer o sensor funcionar. Este resistor muda seu valor de resistência de acordo com a concentração do gás. A placa do sensor MQ-7 vem com uma resistência de carga de 1KΩ que é inútil e afeta as leituras do sensor. Portanto, para medir os valores de concentração de CO apropriados, você deve substituir o resistor de 1KΩ por um resistor de 10KΩ.
Cálculo do Índice de Qualidade do Ar
O AQI na Índia é calculado com base na concentração média de um determinado poluente medido em um intervalo de tempo padrão (24 horas para a maioria dos poluentes, 8 horas para monóxido de carbono e ozônio). Por exemplo, o AQI para PM2.5 e PM10 é baseado na concentração média de 24 horas e o AQI para Monóxido de Carbono é baseado na concentração média de 8 horas). Os cálculos AQI incluem os oito poluentes que são PM10, PM2,5, dióxido de nitrogênio (NO 2), dióxido de enxofre (SO 2), monóxido de carbono (CO), ozônio ao nível do solo (O 3), amônia (NH 3), e chumbo (Pb). No entanto, todos os poluentes não são medidos em todos os locais.
Com base nas concentrações ambientais medidas de 24 horas de um poluente, um sub-índice é calculado, que é uma função linear da concentração (por exemplo, o sub-índice para PM2,5 será 51 na concentração 31 µg / m3, 100 na concentração 60 µg / m3 e 75 a uma concentração de 45 µg / m3). O pior sub-índice (ou máximo de todos os parâmetros) determina o AQI geral.
Diagrama de circuito
O diagrama do circuito para o Sistema de Monitoramento da Qualidade do Ar baseado em IoT é muito simples e é fornecido abaixo:
Os sensores SDS011, DHT11 e MQ-7 são alimentados com + 5V enquanto o módulo de exibição OLED é alimentado com 3,3V. Os pinos do transmissor e receptor do SDS011 são conectados ao GPIO16 e 17 do ESP32. O pino Analog Out do sensor MQ-7 é conectado ao GPIO 25 e o pino de dados do sensor DHT11 é conectado ao sensor GPIO27. Como o módulo OLED Display usa comunicação SPI, estabelecemos uma comunicação SPI entre o módulo OLED e o ESP32. As conexões são mostradas na tabela abaixo:
S.Não |
Pin do módulo OLED |
PIN ESP32 |
1 |
GND |
Terra |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S.Não |
Pin SDS011 |
PIN ESP32 |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S.Não |
DHT Pin |
PIN ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Dados |
27 |
S.Não |
MQ-7 Pin |
PIN ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Construindo o circuito do sistema de monitoramento da qualidade do ar na placa Perf
Como você pode ver na imagem principal, a ideia era usar este circuito dentro de uma Caixa Impressa 3D. Portanto, o circuito completo mostrado acima é soldado em uma placa de desempenho. Certifique-se de usar fios para deixar distância suficiente para montar o OLED e os sensores. Minha placa de desempenho soldada a OLED e o módulo do sensor é mostrado abaixo.
Adafruit IO Setup
Adafruit IO é uma plataforma de dados aberta que permite agregar, visualizar e analisar dados ao vivo na nuvem. Usando o Adafruit IO, você pode fazer upload, exibir e monitorar seus dados pela Internet e tornar seu projeto IoT habilitado. Você pode controlar motores, ler dados de sensores e fazer aplicativos interessantes de IoT na Internet usando o Adafruit IO.
Para usar o Adafruit IO, primeiro crie uma conta no Adafruit IO. Para fazer isso, vá para o site da Adafruit IO e clique em 'Comece gratuitamente' no canto superior direito da tela.
Depois de terminar o processo de criação da conta, faça login na conta e clique em 'Exibir chave AIO' no canto superior direito para obter o nome de usuário da conta e a chave AIO.
Ao clicar em 'Chave AIO', uma janela aparecerá com a chave Adafruit IO AIO e o nome de usuário. Copie esta chave e nome de usuário, eles serão usados no código.
Agora, depois de obter as chaves AIO, crie um feed para armazenar os dados do sensor DHT. Para criar um feed, clique em 'Feed'. Em seguida, clique em 'Ações' e selecione 'Criar um Novo Feed' entre as opções disponíveis.
Depois disso, uma nova janela se abrirá onde você precisa inserir o Nome e a Descrição do feed. Escrever uma descrição é opcional.
Clique em 'Criar' depois disso; você será redirecionado para o feed recém-criado.
Para este projeto, criamos um total de seis feeds para os valores de PM10, PM2,5, CO, temperatura, umidade e AQI. Siga o mesmo procedimento acima para criar o restante dos feeds.
Depois de criar feeds, agora criaremos um recurso de painel do Adafruit IO para visualizar os dados do sensor em uma única página. Para isso, primeiro crie um painel e, em seguida, adicione todos esses feeds nesse painel.
Para criar um painel, clique na opção Painel e depois em 'Ação', e em seguida clique em 'Criar um Novo Painel'.
Na próxima janela, insira o nome do painel e clique em 'Criar'.
À medida que o painel é criado, agora usaremos os blocos Adafruit IO como Gauge e Slider para visualizar os dados. Para adicionar um bloco, clique em '+' no canto superior direito.
Em seguida, selecione o bloco 'Medidor'.
Na próxima janela, selecione os dados de feed que deseja visualizar.
Na etapa final, altere as configurações de bloqueio para personalizá-lo.
Agora siga o mesmo procedimento acima para adicionar blocos de visualização para o restante dos feeds. Meu painel de controle Adafruit IO era assim:
Explicação do código para
O código completo para este projeto é fornecido no final do documento. Aqui estamos explicando algumas partes importantes do código.
O código usa os SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, e DHT.h bibliotecas. As bibliotecas SDS011, Adafruit_GFX e Adafruit_SSD1306 podem ser baixadas do Library Manager no Arduino IDE e instaladas a partir daí. Para isso, abra o IDE Arduino e vá para Sketch <Incluir Biblioteca <Gerenciar Bibliotecas . Agora procure por SDS011 e instale a biblioteca de sensores SDS de R. Zschiegner.
Da mesma forma, instale as bibliotecas Adafruit GFX e Adafruit SSD1306 da Adafruit. O Adafruit_MQTT.h e o DHT11.h podem ser baixados dos links fornecidos.
Depois de instalar as bibliotecas no Arduino IDE, inicie o código incluindo os arquivos de bibliotecas necessários.
#incluir
Nas próximas linhas, defina a largura e altura do display OLED. Neste projeto, usei um display OLED SPI 128 × 64. Você pode alterar o SCREEN_WIDTH e SCREEN_HEIGHT variáveis de acordo com a sua exibição.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Em seguida, defina os pinos de comunicação SPI onde o display OLED está conectado.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Em seguida, crie uma instância para o monitor Adafruit com a largura e altura e o protocolo de comunicação SPI definido anteriormente.
Tela Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Em seguida, inclua as credenciais de WiFi e Adafruit IO que você copiou do servidor Adafruit IO. Isso incluirá o servidor MQTT, o número da porta, o nome do usuário e a chave AIO.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
Em seguida, configure os feeds Adafruit IO para armazenar os dados do sensor. No meu caso, defini seis feeds para armazenar dados de sensores diferentes, a saber: AirQuality, Temperature, Humidity, PM10, PM25 e CO.
Adafruit_MQTT_Client mqtt (& client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Temperatura = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Temperatura"); Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humidity"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / CO");
Agora, dentro da função setup () , inicialize o Monitor Serial a uma taxa de transmissão de 9600 para fins de depuração. Também inicialize o display OLED, o sensor DHT e o sensor SDS011 com a função begin () .
configuração vazia () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
O loop for dentro da função de configuração é usado para coletar os valores até um número definido e então definir o contador para zero.
para (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {leiturasPM10 = 0; }
Lendo os valores do sensor:
Agora, dentro da função de loop, use o método millis () para ler os valores do sensor a cada uma hora. Cada um dos sensores de gás emite um valor analógico de 0 a 4095. Para converter esse valor em tensão, use a seguinte equação: RvRo = MQ7Raw * (3,3 / 4095); onde MQ7Raw é o valor analógico do pino analógico do sensor. Além disso, leia as leituras de PM2.5 e PM10 do sensor SDS011.
if ((sem sinal longo) (currentMillis - previousMillis)> = intervalo) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3,027 * exp (1,0698 * (RvRo)); Serial.println (MQ7ppm); erro = my_sds.read (& p25, & p10); if (! erro) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Convertendo os valores:
Os valores de PM2,5 e PM10 já estão em µg / m 3, mas precisamos converter os valores de monóxido de carbono de PPM para mg / m 3. A fórmula de conversão é fornecida abaixo:
Concentração (mg / m 3) = Concentração (PPM) × (Massa Molecular (g / mol) / Volume Molar (L))
Onde: Massa molecular de CO é 28,06 g / mol e Volume molar é 24,45L a 25 0 C
ConcentraçãoINmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (ConcentrationINmgm3);
Calculando a média de 24 horas:
Em seguida, nas próximas linhas, calcule a média de 24 horas para PM10, leitura de PM2,5 e a média de 8 horas para leituras de Monóxido de Carbono. Na primeira linha do código, pegue o total atual e subtraia o primeiro elemento da matriz, agora salve-o como o novo total. Inicialmente, será Zero. Em seguida, obtenha os valores do sensor e adicione a leitura atual ao total e aumente o índice numérico. Se o valor do índice for igual ou maior que numReadings, defina o índice novamente para zero.
totalPM10 = totalPM10 - leiturasPM10; leituras PM10 = p10; totalPM10 = totalPM10 + leiturasPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Então, por fim, publique esses valores no Adafruit IO.
if (! Temperatura.publish (temperatura)) {delay (30000); } if (! Humidity.publish (umidade)) {delay (30000); ………………………………………………………. ……………………………………………………….
Caixa impressa em 3D para sistema de monitoramento AQI
Em seguida, medi as dimensões da configuração usando meu vernier e também medi as dimensões dos sensores e OLED para projetar um revestimento. Meu design parecia mais ou menos assim abaixo, uma vez que foi feito.
Depois de ficar satisfeito com o design, exportei-o como um arquivo STL, cortei-o com base nas configurações da impressora e, finalmente, imprimi-o. Novamente, o arquivo STL também está disponível para download no Thingiverse e você pode imprimir seu gabinete usando-o.
Feita a impressão, procedi à montagem do projeto montado em um invólucro permanente para instalação em uma instalação. Com a conexão completa feita, montei o circuito em meu gabinete e tudo se encaixou bem, como você pode ver aqui.
Testando o Sistema de Monitoramento AQI
Assim que o hardware e o código estiverem prontos, é hora de testar o dispositivo. Usamos um adaptador externo 12V 1A para alimentar o dispositivo. Como você pode ver, o dispositivo exibirá a concentração de PM10, PM2,5 e monóxido de carbono no display OLED. A concentração de PM2,5 e PM10 está em µg / m 3, enquanto a concentração de Monóxido de Carbono está em mg / m 3.
Essas leituras também serão publicadas no Adafruit IO Dashboard. O máximo de todos os parâmetros (PM10, PM2.5 e CO) será o AQI.
Os valores de AQI dos últimos 30 dias serão mostrados como um gráfico.
É assim que você pode usar os sensores SDS011 e MQ-7 para calcular o Índice de Qualidade do Ar. O funcionamento completo do projeto também pode ser encontrado no vídeo no link abaixo. Espero que você tenha gostado do projeto e achado interessante construir o seu próprio. Se você tiver alguma dúvida, deixe-as na seção de comentários abaixo.