Índice:

Monitor Arduino CO usando sensor MQ-7: 8 etapas (com imagens)
Monitor Arduino CO usando sensor MQ-7: 8 etapas (com imagens)

Vídeo: Monitor Arduino CO usando sensor MQ-7: 8 etapas (com imagens)

Vídeo: Monitor Arduino CO usando sensor MQ-7: 8 etapas (com imagens)
Vídeo: IoT based Air Pollution Monitoring System using Arduino 2024, Novembro
Anonim
Monitor Arduino CO usando sensor MQ-7
Monitor Arduino CO usando sensor MQ-7
Monitor Arduino CO usando sensor MQ-7
Monitor Arduino CO usando sensor MQ-7

Algumas palavras por que esse instrutível foi criado: um dia a mãe da minha namorada nos ligou no meio da noite porque ela se sentiu muito mal - ela teve tonturas, taquicardia, náuseas, pressão alta, ela até desmaiou por hora desconhecida (provavelmente ~ 5 minutos, mas não há como saber), tudo sem motivo aparente. Ela mora em um pequeno vilarejo longe de hospitais (60 km de nossa casa, 30 km até o hospital mais próximo, 10 km sem estrada normal no meio), então corremos até ela e chegamos logo após a ambulância. Ela foi hospitalizada e pela manhã quase se sentiu bem, mas os médicos não conseguiram descobrir a causa. No dia seguinte tivemos uma ideia: poderia ter sido envenenamento por CO, já que ela tinha caldeira de água a gás (na foto), e estava sentada perto dela a noite toda quando aconteceu. Recentemente, compramos o sensor MQ-7 CO, mas nunca teve tempo de montar um esquema para ele, então este era o momento perfeito para fazer isso. Depois de uma hora pesquisando na internet por quaisquer instruções, percebi que não consigo encontrar nenhum guia que ao mesmo tempo siga as instruções do fabricante do sensor fornecidas em sua folha de dados e explique tudo (um exemplo parecia ter um código muito bom, mas não estava claro como aplicá-lo, outros foram simplificados demais e não funcionariam bem). Então, passamos cerca de 12 horas desenvolvendo esquemas, fazendo e imprimindo caixa 3D, testando e calibrando o sensor, e no dia seguinte fomos para a caldeira suspeita. Descobriu-se que os níveis de CO eram extremamente altos e poderiam ser fatais se o tempo de exposição ao CO fosse mais longo. Portanto, acredito que qualquer pessoa que tenha situação semelhante (como caldeira a gás ou outra combustão acontecendo dentro de um espaço residencial) deve obter esse sensor para evitar que algo ruim aconteça.

Tudo isso aconteceu há duas semanas, desde então eu melhorei bastante os esquemas e o programa, e agora parece ser razoavelmente bom e relativamente simples (não é simples de 3 linhas de código, mas ainda assim). Embora eu espere que alguém com medidor de CO preciso me forneça algum feedback sobre a calibração padrão que coloquei no esboço - eu suspeito que está longe de ser bom. Aqui está um guia completo com alguns dados experimentais.

Etapa 1: Lista de materiais

Lista de Materiais
Lista de Materiais

Você precisará de: 0. Placa Arduino. Eu prefiro o clone chinês do Arduino Nano por seu preço excepcional de US $ 3, mas qualquer arduino de 8 bits funcionará aqui. O Sketch usa algumas operações de timers avançados e foi testado apenas no microcontrolador atmega328 - embora provavelmente funcione bem em outros também.1. Sensor MQ-7 CO. Mais comumente disponível com este módulo de sensor Flying Fish, ele precisa passar por uma pequena modificação, detalhes na próxima etapa, ou você pode usar um sensor MQ-7 separado.

2. Transistor bipolar NPN. Praticamente qualquer transistor NPN que pode lidar com 300 mA ou mais funcionará aqui. O transistor PNP não funciona com um módulo Flying Fish mencionado (porque tem um pino de aquecimento soldado à saída do sensor), mas pode ser usado com um sensor MQ-7 discreto.

