Programlama Kodları
//AÇIKLAMA
//Bu uygulamada gaz konsantrasyonu ppm hesabı konuda anlatılan
//2. yöntemdeki gibi formül ile hesaplanarak yapılacaktır.
//DİKKAT: Sensörün ısınması için, enerji verdikten sonra en az 5 dk ya da daha uzun süre
//beklenmelidir.
#define MQ2_pin A0
int V_besleme = 5;
float adim_volt = 0.00488; //Volt
int adim_deger;
float V_out;
int RL = 1000; //ohm
float Rs_hava, Rs_gaz, Ro;
float Rs_Ro_orani;
int x1 = 3700;
float y1 = 0.8;
int x2 = 7300;
float y2 = 0.6;
float m, b, ppm;
void setup()
{
Serial.begin(9600);
Serial.println("Ro referans değeri belirleniyor. Lütfen bekleyin...");
delay(2000);
adim_deger = analogRead(MQ2_pin);
V_out = adim_volt * adim_deger;
Rs_hava = ((V_besleme - V_out) / V_out) * RL;
Ro = Rs_hava / 9.8;
Serial.print("Ro referans değeri = "); Serial.print(Ro); Serial.println(" olarak belirlendi. Artık gaz ölçümü yapılabilir.");
delay(2000);
}
void loop()
{
adim_deger = analogRead(MQ2_pin);
V_out = adim_volt * adim_deger;
Rs_gaz = ((V_besleme - V_out) / V_out) * RL;
Rs_Ro_orani = Rs_gaz / Ro;
//Eğim (m) bulma. Eğim için noktalar grafikten belirlenmiştir.
m = (log10(y2) - log10(y1)) / (log10(x2) - log10(x1));
//Doğrunun y eksenini kestiği noktayı (b) bulma
b = log10(y1) - m * log10(x1);
//ppm'i bulma
ppm = pow(10, (log10(Rs_Ro_orani) - b) / m);
//Rs/Ro oranını yazdırma
Serial.print("Rs_gaz/Ro = "); Serial.print(Rs_Ro_orani); Serial.print(" | ");
//ppm'i yazdırma
Serial.print("ppm = "); Serial.println(ppm);
delay(1000);
}
Devre Şeması












