Por David Peaslee

Criar um detector de CO (monóxido de carbono) que possa alertá-lo para níveis perigosos de CO pode ser feito com tão pouco como um sensor de gás, um Arduino (ou outro microcontrolador) e algumas resistências. A adição de alguns op-amps pode aumentar a sensibilidade para medir a quantidade de CO presente no ambiente. Expandindo este conhecimento, você pode construir sua própria estação de monitoramento da qualidade do ar, e comparar seu próprio quintal com os níveis reportados pelas estações meteorológicas locais.

Materiais requeridos

  • 1 Arduino Uno
  • 1 Multímetro (DMM)
  • 1 Placa de pão com vários fios de jumper
  • 2 Resistores 10 kΩ
  • 1 Resistor 100 kΩ
  • 1 Sensor de Gás de CO SPEC (Digi-Key Part Number: 1684-1000-ND)

Conta de projeto

Apesar de trabalhar em uma empresa de sensores de gás, eu trabalhei com muitas startups que tinha muitas grandes idéias para medir a qualidade do ar. Enquanto eu realmente espero que um dia todos tenham sensores de gás em seus telefones e computadores, por enquanto, eu gostaria de ajudar o dia-a-dia Maker a construir seus próprios sistemas de monitoramento de ar.

Para este projeto, eu gostaria de começar com o básico: O que faz um sensor eletroquímico funcionar?

  • Existem dois tipos básicos de sensores eletroquímicos de gás, 2-electrodos e 3-electrodos. Ambos operam com os mesmos princípios básicos. Um gás difunde-se para dentro do sensor e faz o seu caminho até ao eléctrodo de trabalho. Lá ele reage com um catalisador e cria íons (moléculas carregadas). Esses iões movem-se através do electrólito (por vezes semelhante ao ácido da bateria) e reagem novamente no contra-electrodo onde os electrões são libertados (ou recolhidos) para se moverem através do circuito. Dependendo do gás a ser reagido e do catalisador, esses elétrons podem estar fluindo para dentro ou para fora de qualquer eletrodo. Medindo este fluxo de elétrons (corrente) temos uma idéia de quantas partículas estão reagindo por segundo, o que nos dá uma idéia de quantas partículas estão lá em primeiro lugar.
  • Com a adição de um terceiro eletrodo, a referência, podemos criar um diferencial de tensão constante entre a referência e as tensões de trabalho. Isto é o que chamamos o potencial de polarização. Por exemplo, se a tensão de referência for 1,25 V, e o trabalho for a 1,35 V dizemos que a polarização é de +100 mV. A química não tem nada a ver com os 1,25 e 1,35 Volts, apenas se preocupa que haja um potencial de +100 mV no eléctrodo de trabalho. Há muito mais que vai para esta célula eletroquímica, mas isto é tudo o que precisamos saber para começar. Neste projeto, vamos pegar um sensor de 3-electrodos e usá-lo em uma configuração de 2-electrodos como na Figura 1.

  • Um último bit de informação, PPM, ou partes por milhão, é um padrão de afirmar a concentração. Por exemplo, 1 ppm é uma partícula de um determinado gás por milhão de partículas totais de gás presentes.

>

Sensor deSPEC - Monóxido de Carbono

Figure 1. Um sensor de gás de 3-electrodos conectado em uma configuração de 2-electrodos. (Imagem cortesia da SPEC Sensors)

Disclaimer 1: Cuidado: Vou mostrar-vos alguns resultados de testes que fiz com gás monóxido de carbono pressurizado. Um pequeno cilindro de CO está disponível online, mas é letal. Você deve ler sobre isso antes de decidir usar CO em um projeto.1 Aviso 2: Se você precisar encontrar uma fonte alternativa de CO, um cigarro irá produzir cerca de 300 ppm de CO no fluxo inalado.

Como fazer

Configuração do protótipo do sensor de gás básico.

Figure 2. Configuração básica do protótipo do sensor de gás. (Imagem cortesia da SPEC Sensors)

Parte 1 – Configuração básica do sensor

I’m going to start with the most basic circuit and show you how to measure the sensor with just a sensor, a 10 kΩ resistor, and a multimeter.

i. Corte os dois pinos que não estão rotulados (veja Figura 2), depois centre o sensor na tábua de pão.

ii. Use um jumper curto para encurtar os pinos R e C (contador e referência). Use outro jumper curto para encurtar os pinos W1 e W2 (isto está apenas dando uma rota extra para a corrente, já que os pinos já estão em curto-circuito no PCB).

iii. Ligue o cabo positivo do multímetro ao lado do R/C do sensor. Conecte o lado negativo do medidor ao lado W1/W2 do sensor.

