Sensor MQ2 smoke detektor ESPhome

www
Odpovědět
Uživatelský avatar
tiimsvk
Dárce - Donátor
Dárce - Donátor
Příspěvky: 800
Registrován: 06. květen 2021, 07:03
Dal poděkování: 72 poděkování
Dostal poděkování: 65 poděkování

Sensor MQ2 smoke detektor ESPhome

Příspěvek od tiimsvk »

Ahojte potreboval by som pomôcť so zápisom kódu z C++ do esphome a matematickou rovnicou

Našiel som funkčný kód pre arduino:

Kód: Vybrat vše

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define buzzer 9

#define sensor A0    

#define load_Res 10    

#define air_factor 9.83  

                                                    

float SmokeCurve[3] ={2.3,0.53,-0.44};    // (x, y, slope) x,y coordinate of one point and the slope between two points

                                                                                        

float Res=0;                

void setup()

{   

  lcd.begin(16,2);

  lcd.print("Calibrating.....");                

  Res = SensorCalibration();                                                                                          

  lcd.print("Calibration done.");

  lcd.setCursor(0,1); 

  lcd.print("Res=");

  lcd.print(Res);

  lcd.print("kohm");

  delay(2000);

  lcd.clear();

  pinMode(buzzer, OUTPUT);

}

void loop()

{  

   lcd.setCursor(0,0); 

   lcd.print("SMOKE:"); 

   float res=resistance(5,50);

   res/=Res;

   int result=pow(10,(((log(res)-SmokeCurve[1])/SmokeCurve[2]) + SmokeCurve[0]));

   lcd.print(result);

   lcd.print( " ppm        ");

   if(result>1000)

   {

      digitalWrite(buzzer, HIGH);

      delay(2000);

   }

   else

   digitalWrite(buzzer, LOW);

   delay(500);

}

float resistance(int samples, int interval)

{

   int i;

   float res=0; 

   for (i=0;i<samples;i++) 

   {

      int adc_value=analogRead(sensor);

      res+=((float)load_Res*(1023-adc_value)/adc_value);

      delay(interval);

   }

   res/=samples;

   return res;

}

 

 

float SensorCalibration()

{

  int i;

  float val=0;    

  val=resistance(50,500);                

  val = val/air_factor;  

  return val; 

}

Na stránkach https://circuitdigest.com/microcontroll ... gas-sensor

Kde je veľmi pekne popisane ako to spojazniť.
Ja by som potreboval toto cele prehodiť do esphome za pomoci lambda funkcie a matematiky:

Hlavne si neviem rady s tymto " int result=pow(10,(((log(res)-SmokeCurve[1])/SmokeCurve[2]) + SmokeCurve[0]));" aké čisla doplniť za jednotlive položky?
Nemám skusenosti v kodovaní C++

ďakujem za každu pomoc

Odpovědět

Zpět na „ESPHome“