رباتیک و هوافضا

آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینو

آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینو

بنام خدا

آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینو

آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینو

 

آشکارسازهای دود در تشخیص دود یا آتش در ساختمان ها بسیار مفید هستند و از پارامترهای مهم ایمنی به شمار می آیند. در این مقاله ما قصد داریم یک مدار آشکارساز دود ایجاد کنیم که نه تنها دود را در هوا حس می کند، بلکه سطح دود در هوا را بر حسب PPM (قسمت در میلیون) نمایش دهد.این مدار  زمانی که سطح دود بالاتر از ۱۰۰۰ پی پی ام  باشد، به وسیله ی یک بازر ( بلند گو ) هشدار می دهد . این مقدار آستانه را می توان در کد با توجه به نیاز تغییر داد .

این مدار از سنسور  گاز ( دود ) MQ2 و آردوینو برای تشخیص و محاسبه سطح دود استفاده می کند. سنسور گاز MQ2 همچنین به  LPG ( گاز مایع ) ، الکل ، و متان و ….  حساس است .این آشکارساز دود را می توان به راحتی بر روی برد بورد یا بورد های سوراخ دار ساخت ، اما ما تصمیم گرفتیم این را به صورت شیلد آردوینو روی برد چاپ شده (PCB) بسازیم . ما از شبیه ساز و طراحی PCB آنلاین EasyEDA استفاده کرده ایم تا این آشکارساز دود را برای آردوینو تولید کنیم .

 


آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینوقطعات مورد نیاز :

  • آردوینو  UNO
  • منبع تغذیه
  • سنسور گاز MQ2
  • مقاومت های ۱K , 10K
  • بازر ( بلندگو )
  • ال سی دی ۱۶X2
  • پتانسیومتر ۱۰k
  • LED
  • LM358

توضیح مدار :

در این مدار آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینو ، ما از سنسور گاز MQ2 برای تشخیص دود از پیش تعیین شده در هوا استفاده کرده ایم. ال سی دی ۱۶×۲ برای نمایش مقدار PPM دود استفاده می شود و آی سی LM358 برای تبدیل خروجی سنسور دود به شکل دیجیتال است (این عمل اختیاری است) . یک بازر به عنوان  زنگ هشدار مورد استفاده قرار گرفته است که هنگامی که سطح دود بیش از ۱۰۰۰ PPM می شود ، هشدار می دهد.

بیشتر بخوانید...  ولتمتر AC با استفاده از آردوینو

اتصالات مدار برای این پروژه بسیار ساده است ، ما یک مدار مقایسه کننده داریم  که عمل مقایسه ولتاژ خروجی سنسور دود با ولتاژ پیش فرض (خروجی متصل در پین D7) را انجام می دهد . خروجی سنسور دود سیگنال به پین آنالوگ آردوینو (A0) نیز متصل شده است. بازر نیز به پین  D9 متصل است . اتصالات ال سی دی همانند نمونه های LCD آردوینو هستند که در IDE آردوینو در دسترس هستند (۱۲، ۱۱، ۵، ۴، ۳، ۲) . اتصالات باقی مانده در دیاگرام مدار نشان داده شده است.

 

;(LiquidCrystal(rs, enable, d4, d5, d6, d7 

آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینو

 

نکته : در مدار، ما باید سه پین ​​از هدر J2 را برای محاسبه PPM دود، به هم متصل  کنیم .

توضیح برنامه نویسی :

در اینجا بیشتر به مقادیر نمودار نیاز داریم (ما از دو نقطه از نمودار استفاده می کنیم)، مقاومت سنسور (در کد محاسبه می شود) ، ثابت هوای تمیز (۹٫۸۳) و مقاومت در برابر بار (من ۱۰K اهم استفاده کردم ) .

ما می توانیم مقادیر نمودار را از دیتاشیت پیدا کنیم و مقاومت بار را از ۵ کیلو اهم تا ۵۴ کیلو اهم نیز میتوانیم قرار دهیم . سپس مقاومت سنسور را با توجه به مقادیر نمودار و نمونه های دود  بدست خواهیم آورد.

 

آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینو

دو نقطه از منحنی را انتخاب کرده و از آنها log میگیریم برای مثال نقطه اول (۰٫۵۳ , ۲٫۳)=(log200 , log3.4) و نقطه دوم (lg10000,lg0.63)=(4,-0.20) . سپس شیب منحنی را با استفاده از فرمول: (y2-y1) / (x2-x1) پیدا کنید ، سپس یک نقطه و شیب را بگیرید (-۰٫۴۴) و از آنها در برنامه (x، y، شیب) استفاده کنید . برای درک محاسبات، کد زیر را بررسی کنید.
ابتدا ما باید فایل هدر را برای ال سی دی قرار دهیم و پین ها را  تعریف کنیم. سپس مقادیر منحنی و مقاومت بار را تعریف می کنیم.

 

#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};
                                                                                        
float Res=0;
حالا در void setup () ما باید با استفاده از تابع SensorCalibration  سنسور را کالیبره کنیم. :
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);
}
float SensorCalibration()
{
  int i;
  float val=0;    
  val=resistance(50,500);                
  val = val/air_factor;  
  return val; 
}
سپس در تابع voidloop ، مقدار PPM دود را با استفاده از تابع resistance محاسبه می کنیم. :
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;
}

نکته : قبل از کالیبره کردن سنسور ، پروژه  را در حالت کار به مدت ۱۰ دقیقه در هوای تمیز قرار دهید و پس از آن عملیات کالیبراسون را آغاز کنید. روند کالیبراسیون سنسور حداقل ۲۵ ثانیه طول خواهد کشید  کد های پروژه آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینو در پایان مقاله برای دانلود قرار داده شده اند .

بیشتر بخوانید...  پیدا کردن آدرس آی پی یک رزبری پای با استفاده از کد پایتون

دانلود کد های پروژه :

 

دانلود فایل

 

کد های آشکار ساز دود با استفاده از سنسور گاز MQ2 و آردوینو.  :

#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; 
}

 

دیدگاه‌ها (2)

*
*

    سجاد مهمان خرداد 19, 1397 پاسخ

    احسنت بر شما

      Admin مدیر کل شهریور 8, 1397 پاسخ

      سلام
      خیلی ممنون