iv. Finalmente use um resistor 10 kΩ (R1) para conectar os pinos R/C aos pinos W1/W2.

Neste ponto você está pronto para testar o sensor. Você pode usar um fósforo ou fumaça, mas ele funcionará melhor se estiver em um recipiente selado. Um prato Pyrex/vidro com uma tampa hermética funcionará muito bem. Tente acender um fósforo e depois soprá-lo e colocá-lo na parabólica com o sensor. Você pode ter que cortar buracos para passar as linhas elétricas. Na minha configuração, eu executei 200 ppm de CO a cerca de 100 centímetros cúbicos por minuto, o que é bastante lento. Como mostrado na Figura 3, apenas o multímetro está ligado ao sensor.

Configuração do sensor de CO com apenas um multímetro ligado

Figure 3. Configuração do sensor de CO com apenas um multímetro conectado para mostrar a saída. (Imagem cortesia da SPEC Sensors)

algumas matemáticas necessárias:

A medição que pode esperar depende da sua configuração e da sensibilidade do sensor. Neste modo de 2 eletrodos você pode esperar cerca de metade da sensibilidade, então se o seu sensor diz 4.0 nA/ppm, você pode esperar cerca de 2 nA/ppm. Para converter mV para ppm use a lei de Ohm: Voltagem (V) = Corrente (A) x Resistência (Ω). Por exemplo:

Na configuração da Figura 3, eu começo com 0.2 mV sem gás e termino com 4.8 mV com cerca de 200 ppm fluindo para dentro da caixa e para fora através de um respiradouro para fora. A diferença de tensão é de 4,6 mV. A resistência R1 é 10 kΩ, portanto a corrente é 0,0046 V/ 10.000 Ω, ou 460 nA. Para obter ppm, divida a corrente medida pela sensibilidade; 460 nA / ~2 nA/ppm, ou 230 ppm. Isto é muito próximo do que eu coloco na caixa; 200 ppm. Para calcular a nova sensibilidade, use mV e ppm. Minha nova sensibilidade é 4,6 mV/200 ppm ou 0,23 mV/ppm.

Figure 4 mostra a direção que a corrente percorre no circuito. O terminal A é o condutor positivo do DMM e o B é o condutor negativo (comum). Você pode imaginar que os elétrons são usados no eletrodo de trabalho e produzidos no contador/elétrodo de referência. Se os cabos do sensor estiverem ao contrário, você medirá uma tensão negativa em vez disso.

Direção do fluxo de corrente na configuração do sensor

Figure 4. Sentido do fluxo de corrente na configuração do sensor. (Imagem cortesia da SPEC Sensors)

Parte 2 – Configuração avançada do sensor

Agora vamos incorporar o Arduino Uno neste projecto. Há algumas mudanças que faremos para superar suas limitações, mas na realidade, você pode conectá-lo da mesma forma que fez com o multímetro. O lado positivo irá conectar o pino analógico A0 aos pinos R/C do sensor, e o lado negativo irá conectar o GND aos pinos W1/W2 do sensor. Com isto, use analogRead() para medir a tensão através do sensor e resistência R1. O código final do Arduino pode ser encontrado no final deste artigo, e inclui as melhorias de amostragem que descrevi abaixo.

Notas no ADC de um Arduino:

Do cálculo acima, você pode ver que 1 ppm irá gerar uma tensão de 0.23 mV. Isso é um problema para o ADC de 10 bits do Arduino, pois a resolução mínima para o Uno é de 4,88 mV (5 V/1024 níveis). Isso significa que o mínimo que o Arduino pode detectar é 21 ppm, o que ainda é muito alto.

A primeira melhoria é mudar a referência analógica para a referência interna de 1,1 V . Isto altera a resolução mínima para 4,7 ppm, o que é melhor. Por favor leia as instruções para isso em https://www.arduino.cc/en/Reference/AnalogReference. A próxima correção é implementar a média. A taxa máxima de leitura da analogRead() é 10.000 vezes por segundo. Se você fizer uma média dessas leituras em um segundo, digamos 256, isso irá melhorar significativamente a resolução.2

UH-OH MOMENT

Finalmente, como você aumentou a resolução, você pode descobrir que zero não é mais 0 V no ADC do Arduino. Para corrigir isso, precisamos trazer essa tensão zero (que significa corrente zero) para um valor maior que possa ser lido pelo ADC. Aqui vamos implementar uma escada de voltagem com a adição de um 100 kΩ e um 10 kΩ resistor. Quando houver corrente zero gerada pelo sensor, estaremos medindo a tensão entre os dois novos resistores. A corrente através dos resistores é de 3,3 V/ (100.000 +10.000 Ω), ou 30 microAmps. Assim, entre os dois novos resistores estaremos medindo 10.000 Ω * 30 microAmps ou 0,3 Volts. Esta escada de voltagem usará 30 microAmps, portanto, se você precisar economizar energia, para a vida útil da bateria, tente aumentar o valor do resistor de 100 kΩ. Agora a nossa nova voltagem zero está próxima de 0,3 Volts, e qualquer coisa acima disto é devido ao gás CO que gera uma voltagem através da resistência R1.

