Help With Air Quality Sensors

hello, so i have a device which measure air quality , i have mq131 mq135 dht11 dsm501 with arduino mega , i used a lcd with a i2c connector to it but , i cant get the code to update the dsm501 data in lcd , can someone help??

/*
  MQUnifiedsensor Library - reading an MQ135

  Demonstrates the use a MQ135 sensor.
  Library originally added 01 may 2019
  by Miguel A Califa, Yersson Carrillo, Ghiordy Contreras, Mario Rodriguez
 
  Added example
  modified 23 May 2019
  by Miguel Califa 

  Updated library usage
  modified 26 March 2020
  by Miguel Califa 

  Wiring:
  https://github.com/miguel5612/MQSensorsLib_Docs/blob/master/static/img/MQ_Arduino.PNG
  Please make sure arduino A0 pin represents the analog input configured on #define pin

 This example code is in the public domain.

*/

//Include the library
#include <MQUnifiedsensor.h>
#include <MQUnifiedsensor.h>
#include "DHT.h"
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,28,4); 

//Definitions
#define DHTPIN 52 // paye data sensor be 4 arduino vasl shode    
#define DHTTYPE DHT11   // DHT 11
#define placa "Arduino MEGA"
#define Voltage_Resolution 5
#define pin A0 //Analog input 0 of your arduino
#define type "MQ-135" //MQ135
#define ADC_Bit_Resolution 10 // For arduino UNO/MEGA/NANO
#define RatioMQ135CleanAir 3.6//RS / R0 = 3.6 ppm  
#define pindng A1
#define typesty "MQ-131"
#define RatioMQ131CleanAir 15

int pin2 = 3;
int pin1 = 2;
unsigned long duration1;
unsigned long duration2;

unsigned long starttime;
unsigned long sampletime_ms = 3000;//sampe 1s ;
unsigned long lowpulseoccupancy1 = 0;
unsigned long lowpulseoccupancy2 = 0;
float ratio1 = 0;
float ratio2 = 0;
float concentration1 = 0;
float concentration2 = 0;


//#define calibration_button 13 //Pin to calibrate your sensor

//Declare Sensor
MQUnifiedsensor MQ131(placa, Voltage_Resolution, ADC_Bit_Resolution, pindng, typesty);

DHT dht(DHTPIN, DHTTYPE);//sakht class
MQUnifiedsensor MQ135(placa, Voltage_Resolution, ADC_Bit_Resolution, pin, type);
void setup() {
  
  //Init the serial port communication - to debug the library
  Serial.begin(9600); //Init serial port
  pinMode(2,INPUT);
  pinMode(3,INPUT);

  starttime = millis();//get the current time;
  MQ131.setRegressionMethod(1); //_PPM =  a*ratio^b
  dht.begin();
  //Set math model to calculate the PPM concentration and the value of constants
  MQ135.setRegressionMethod(1); //_PPM =  a*ratio^b  
  /*****************************  MQ Init ********************************************/ 
  //Remarks: Configure the pin of arduino as input.
  /************************************************************************************/ 
  MQ131.init(); 
  MQ135.init(); 
  lcd.init();                      // initialize the lcd 
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  /* 
    //If the RL value is different from 10K please assign your RL value with the following method:
    MQ135.setRL(10);
  */
  /*****************************  MQ CAlibration ********************************************/ 
  // Explanation: 
  // In this routine the sensor will measure the resistance of the sensor supposedly before being pre-heated
  // and on clean air (Calibration conditions), setting up R0 value.
  // We recomend executing this routine only on setup in laboratory conditions.
  // This routine does not need to be executed on each restart, you can load your R0 value from eeprom.
  // Acknowledgements: https://jayconsystems.com/blog/understanding-a-gas-sensor
  Serial.print("Calibrating please wait.");
  float calcR0 = 0;
  float calcR01 = 0;
  for(int i = 1; i<=10; i ++)
  {
    MQ135.update(); // Update data, the arduino will read the voltage from the analog pin
    calcR0 += MQ135.calibrate(RatioMQ135CleanAir);
    MQ131.update(); // Update data, the arduino will read the voltage from the analog pin
    calcR01 += MQ131.calibrate(RatioMQ131CleanAir);
    Serial.print(".");
  }
  Serial.print("\n");
  MQ135.setR0(calcR0/10);
  MQ131.setR0(calcR01/10);
  
  if(isinf(calcR0)) {Serial.println("Warning: Conection issue, R0 is infinite (Open circuit detected) please check your wiring and supply"); while(1);}
  if(calcR0 == 0){Serial.println("Warning: Conection issue found, R0 is zero (Analog pin shorts to ground) please check your wiring and supply"); while(1);}
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
 
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
  /*****************************  MQ CAlibration ********************************************/
}