3. Resistores: 2 x 1k (de 0,5k a 1,2k funcionará bem) e 1 x 10k (esse é melhor mantê-lo preciso - embora se você absolutamente precisar usar um valor diferente, ajuste a variável reference_resistor_kOhm no esboço de acordo).

4. Capacitores: 2 x 10uF ou mais. São necessários tântalo ou cerâmicos, o eletrolítico não funcionará bem devido à alta ESR (eles não serão capazes de fornecer corrente suficiente para suavizar a ondulação de alta corrente).5. LEDs verdes e vermelhos para indicar o nível atual de CO (você também pode usar um único LED de duas cores com 3 terminais, como usamos em nosso protótipo de caixa amarela).6. Piezo buzzer para indicar alto nível de CO. Placa de ensaio e fios (você também pode soldar tudo em pinos Nano ou espremer em soquetes Uno, mas é fácil cometer um erro dessa forma).

Etapa 2: Modificação do Módulo ou Fiação do Sensor Discreto

Modificação do Módulo ou Fiação do Sensor Discreto
Modificação do Módulo ou Fiação do Sensor Discreto

Para o módulo, deve-se dessoldar o resistor e o capacitor, conforme mostrado na foto. Você pode dessoldar basicamente tudo se quiser - a eletrônica do módulo é totalmente inútil, usamos apenas como suporte para o próprio sensor, mas esses dois componentes o impedirão de obter leituras corretas, Se você estiver usando um sensor discreto, conecte os pinos do aquecedor (H1 e H2) a 5 V e o coletor do transistor de forma correspondente. Anexe um lado sensor (qualquer um dos pinos A) a 5 V, outro lado sensor (qualquer um dos pinos B) ao resistor de 10k, assim como o pino analógico do módulo nos esquemas.

Etapa 3: Princípio de Operação

Princípio de Operação
Princípio de Operação
Princípio de Operação
Princípio de Operação

Por que precisamos de todas essas complicações, por que não conectar 5V, aterrar e apenas obter leituras? Bem, você não obterá nada útil desta forma, infelizmente. De acordo com a folha de dados MQ-7, o sensor tem que funcionar em alta e ciclos de baixo aquecimento para obter medições adequadas. Durante a fase de baixa temperatura, o CO é absorvido na placa, produzindo dados significativos. Durante a fase de alta temperatura, o CO absorvido e outros compostos evaporam da placa do sensor, limpando-a para a próxima medição.

Portanto, em geral, a operação é simples:

1. Aplique 5 V por 60 segundos, não use essas leituras para medição de CO.

2. Aplique 1,4 V por 90 segundos, use essas leituras para medição de CO.

3. Vá para a etapa 1.

Mas aqui está o problema: o Arduino não pode fornecer energia suficiente para executar este sensor a partir de seus pinos - o aquecedor do sensor requer 150 mA, enquanto o pino do Arduino pode fornecer não mais do que 40 mA, portanto, se conectado diretamente, o pino do Arduino queimará e o sensor ainda ganhará não funciona. Portanto, devemos usar algum tipo de amplificador de corrente que leve uma pequena corrente de entrada para controlar uma grande corrente de saída. Outro problema é obter 1,4V. A única maneira de obter esse valor de forma confiável sem introduzir muitos componentes analógicos é usar a abordagem PWM (Modulação por largura de pulso) com feedback que controlará a tensão de saída.

O transistor NPN resolve os dois problemas: quando está constantemente ligado, a tensão no sensor é de 5 V e está aquecendo para a fase de alta temperatura. Quando aplicamos PWM em sua entrada, a corrente está pulsando, então ela é suavizada pelo capacitor, e a tensão média é mantida constante. Se usarmos PWM de alta frequência (no esboço, tem frequência de 62,5 KHz) e fizermos a média de muitas leituras analógicas (no esboço, temos uma média de cerca de 1000 leituras), então o resultado é bastante confiável.

É fundamental adicionar capacitores de acordo com os esquemas. As imagens aqui ilustram a diferença de sinal com e sem capacitor C2: sem ele, a ondulação PWM é claramente visível e distorce significativamente as leituras.

Etapa 4: esquemas e placa de ensaio