Protótipo de sensor de CO com uma placa Arduino

Figure 5. Protótipo de sensor de CO com uma placa Arduino. (Imagem cortesia da SPEC Sensors)

Então como exemplo final, com esta configuração estamos a medir 0,355 Volts. Primeiro subtraia a tensão zero de 0,3 V, dando 0,055 V ou 55 mV. Agora divida pela nossa nova sensibilidade de 0.23 mV/ppm e estamos medindo 240 ppm CO, que é um nível perigoso para respirar por longos períodos de tempo.

Resumo e próximos passos:

Por meio do terminal serial, consegui capturar cerca de 2 horas de registro a cerca de 1 amostra a cada 1,5 segundos. A Figura 6 mostra o que é possível com o Arduino, alguns resistores, o sensor e algumas médias. Os próximos passos seriam usar o sensor em uma configuração de 3-electrodos, o que proporciona maior estabilidade, e amplificação de sinal. As partes para isso incluem um amplificador de op duplo, ou dois amplificadores de op duplo, e alguns resistores. Na realidade, a saída dos sensores pode depender de outros fatores, como temperatura e mudanças na umidade, mas uma boa estação meteorológica estará registrando estas coisas também.

Saída da configuração do sensor Arduino com média de dados

Figure 6. Saída da configuração do sensor Arduino com cálculo da média dos dados. (Imagem cortesia da SPEC Sensors)

Em artigos futuros, apresentarei outros projetos, incluindo o circuito de 3-electrodos e usando versões digitais destes sensores. Se você estiver pronto para construir seu próprio circuito você pode conferir as notas de aplicação na SPEC Sensors.

Arduino Code usado para este projeto:

Copy Code

/*
Analog input, Serial output
Reads an analog gas sensor at pins A0,
Also prints the results to the serial monitor.
The circuit:
Gas sensor pin W (Working) connected to middle of resistor ladder (I used 10k and 100k).
Gas sensor C (counter) and R (reference) connected together and then jumped to analog pin A0.
10 kOhm resistor between W1/W2 and C/R.
created 01 Jul. 2017
by David Peaslee
*/
// these constants won't change. They're used to give names to the pins used:
const int analogInPin = A0; // Analog input pin that the sensor is attached to
const int resValue = 9700; // Value of 10kOhm resistor !change this to match your resistor
const float Vref = 1.1; //This is the voltage of the internal reference
const long int cOff = 68286; //286mV offset due to resistor ladder. Try taking the average of a long
//measurement of the counts without a sensor in place. This should give a good Zero.
const float Sf = 2.11; // sensitivity in nA/ppm,
//this is roughly about 1/2 the sensitivity of the barcode on the sensor. Try finding a known
//concentration of CO to measure, or just approximate.
const int extraBit = 256; //Number of samples averaged, like adding 8 bits to ADC
long int sensorValue = 0; // value read from the sensor
float currentValue = 0; // current read from the sensor
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
// !!!set analog reference to 1.1 Volts!!!
analogReference(INTERNAL);
}
void loop() {
// read the analog in value:
sensorValue = 0;
for (int i = 0; i < extraBit; i++) {
sensorValue = analogRead(analogInPin) + sensorValue;
delay(3); // needs 2 ms for the analog-to-digital converter to settle after the last reading
}
sensorValue = sensorValue - cOff; //subtract the offset of the resistor ladder * 256.
// print the results to the serial monitor:
Serial.print("PPM = ");
Serial.print( ((float) sensorValue / extraBit / 1024 * Vref / resValue * 1000000000) / Sf);
Serial.print("\tnA = ");
Serial.print( (float) (sensorValue) / extraBit / 1024 * Vref / resValue * 1000000000);
Serial.print("\tCounts = " );
Serial.println(sensorValue);
//Trying to make each loop 1 second
delay(218); //1 second – 3ms*256ms (each adc read)-14ms (for printing)= 218ms
}

Para bibliotecas adicionais de sensores Spec para trabalhar com vários sensores ULP, vá para este link no GitHub: https://github.com/SPEC-Sensors/ULPSM

Articles

Deixe uma resposta

O seu endereço de email não será publicado.