void loop() {
  duration1 = pulseIn(pin1, LOW);
  duration2 = pulseIn(pin2, LOW);
  lowpulseoccupancy1 = lowpulseoccupancy1+duration1;
  lowpulseoccupancy2 = lowpulseoccupancy2+duration2;
  if ((millis()-starttime) > sampletime_ms)//if the sampel time == 30s
  {
    ratio1 = lowpulseoccupancy1/(sampletime_ms*10.0);  // Integer percentage 0=>100
    concentration1 = 1.1*pow(ratio1,3)-3.8*pow(ratio1,2)+520*ratio1+0.62; // using spec sheet curve

    ratio2 = lowpulseoccupancy2/(sampletime_ms*10.0);  // Integer percentage 0=>100
    concentration2 = 1.1*pow(ratio2,3)-3.8*pow(ratio2,2)+520*ratio2+0.62; // 

    lowpulseoccupancy1 = 0;
    lowpulseoccupancy2 = 0;
    starttime = millis();
    } 
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
 
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
  Serial.println("Sampling...");
  MQ135.update(); // Update data, the arduino will read the voltage from the analog pin

  MQ135.setA(605.18); MQ135.setB(-3.937); // Configure the equation to calculate CO concentration value
  float CO = MQ135.readSensor(); // Sensor will read PPM concentration using the model, a and b values set previously or from the setup
 
  MQ135.setA(77.255); MQ135.setB(-3.18); //Configure the equation to calculate Alcohol concentration value
  float Alcohol = MQ135.readSensor(); // SSensor will read PPM concentration using the model, a and b values set previously or from the setup

  MQ135.setA(110.47); MQ135.setB(-2.862); // Configure the equation to calculate CO2 concentration value
  float CO2 = MQ135.readSensor(); // Sensor will read PPM concentration using the model, a and b values set previously or from the setup

  MQ135.setA(44.947); MQ135.setB(-3.445); // Configure the equation to calculate Toluen concentration value
  float Toluen = MQ135.readSensor(); // Sensor will read PPM concentration using the model, a and b values set previously or from the setup
  
  MQ135.setA(102.2 ); MQ135.setB(-2.473); // Configure the equation to calculate NH4 concentration value
  float NH4 = MQ135.readSensor(); // Sensor will read PPM concentration using the model, a and b values set previously or from the setup

  MQ135.setA(34.668); MQ135.setB(-3.369); // Configure the equation to calculate Aceton concentration value
  float Aceton = MQ135.readSensor(); // Sensor will read PPM concentration using the model, a and b values set previously or from the setup

  MQ131.setA(23.943); MQ131.setB(-1.11); // Configure the equation to to calculate O3 concentration
  MQ131.update(); // Update data, the arduino will read the voltage from the analog pin
  MQ131.readSensorR0Rs(); // Sensor will read PPM concentration using the model, a and b values set previously or from the setup
   // Will print the table on the serial port
  float O3 = MQ131.readSensorR0Rs();
  MQ131.setA(-462.43); MQ131.setB(-2.204);
  MQ131.update();
  MQ131.readSensorR0Rs();
  float NOx = MQ131.readSensorR0Rs();
  MQ131.setA(47.209); MQ131.setB(-1.186);
  MQ131.update();
  MQ131.readSensorR0Rs();
  float CL2 = MQ131.readSensorR0Rs();
  // Note: 400 Offset for CO2 source: https://github.com/miguel5612/MQSensorsLib/issues/29
  /*
  Motivation:
  We have added 400 PPM because when the library is calibrated it assumes the current state of the
  air as 0 PPM, and it is considered today that the CO2 present in the atmosphere is around 400 PPM.
  https://www.lavanguardia.com/natural/20190514/462242832581/concentracion-dioxido-cabono-co2-atmosfera-bate-record-historia-humanidad.html
  */
  /*
    Exponential regression:
  GAS      | a      | b
  CO       | 605.18 | -3.937  
  Alcohol  | 77.255 | -3.18 
  CO2      | 110.47 | -2.862
  Toluen  | 44.947 | -3.445
  NH4      | 102.2  | -2.473
  Aceton  | 34.668 | -3.369
  */
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Sampling...");
  delay(10000);
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print("%");
  Serial.print(" | ");
  lcd.setCursor(0,0);
  lcd.clear();
  lcd.print("Humidity: ");
  lcd.print(h);
  lcd.print("%");
  lcd.setCursor(0,1);
  lcd.print("Temp: ");
  lcd.print(t);
  lcd.print(" *C");
  delay(5000);
  lcd.clear();
  lcd.print("CO: ");
  lcd.print(CO);
  lcd.print(" PPM");
  lcd.setCursor(0,1);
  lcd.print("CO2: ");
  lcd.print(CO2+400);
  lcd.print(" PPM");
  delay(5000);
  lcd.clear();
  lcd.print("O3: ");
  lcd.print(O3);
  lcd.print(" PPM");
  lcd.setCursor(0,1);
  lcd.print("CL2: ");
  lcd.print(CL2);
  lcd.print(" PPM");
  delay(5000);
  lcd.clear();
  lcd.print("Aceton: ");
  lcd.print(Aceton);
  lcd.print(" PPM");
  lcd.setCursor(0,1);
  lcd.print("Toluen: ");
  lcd.print(Toluen);
  lcd.print(" PPM");
  delay(5000);
  lcd.clear();
  lcd.print("NH4: ");
  lcd.print(NH4);
  lcd.print(" PPM");
  lcd.setCursor(0,1);
  lcd.print("NOx: ");
  lcd.print(NOx);
  lcd.print(" PPM");
  for (int i = 1; i <= 7; ++i) {
  lowpulseoccupancy1 = 0;
  lowpulseoccupancy2 = 0;
  starttime = millis();
  delay(5000);
  lcd.clear();
  lcd.print("PM10: ");
  lcd.print(concentration1,3);
  lcd.setCursor(0,1);
  lcd.print("conc1 = ");
  lcd.print(concentration1);
  lcd.setCursor(0,2);
  lcd.print("conc2 = ");
  lcd.print(concentration2);

  }
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(" | ");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(" | ");
  Serial.print("CO2:");
  Serial.print(CO2+400);
  Serial.print(" PPM");
  Serial.print(" | ");
  Serial.print("CO:");
  Serial.print(CO);
  Serial.print(" | ");
  Serial.print("Alcohol: ");
  Serial.print(Alcohol);
  Serial.print(" PPM");
  Serial.print(" | ");
  Serial.print("Toluen: ");
  Serial.print(Toluen);
  Serial.print(" PPM");
  Serial.print(" | ");
  Serial.print("NH4: ");
  Serial.print(NH4);
  Serial.print(" PPM");
  Serial.print(" | ");
  Serial.print("Aceton: ");
  Serial.print(Aceton);
  Serial.print(" PPM");
  Serial.print(" | ");
  Serial.print("Ozone: ");
  Serial.print(O3);
  Serial.print(" PPM");
  Serial.print(" | ");
  Serial.print("CL2: ");
  Serial.print(CL2);
  Serial.print(" PPM");
  Serial.print(" | ");
  Serial.print("NOx: ");
  Serial.print(NOx);
  Serial.print(" PPM");
  Serial.print("\n");
  delay(5000); //Sampling frequency
}