Esquemas e placa de ensaio
Esquemas e placa de ensaio
Esquemas e placa de ensaio
Esquemas e placa de ensaio
Esquemas e placa de ensaio
Esquemas e placa de ensaio

Aqui estão os esquemas e a montagem do breadboard.

AVISO! É necessária a modificação de um módulo de breakout padrão! Sem o módulo de modificação é inútil. A modificação é descrita na segunda etapa

É importante utilizar os pinos D9 e D10 para os LEDs, já que ali temos saídas de hardware Timer1, isso permitirá alterar suavemente suas cores. Os pinos D5 e D6 são usados para campainha, porque D5 e D6 são saídas do Timer0 de hardware. Vamos configurá-los para serem inversos um ao outro, de forma que alternem entre os estados (5V, 0V) e (0V, 5V), produzindo som na campainha. Aviso: isso afeta a interrupção de temporização principal do Arduino, então todas as funções dependentes do tempo (como millis ()) não produzirão resultados corretos neste esboço (mais sobre isso mais tarde). Pin D3 tem saída de hardware Timer2 conectada a ele (bem como D11 - mas é menos conveniente colocar fio no D11 do que no D3) - então, estamos usando-o para fornecer PWM para o transistor de controle de tensão. Resistor R1 é usado para controlar o brilho dos LEDs. Pode estar em qualquer lugar de 300 a 3000 Ohm, 1k é bastante ideal em brilho / consumo de energia. Resistor R2 é usado para limitar a corrente de base do transistor. Não deve ser inferior a 300 Ohms (para não sobrecarregar o pino do Arduino) e não deve ser superior a 1500 Ohms. 1k existe uma escolha segura.

O resistor R3 é usado em série com a placa do sensor para criar um divisor de tensão. A tensão na saída do sensor é igual a R3 / (R3 + Rs) * 5V, onde Rs é a resistência do sensor de corrente. A resistência do sensor depende da concentração de CO, então a tensão muda de acordo. O capacitor C1 é usado para suavizar a tensão PWM de entrada no sensor MQ-7, quanto maior for sua capacitância, melhor, mas também deve ter baixa ESR - então cerâmica (ou tântalo) O capacitor é o preferido aqui, o eletrolítico não terá um bom desempenho.

O capacitor C2 é usado para suavizar a saída analógica do sensor (a tensão de saída depende da tensão de entrada - e temos uma corrente PWM bastante alta aqui, que afeta todos os esquemas, então precisamos de C2). A solução mais simples é usar o mesmo capacitor do transistor C1. NPN ou conduz corrente o tempo todo para fornecer alta corrente no aquecedor do sensor, ou funciona no modo PWM, reduzindo assim a corrente de aquecimento.

Etapa 5: Programa Arduino

Programa Arduino
Programa Arduino

AVISO: O SENSOR REQUER CALIBRAÇÃO MANUAL PARA QUALQUER USO PRÁTICO. SEM CALIBRAGEM, DEPENDENDO DOS PARÂMETROS DE SEU SENSOR EM PARTICULAR, ESTE ESBOÇO PODE LIGAR O ALARME NO AR LIMPO OU NÃO DETECTAR A CONCENTRAÇÃO DE MONÓXIDO DE CARBONO LETAL

A calibração é descrita nas etapas a seguir. A calibração aproximada é muito simples, a precisão é bastante complexa.

No nível geral, o programa é bastante simples:

Primeiro, calibramos nosso PWM para produzir 1,4 V estável exigido pelo sensor (a largura adequada do PWM depende de muitos parâmetros como valores exatos do resistor, resistência deste sensor em particular, curva VA do transistor etc etc - então a melhor maneira é tentar vários valores e usar um que se encaixe melhor). Então, executamos continuamente um ciclo de 60 segundos de aquecimento e 90 segundos de medição. Na implementação, fica um pouco complicado. Temos que usar temporizadores de hardware porque tudo o que temos aqui precisa de PWM estável de alta frequência para funcionar corretamente. O código está anexado aqui e pode ser baixado de nosso github, bem como fonte de esquemas em Fritzing. No programa há 3 funções que manipulam temporizadores: setTimer0PWM, setTimer1PWM, setTimer2PWM. Cada um deles define o temporizador no modo PWM com parâmetros dados (comentados no código) e define a largura de pulso de acordo com os valores de entrada. As fases de medição são alternadas usando as funções startMeasurementPhase e startHeatingPhase, eles lidar com tudo dentro. e definir valores de temporizador adequados para alternar entre aquecimento de 5 V e 1,4 V. O estado dos LEDs é definido pela função setLEDs que aceita brilho verde e vermelho em sua entrada (na escala linear de 1-100) e o converte na configuração do temporizador correspondente.

