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?
Tags:
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:
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:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por