Does a simple "Hello World" sketch display data on the LCD OK ?

Your LCD is 28x4?

" LiquidCrystal_I2C lcd(0x27,28,4);"

Please explain what that sentence means. What did you expect to happen, and what happened instead?

yes

all of the things are printed on lcd but the info of the dsm501 sensor does not show

Is the data displayed in the Serial monitor correctly ?

20240418_205849 , this shows that the values must be updated but they dont get updated

the data prints , but the values dont get updated as the video i sent to @UKHeliBob

I am very reluctant to download a file that I know nothing about so I will not be doing it

its a video

its not a virus its just the output of lcd

Why should we watch a video of some stranger who has everything working? After all, the problem is in your project, not his.
Show your code and your output to the Serial

its a output



the value must change but it doesnt helpp please i need it very fast

Did you run the examples from the library?
Your actual code is big and contains a lot of unnecessary code.
Remove anything not relating with dsm501from the code - other sensors and work with the display. Leave only reading data from the dsm501 and outputting it to the Serial. Post this code on the forum

You have a lot of delays in your code.
The values are updated once in about 70sec , have patience :slight_smile:

okay

look at the code here Arduino Air Quality Monitor with DSM501A Sensor - Hackster.io it updates fast

i did run the examples and they work

Again - what the point to see somebody else code that works? the problem is in your code

Solve the problem piece by piece. Remove all unnecessary things from the code, leave only the sensor. If it works, start adding other sensors. Change the code in small steps, checking each time