O estado da campainha é controlado usando as funções buzz_on, buzz_off, buzz_beep. As funções liga / desliga ligam e desligam o som, a função bip produz uma sequência específica de bipes com período de 1,5 segundos se for chamada periodicamente (esta função retorna imediatamente para não pausar o programa principal - mas você tem que chamá-la novamente e novamente para produzir um padrão de bipe).

O programa primeiro executa a função pwm_adjust que descobre a largura do ciclo PWM adequada para atingir 1,4 V durante a fase de medição. Em seguida, ele soa algumas vezes para indicar que o sensor está pronto, muda para a fase de medição e inicia o loop principal.

No loop principal, o programa verifica se passamos tempo suficiente na fase atual (90 segundos para a fase de medição, 60 segundos para a fase de aquecimento) e, se sim, muda a fase atual. Além disso, ele atualiza constantemente as leituras do sensor usando suavização exponencial: new_value = 0.999 * old_value + 0.001 * new_reading. Com tais parâmetros e ciclo de medição, ele calcula a média do sinal ao longo dos últimos 300 milissegundos. AVISO: O SENSOR REQUER CALIBRAÇÃO MANUAL PARA QUALQUER USO PRÁTICO. SEM CALIBRAGEM, DEPENDENDO DOS PARÂMETROS DE SEU SENSOR ESPECÍFICO, ESTE ESBOÇO PODE LIGAR O ALARME NO AR LIMPO OU NÃO DETECTAR A CONCENTRAÇÃO DE MONÓXIDO DE CARBONO LETAL.

Etapa 6: primeira execução: o que esperar

Primeira execução: o que esperar
Primeira execução: o que esperar

Se você montou tudo corretamente, após executar o sketch, você verá algo assim no monitor serial:

ajustando PWM w = 0, V = 4,93

ajustando PWM w = 17, V = 3,57PWM resultado: largura 17, voltagem 3,57

e, em seguida, uma série de números que representam as leituras atuais do sensor. Esta parte está ajustando a largura do PWM para produzir a tensão do aquecedor do sensor o mais próximo possível de 1,4 V, a tensão medida é deduzida de 5 V, então nosso valor medido ideal é 3,6 V. Se esse processo nunca termina ou termina após uma única etapa (resultando em largura igual a 0 ou 254), então algo está errado. Verifique se o seu transistor é realmente NPN e está conectado corretamente (certifique-se de usar a base, o coletor, os pinos do emissor corretos - a base vai para D3, o coletor para MQ-7 e o emissor para o solo, não conte com a visualização da placa de ensaio Fritzing - é errado para alguns transistores) e certifique-se de que conectou a entrada do sensor à entrada A1 do Arduino. Se tudo estiver bem, você deverá ver na plotadora serial do IDE do Arduino algo semelhante à imagem. Ciclos de aquecimento e medição de 60 e 90 segundos de duração são executados um após o outro, com CO ppm medido e atualizado ao final de cada ciclo. Você pode pegar um pouco de chama aberta perto do sensor quando o ciclo de medição estiver quase concluído e ver como isso afetará as leituras (dependendo do tipo de chama, pode produzir até 2.000 ppm de concentração de CO ao ar livre - portanto, embora apenas uma pequena porção de na verdade, ele vai para o sensor, ele ainda ativará o alarme e não disparará até o final do próximo ciclo). Mostrei na imagem, bem como a resposta ao fogo do isqueiro.

Etapa 7: calibração do sensor

