Minha estréia por aqui!

montei um sensor de ozônio com o MQ 131.

Usei esta programação abaixo porque preciso da concentração em ppb ou ppm:

const int MQ_PIN = A1; // Pin del sensor
const int RL_VALUE = 5; // Resistencia RL del modulo en Kilo ohms
const int R0 = 10; // Resistencia R0 del sensor en Kilo ohms

// Datos para lectura multiple
const int READ_SAMPLE_INTERVAL = 100; // Tiempo entre muestras
const int READ_SAMPLE_TIMES = 5; // Numero muestras

// Ajustar estos valores para vuestro sensor según el Datasheet
// (opcionalmente, según la calibración que hayáis realizado)
const float X0 = 5;
const float Y0 = 6;
const float X1 = 100;
const float Y1 = 0.4;

// Puntos de la curva de concentración {X, Y}
const float punto0[] = { log10(X0), log10(Y0) };
const float punto1[] = { log10(X1), log10(Y1) };

// Calcular pendiente y coordenada abscisas
const float scope = (punto1[1] - punto0[1]) / (punto1[0] - punto0[0]);
const float coord = punto0[1] - punto0[0] * scope;

void setup()
{
Serial.begin(9600);
}

void loop()
{
float rs_med = readMQ(MQ_PIN); // Obtener la Rs promedio
float concentracao = (getConcentracao(rs_med/R0))/1200; // Obtener la concentración

// Mostrar el valor de la concentración por serial
Serial.println("Concentracao:ppb ");
Serial.println(concentracao);
}

// Obtener la resistencia promedio en N muestras
float readMQ(int mq_pin)
{
float rs = 0;
for (int i = 0;i<READ_SAMPLE_TIMES;i++) {
rs += getMQResistance(analogRead(mq_pin));
delay(READ_SAMPLE_INTERVAL);
}
return rs / READ_SAMPLE_TIMES;
}

// Obtener resistencia a partir de la lectura analogica
float getMQResistance(int raw_adc)
{
return (((float)RL_VALUE / 1000.0*(1023 - raw_adc) / raw_adc));
}

// Obtener concentracion 10^(coord + scope * log (rs/r0)
float getConcentracao(float rs_ro_ratio)
{
return pow(10, coord + scope * log(rs_ro_ratio));
}

Tenho o datasheet e consegui a curva de calibração, mas não sei se os valores de RL e R0 estão corretos. E quando vario o potenciômetro não acontece nada!!! socorrroooo!!! alguém sabe por que?

Exibições: 1845

Responder esta

Respostas a este tópico

Boa noite CT,

recomendação: Não post sketch na área de texto do tópico,

e leia o tópico:

http://labdegaragem.com/forum/topics/sugest-o-de-como-postar

Rui

Não conheço esse sensor, não sei se consigo ajudar, mas...

Uma sugestão para debug seria incluir no seu programa mais Serial.println().

Digo, primeiro imprimir o valor direto lido (analogRead(MQ_PIN))

Aih vc já sabe que no pino está vindo, ou não, uma informação. Assim vai entendendo onde o valor se perde.

Ref:

https://www.arduino.cc/en/Serial/Println

Ja trabalhei com esses sensores da série MQ.

Se vc já comprou o sensor MQ com os 4 pinos, VCC, GND , A0 e D0.

Este potenciômetro serve para definir a calibração do quanto de tensão é "0" e "1" para o pino digital(D0) deste sensor.

OBSERVAÇÃO: Caso tenha reparado no datasheet, existem outros gases que podem influênciar no resultado. Sendo esse sensor aplicado mais a ambientes homogêneos. 

Sobre o código, não poderei te ajudar pois desconheço o fabricante desse sensor e o modo de como circuito está ligado.

Caso queira tirar dúvida, pode me chamar (wallacejsb@gmail.com).

Abraços, e boa sorte.

Minhas sugestões para estudo:

https://playground.arduino.cc/Main/MQGasSensors

http://www.sensorsportal.com/DOWNLOADS/MQ131.pdf

https://www.sainsmart.com/sainsmart-mq131-gas-sensor-ozone-module-f...

Use uma fonte externa de 5V para alimentar o circuito - o sensor pode consumir aproximadamente 200 mA.

O sensor tem que ser pré-aquecido por mais de 48 horas ?? Veja o datasheet. 

Achei isso para o sensor MQ135. Talvez seja possível adaptar essa solução para o MQ131:

http://rdiot.tistory.com/110

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço