- Componentes necessários:
- Diagrama de circuito e explicação:
- Explicação de trabalho:
- Explicação do código:
- "; webpage + =" A qualidade do ar é "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
O código a seguir chamará uma função chamada sendData e enviará as strings de dados e mensagens para a página da Web para exibição.
sendData (cipSend, 1000, DEBUG); sendData (página da web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = página da web.length (); cipSend + = "\ r \ n";
O código a seguir imprimirá os dados no LCD. Aplicamos várias condições para verificar a qualidade do ar, e o LCD imprimirá as mensagens de acordo com as condições e a campainha também emitirá um bipe se a poluição ultrapassar 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("A qualidade do ar é"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (qualidade do ar <= 1000) {lcd.print ("Ar fresco"); digitalWrite (8, BAIXO);
Finalmente, a função abaixo irá enviar e mostrar os dados na página web. Os dados que armazenamos na string chamada 'webpage' serão salvos na string chamada 'command' . O ESP irá então ler o caractere um por um do 'comando' e irá imprimi-lo na página da web.
String sendData (comando String, tempo limite const int, depuração booleana) {String response = ""; esp8266.print (comando); // envia o caractere lido para o esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// O esp possui dados, então exibe sua saída para a janela serial char c = esp8266.read (); // leia o próximo caractere. resposta + = c; }} se (depurar) {Serial.print (resposta); } resposta de retorno; }
- Teste e saída do projeto:
Neste projeto, vamos fazer um Sistema de Monitoramento da Poluição do Ar baseado em IoT, no qual monitoraremos a Qualidade do Ar em um servidor web usando a internet e dispararemos um alarme quando a qualidade do ar cair além de um determinado nível, ou seja, quando houver quantidade suficiente de gases nocivos estão presentes no ar como CO2, fumaça, álcool, benzeno e NH3. Ele mostrará a qualidade do ar em PPM no LCD e também na página da web para que possamos monitorá-la facilmente.
Anteriormente, construímos o detector de GPL usando o sensor MQ6 e o detector de fumaça usando o sensor MQ2, mas desta vez usamos o sensor MQ135 como o sensor de qualidade do ar, que é a melhor escolha para monitorar a qualidade do ar, pois pode detectar os gases mais nocivos e medir sua quantidade com precisão. Neste projeto IOT, você pode monitorar o nível de poluição de qualquer lugar usando seu computador ou celular. Podemos instalar este sistema em qualquer lugar e também podemos acionar algum dispositivo quando a poluição ultrapassar algum nível, como podemos ligar o Exaustor ou enviar SMS / e-mail de alerta para o usuário.
Componentes necessários:
- MQ135 Sensor de gás
- Arduino Uno
- Módulo Wi-Fi ESP8266
- 16X2 LCD
- Tábua de pão
- Potenciômetro 10K
- Resistores de 1K ohm
- Resistor de 220 ohms
- Buzzer
Você pode comprar todos os componentes acima aqui.
Diagrama de circuito e explicação:
Em primeiro lugar, conectaremos o ESP8266 com o Arduino. O ESP8266 funciona com 3,3 V e se você fornecer 5 V do Arduino, ele não funcionará corretamente e poderá ser danificado. Conecte o VCC e o CH_PD ao pino de 3,3 V do Arduino. O pino RX do ESP8266 funciona em 3,3 V e não se comunicará com o Arduino quando o conectarmos diretamente ao Arduino. Então, teremos que fazer um divisor de tensão para ele que irá converter 5V em 3,3V. Isso pode ser feito conectando três resistores em série, como fizemos no circuito. Conecte o pino TX do ESP8266 ao pino 10 do Arduino e o pino RX do esp8266 ao pino 9 do Arduino através dos resistores.
O módulo ESP8266 Wi-Fi dá aos seus projetos acesso a Wi-Fi ou internet. É um dispositivo muito barato e torna seus projetos muito poderosos. Ele pode se comunicar com qualquer microcontrolador e é o dispositivo mais líder na plataforma IOT. Saiba mais sobre como usar ESP8266 com Arduino aqui.
Em seguida, conectaremos o sensor MQ135 ao Arduino. Conecte o VCC e o pino terra do sensor ao 5V e o terra do Arduino e o pino analógico do sensor ao A0 do Arduino.
Conecte uma campainha ao pino 8 do Arduino que começará a apitar quando a condição se tornar verdadeira.
Por último, conectaremos o LCD com o Arduino. As conexões do LCD são as seguintes
- Conecte o pino 1 (VEE) ao aterramento.
- Conecte o pino 2 (VDD ou VCC) ao 5V.
- Conecte o pino 3 (V0) ao pino do meio do potenciômetro de 10K e conecte as outras duas extremidades do potenciômetro ao VCC e ao GND. O potenciômetro é usado para controlar o contraste da tela do LCD. O potenciômetro de valores diferentes de 10K também funcionará.
- Conecte o pino 4 (RS) ao pino 12 do Arduino.
- Conecte o pino 5 (leitura / gravação) ao aterramento do Arduino. Este pino não é usado com frequência, então vamos conectá-lo ao solo.
- Conecte o pino 6 (E) ao pino 11 do Arduino. Os pinos RS e E são os pinos de controle usados para enviar dados e caracteres.
- Os quatro pinos a seguir são pinos de dados usados para se comunicar com o Arduino.
Conecte o pino 11 (D4) ao pino 5 do Arduino.
Conecte o pino 12 (D5) ao pino 4 do Arduino.
Conecte o pino 13 (D6) ao pino 3 do Arduino.
Conecte o pino 14 (D7) ao pino 2 do Arduino.
- Conecte o pino 15 ao VCC através do resistor de 220 ohms. O resistor será usado para definir o brilho da luz de fundo. Valores maiores tornarão a luz de fundo muito mais escura.
- Conecte o pino 16 ao aterramento.
Explicação de trabalho:
O sensor MQ135 pode detectar NH3, NOx, álcool, benzeno, fumaça, CO2 e alguns outros gases, por isso é um sensor de gás perfeito para nosso Projeto de Monitoramento da Qualidade do Ar. Quando o conectarmos ao Arduino, ele detectará os gases e obteremos o nível de poluição em PPM (partes por milhão). O sensor de gás MQ135 fornece a saída em forma de níveis de tensão e precisamos convertê-la em PPM. Portanto, para converter a saída em PPM, aqui usamos uma biblioteca para o sensor MQ135, ela é explicada em detalhes na seção “Explicação do código” abaixo.
O sensor estava nos dando um valor de 90 quando não havia gás perto dele e o nível seguro de qualidade do ar é 350 PPM e não deve exceder 1000 PPM. Quando excede o limite de 1000 PPM, começa a causar dores de cabeça, sonolência e ar estagnado, viciado e entupido e, se ultrapassar 2000 PPM, pode causar aumento da frequência cardíaca e muitas outras doenças.
Quando o valor for inferior a 1000 PPM, o LCD e a página da Web exibirão “Fresh Air”. Sempre que o valor aumentar 1000 PPM, a campainha começará a emitir um bipe e o LCD e a página da Web exibirão “Ar ruim, Windows aberto”. Se aumentar 2.000, a campainha continuará soando e o LCD e a página da Web exibirão “Perigo! Vá para o ar fresco ”.
Explicação do código:
Antes de iniciar a codificação para este projeto, precisamos primeiro calibrar o sensor de gás MQ135. Existem muitos cálculos envolvidos na conversão da saída do sensor em valor PPM; já fizemos esse cálculo em nosso projeto anterior de Detector de Fumaça. Mas aqui estamos usando a Biblioteca para MQ135, você pode baixar e instalar esta biblioteca MQ135 aqui:
Usando esta biblioteca, você pode obter diretamente os valores PPM, usando apenas as duas linhas abaixo:
MQ135 gasSensor = MQ135 (A0); float air_quality = gasSensor.getPPM ();
Mas antes disso precisamos calibrar o sensor MQ135, para calibrar o sensor carregue o código fornecido abaixo e deixe-o rodar por 12 a 24 horas e então obtenha o valor RZERO .
#include "MQ135.h" void setup () {Serial.begin (9600); } loop vazio () {MQ135 gasSensor = MQ135 (A0); // Anexe o sensor ao pino A0 float rzero = gasSensor.getRZero (); Serial.println (rzero); atraso (1000); }
Depois de obter o valor RZERO . Coloque o valor RZERO no arquivo de biblioteca que você baixou "MQ135.h": #define RZERO 494.63
Agora podemos começar o código real para nosso projeto de monitoramento da qualidade do ar.
No código, em primeiro lugar definimos as bibliotecas e as variáveis para o sensor de gás e o LCD. Usando a Biblioteca Serial do Software, podemos fazer qualquer pino digital como pino TX e RX. Neste código, criamos o pino 9 como o pino RX e o pino 10 como o pino TX para o ESP8266. Então incluímos a biblioteca para o LCD e definimos os pinos para o mesmo. Também definimos mais duas variáveis: uma para o pino analógico do sensor e outra para armazenar o valor air_quality .
#incluir
Em seguida, declararemos o pino 8 como o pino de saída onde conectamos o buzzer. O comando cd.begin (16,2) iniciará o LCD para receber dados e então colocaremos o cursor na primeira linha e imprimiremos o 'digito de circuito' . Então colocaremos o cursor na segunda linha e imprimiremos 'Sensor Warming' .
pinMode (8, OUTPUT); lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("circuitdigest"); lcd.setCursor (0,1); lcd.print ("aquecimento do sensor"); atraso (1000);
Em seguida, definiremos a taxa de transmissão da comunicação serial. ESPs diferentes têm taxas de baud diferentes, então escreva de acordo com a taxa de baud do seu ESP. Em seguida, enviaremos os comandos para configurar o ESP para se comunicar com o Arduino e mostrar o endereço IP no monitor serial.
Serial.begin (115200); esp8266.begin (115200); sendData ("AT + RST \ r \ n", 2000, DEBUG); sendData ("AT + CWMODE = 2 \ r \ n", 1000, DEBUG); sendData ("AT + CIFSR \ r \ n", 1000, DEBUG); sendData ("AT + CIPMUair_quality = 1 \ r \ n", 1000, DEBUG); sendData ("AT + CIPSERVER = 1,80 \ r \ n", 1000, DEBUG); pinMode (sensorPin, INPUT); lcd.clear ();
Para imprimir a saída da página da web no navegador da web, teremos que usar a programação HTML. Portanto, criamos uma string chamada webpage e armazenamos a saída nela. Estamos subtraindo 48 da saída porque a função read () retorna o valor decimal ASCII e o primeiro número decimal que é 0 começa em 48.
if (esp8266.available ()) {if (esp8266.find ("+ IPD,")) {delay (1000); int connectionId = esp8266.read () - 48; String webpage = "
Sistema de monitoramento de poluição do ar IOT
"; página da web + =""; webpage + =" A qualidade do ar é "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
O código a seguir chamará uma função chamada sendData e enviará as strings de dados e mensagens para a página da Web para exibição.
sendData (cipSend, 1000, DEBUG); sendData (página da web, 1000, DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = ","; cipSend + = página da web.length (); cipSend + = "\ r \ n";
O código a seguir imprimirá os dados no LCD. Aplicamos várias condições para verificar a qualidade do ar, e o LCD imprimirá as mensagens de acordo com as condições e a campainha também emitirá um bipe se a poluição ultrapassar 1000 PPM.
lcd.setCursor (0, 0); lcd.print ("A qualidade do ar é"); lcd.print (air_quality); lcd.print ("PPM"); lcd.setCursor (0,1); if (qualidade do ar <= 1000) {lcd.print ("Ar fresco"); digitalWrite (8, BAIXO);
Finalmente, a função abaixo irá enviar e mostrar os dados na página web. Os dados que armazenamos na string chamada 'webpage' serão salvos na string chamada 'command' . O ESP irá então ler o caractere um por um do 'comando' e irá imprimi-lo na página da web.
String sendData (comando String, tempo limite const int, depuração booleana) {String response = ""; esp8266.print (comando); // envia o caractere lido para o esp8266 long int time = millis (); while ((time + timeout)> millis ()) {while (esp8266.available ()) {// O esp possui dados, então exibe sua saída para a janela serial char c = esp8266.read (); // leia o próximo caractere. resposta + = c; }} se (depurar) {Serial.print (resposta); } resposta de retorno; }
Teste e saída do projeto:
Antes de enviar o código, certifique-se de que você está conectado ao Wi-Fi do seu dispositivo ESP8266. Após o upload, abra o monitor serial e ele mostrará o endereço IP conforme mostrado abaixo.
Digite este endereço IP em seu navegador, ele mostrará a saída conforme mostrado abaixo. Você terá que atualizar a página novamente se quiser ver o valor atual da qualidade do ar em PPM.
Configuramos um servidor local para demonstrar seu funcionamento, você pode conferir o Vídeo abaixo. Mas para monitorar a qualidade do ar de qualquer lugar do mundo, você precisa encaminhar a porta 80 (usada para HTTP ou internet) para o endereço IP local ou privado (192.168 *) do seu dispositivo. Após o encaminhamento de porta, todas as conexões de entrada serão encaminhadas para este endereço local e você pode abrir a página da web mostrada acima apenas inserindo o endereço IP público de sua internet de qualquer lugar. Você pode encaminhar a porta fazendo login em seu roteador (192.168.1.1) e encontrar a opção de configurar o encaminhamento de porta.