Calibração do Sensor
Calibração do Sensor
Calibração do Sensor
Calibração do Sensor

De acordo com a ficha de dados do fabricante, o sensor deve operar ciclos de aquecimento-resfriamento por 48 horas consecutivas antes de poder ser calibrado. E você deve fazer isso se pretende usá-lo por muito tempo: no meu caso, a leitura do sensor em ar limpo mudou cerca de 30% em 10 horas. Se você não levar isso em consideração, você pode obter um resultado de 0 ppm onde há, na verdade, 100 ppm de CO. Se você não quiser esperar 48 horas, pode monitorar a saída do sensor no final do ciclo de medição. Quando passar de uma hora, ele não mudará por mais de 1-2 pontos - você pode parar de aquecer aí.

Calibração aproximada:

Depois de executar o esboço por pelo menos 10 horas em ar limpo, pegue o valor bruto do sensor no final do ciclo de medição, 2-3 segundos antes do início da fase de aquecimento, e escreva-o na variável sensor_reading_clean_air (linha 100). É isso. O programa estimará outros parâmetros do sensor, eles não serão precisos, mas devem ser o suficiente para distinguir entre a concentração de 10 e 100 ppm.

Calibração precisa:

Eu recomendo fortemente encontrar um medidor de CO calibrado, fazer uma amostra de 100 ppm de CO (isso pode ser feito colocando um pouco de gás de combustão na seringa - a concentração de CO pode estar facilmente na faixa de vários milhares de ppm - e lentamente colocando-o em um frasco fechado com medidor calibrado e sensor MQ-7), faça a leitura bruta do sensor nesta concentração e coloque-a na variável sensor_reading_100_ppm_CO. Sem esta etapa, sua medição de ppm pode estar errada várias vezes em qualquer direção (ainda ok se você precisar de um alarme para concentração perigosa de CO em casa, onde normalmente não deveria haver CO, mas não é bom para qualquer aplicação industrial).

Como eu não tinha nenhum medidor de CO, usei uma abordagem mais sofisticada. Primeiro preparei alta concentração de CO usando combustão em volume isolado (primeira foto). Neste artigo, encontrei os dados mais úteis, incluindo o rendimento de CO para diferentes tipos de chama - não está na foto, mas o experimento final usou a combustão de gás propano, com a mesma configuração, resultando em uma concentração de CO de ~ 5000 ppm. Em seguida, foi diluído 1:50 para atingir 100 ppm, conforme ilustrado na segunda foto, e utilizado para determinar o ponto de referência do sensor.

Etapa 8: alguns dados experimentais

Alguns dados experimentais
Alguns dados experimentais

No meu caso, o sensor funcionou muito bem - não é muito sensível para concentrações realmente baixas, mas bom o suficiente para detectar qualquer coisa acima de 50 ppm. Tentei aumentar a concentração gradualmente, fazendo medições e construindo um conjunto de gráficos. Existem dois conjuntos de linhas de 0 ppm - verde puro antes da exposição ao CO e verde amarelo depois. O sensor parece mudar ligeiramente sua resistência ao ar limpo após a exposição, mas esse efeito é pequeno. Não parece ser capaz de distinguir claramente entre as concentrações de 8 e 15, 15 e 26, 26 e 45 ppm - mas a tendência é muito clara, então ele pode dizer se a concentração está na faixa de 0-20 ou 40-60 ppm. Para concentrações mais altas, a dependência é muito mais distinta - quando exposta ao escapamento de uma chama aberta, a curva sobe desde o início sem descer, e sua dinâmica é totalmente diferente. Portanto, para altas concentrações, não há dúvida de que funciona de forma confiável, embora não possa confirmar sua precisão, pois não tenho nenhum medidor de CO nominal. Além disso, este conjunto de experimentos foi feito usando resistor de carga de 20k - e depois disso decidi para recomendar 10k como o valor padrão, deve ser mais sensível dessa forma. É isso. Se você tiver um medidor de CO confiável e tiver montado esta placa, compartilhe alguns comentários sobre a precisão do sensor - seria ótimo coletar estatísticas sobre vários sensores e melhorar as suposições de esboço padrão.

Recomendado: