back to top

MQ-4 Gaz Sensörü ve Arduino İle Doğalgaz Kaçak Alarmı Yapalım

Bir proje yazısında daha sizlerleyiz. Bu sefer sizinle birlikte mutfak veya banyoda kullanılabilecek bir doğalgaz alarmı yapmayı öğreneceğiz.

Doğalgazın Kimyasal Yapısı

Doğalgaz, petrol türevi bir gazdır. İçeriğinin çoğunluğunu (%70-%90 kadarını) metan gazı (CH4) oluşturur. Metan gazının yanı sıra etan (C2H6), propan(C3H8), bütan (C4H10) gazlarını da içermektedir. Bu gazlar, doğalgazın yanıcı özelliğini sağlamaktadır. Bunların yanı sıra karışım içerisinde eser miktarlarda karbon dioksit (CO2), hidrojen sülfür (H2S) ve azot (N2) gibi gazlar da bulunur. Bu gazlardan hidrojen sülfür, çürük yumurta kokusuna sahiptir ve 10-750 ppm seviyesinde zehirleyici özellik göstermektedir.

İnsan burnu, hidrojen sülfür gazının 0.1-0.3 ppm seviyelerinde kokusunu alabilmektedir. 20ppm seviyesinde gözde ve burunda rahatsızlıkların başlamasına sebep olan hidrojen sülfür, 100ppm seviyesine ulaştığında koku duygusunu bastırmaya başlamaktadır. Bu sebeple doğalgazın içerisine yapay olarak çürük yumurta/sarımsak kokusuna benzer keskin koku verecek bir madde eklenmektedir.

Doğalgaz zehirlenmesinin belirtileri şu şekilde olur: mide bulantısı, baş ağrısı, soluk almada güçlükler, dudak ve yanakların kırmızı/mor bir renk alması. Eğer mutfak/banyo gibi doğalgaz hattının geçebileceği yerlerde buna benzer belirtiler görüyorsanız vakit kaybetmeden tıbbi destek almanız gereklidir.

Bizim bu projedeki amacımız, havadaki doğalgazın belirli bir seviyenin üzerine geçmesi durumunda sesli ve görsel alarm verecek bir devre tasarlamaktır. Bu işlem için MQ-4 gaz sensörü kartı ve Arduino kullanacağız.

MQ-4 Metan Gazı Sensörü

MQ serisi gaz sensörleri, ucuz fiyatları, uyumlulukları ve kolay kullanımları sayesinde Arduino projelerinde sıkça tercih edilmektedir. Projemizde kullanacağımız MQ-4 doğalgaz/metan sensörü, havada 300ppm ve 10000ppm seviyelerinde bulunan metan gazını algılamakta kullanılır. Sensör, havadaki gazın yoğunluğuna orantılı olacak şekilde analog gerilim çıkışı verir. Hassas seviyede gaz ölçümleri için kullanılmak istenildiğinde, datasheet’inden faydalanarak kalibrasyon yapılabilir; fakat bizim kullanacağımız projede gaz seviyesinin bizim belirleyeceğimiz bir eşik değerinin üzerine çıkıp çıkmadığını algılamak için kullanacağımızdan bu kadar detaylı bir kullanıma gerek duymamaktayız.

MQ Serisi Gaz Sensörleri Nasıl Çalışır?

MQ serisi gaz sensörleri içerisinde alıglanacak gaza duyarlı bir tel, ısıtıcı eleman ve bir yük direnci bulunur.

MQ tipi sensörlerin devre şeması

Isıtıcının etkisiyle ısınan metan gazı, sensör telinin üzerinden geçerek telin direncinin değişmesine sebep olur. Dirençteki değişimin, istediğimiz aralık olan 0-5V arasında olması için bir yük direnci kullanılır. Bu direnç üzerindeki gerilimi mikrokontrolcümüzün analog pinine bağlayabiliriz.

MQ tipi sensörler çoğunlukla, daha pratik bir kullanım sağlaması açısından genellikle bu gerekli harici devre elemanları ve analog çıkışın yanı sıra trimpot vasıtasıyla tetik noktası belirlenen bir dijital çıkış ile birlikte taşıyıcı kartlar ile birlikte sunulmaktadır.

Metan Gaz (CNG) Sensör Kartı - MQ-4
MQ-4 metan gaz sensörü kartı

Biz projemizde kart üzerindeki analog çıkış pinini kullanacağız.

Kullanacağımız malzemelerimiz:

Arduino – MQ-4 Gaz Sensörü Bağlantı Şeması

Devremizi aşağıdaki şemaya göre kuruyoruz:

Devrenin pratik olması ve istenildiğinde kolayca bir kutu içerisine taşınabilmesi için Arduino Nano tercih ettim. Siz isterseniz Arduino UNO da kullanabilirsiniz. Kurduğumuz devrenin bizim belirlediğimiz bir seviyede gaz algıladığında görsel ve sesli bir alarm vermesini istiyoruz. Bunun için bir RGB LED ve buzzer kullandık.

Buzzer ve RGB LED’i de kartlı tercih etmemin sebebi yine modülerlik. Eğer siz bu modüller yerine devre elemanlarını teker teker kullanmak isterseniz burada yer alan buzzer yazısına ve burada yer alan RGB LED yazısına başvurarak devre bağlantılarını gerçekleştirebilirsiniz.

Arduino’ya yükleyeceğimiz kodumuz aşağıda. Kopyalamada sorun yaşıyorsanız alternatif olarak bu adresten de koda erişmeniz mümkün: https://zerobin.net/?19438f989e566022#JwwN/FRcJbds6u05GhofAGzgKKP6QedrEOZohf0IG9w=

/*
`://////////////////////////////-`
-/////////::////////////:://///////-
://///-`     `://////:`     `-/////:
:////..:///:.  `////`.:///:.  .////:
:////:///////-  ////////////-  ////:
:///++///////: `////////////- `////:
://///-.////-`.//////.-////-`-/////:
:////////::-:///////////::-:///////:
-//////////////////////////////////-
-////////////////////////////////-
`------::////////////////////////////::------`
:/--////////////////////////////////////////--/-
`:/:://::::::://////////////////////::::::://::/:`
./////-     `////////////////////////`     -/////.
./////-    `//////////////////////////`    -/////.
./////-   `////////////////////////////`   -/////.
///////: `//////////////////////////////` :///////
////////`////////////////////////////////`////////
//////////////////////////////////////////////////
---.---.//////////////////////////////////.---.---
.://////////////////////////////:.
`-:///////:::::::::::::..:::::::::::::///////:-`
://////////////////////////////////////////////:
://////////////////////////////////////////////:
://////////////////////////////////////////////:
.//////////////////////:://////////////////////. 

Bu kod, 09/08/2017 tarihinde maker.robotistan.com için hazırlanmıştır.
*/

//Sensör pinlerimizi tanımlıyoruz:
#define sensor_pin A0
#define buzzer_pin 9
//RGB LED'imizin çıkış pinlerini tanımlıyoruz:
#define led_r 5
#define led_g 6
#define led_b 7
//Sensörün çalışması için gerekli ön ısıtma süresini 5sn olarak belirliyoruz
#define preheat_time 5000
//Alarmın çalması için gerekli eşik değerini 300 olarak belirliyoruz.
#define threshold 300

void setup()
{
//Alarm için kullanacağımız buzzer ve LED'leri çıkış olarak tanımlıyoruz
pinMode(buzzer_pin, OUTPUT);
pinMode(led_r, OUTPUT);
pinMode(led_g, OUTPUT);
pinMode(led_b, OUTPUT);
//Varsayılan olarak LED'in sönük kalmasını sağlıyoruz
digitalWrite(led_r, HIGH);
digitalWrite(led_g, HIGH);
digitalWrite(led_b, HIGH);
//Sensör değerini seri monitörden görebilmemiz için seri haberleşmeyi başlatıyoruz:
Serial.begin(9600);
//İlk 5sn boyunca sensörün ısınmasını bekliyoruz. Bu esnada LED mavi renkte yanıyor:
Serial.println("Sensor isitiliyor...");
digitalWrite(led_b, LOW);
delay(preheat_time);
//Isıma işlemi için gereken 5sn süre tamamlandığında mavi LED'i söndürüyoruz:
digitalWrite(led_b, HIGH);
delay(1000);
}

void loop()
{
//analogRead() fonksiyonu ile sensör değerini ölçüyoruz ve bir değişken içerisinde tutuyoruz:
int sensorValue = analogRead(sensor_pin);
//Sensör değeri belirlediğimiz eşik değerinden yüksek ise alarm() fonksiyonunu çağırıyoruz:
if (sensorValue >= threshold)
alarm(100);
//Alarmın çalmadığı durumda LED'in yeşil yanmasını istiyoruz:
else
digitalWrite(led_g, LOW);
//Sensör değerini bilgisayarımızdan görebilmek için seri monitöre yazıyoruz:
Serial.println(sensorValue);
delay(1);
}

//Alarm fonksiyonumuzu tanımlıyoruz. Bu fonksiyon parametre olarak buzzerın ötüp ve LED'in yanıp söneceği süreyi almakta.

void alarm(unsigned int duration)
{
//Buzzer'ın 440Hz'te (la notası) ses üretmesini istiyoruz:
tone(buzzer_pin, 440);
//Normal durumda yeşil yanmakta olan LED'i söndürüp kırmızı renkte yakıyoruz:
digitalWrite(led_r, LOW);
digitalWrite(led_g, HIGH);
delay(duration);
noTone(buzzer_pin);
digitalWrite(led_r, HIGH);
digitalWrite(led_g, HIGH);
delay(duration);
}

Bu kurmuş olduğumuz devrenin duman dedektörü olmadığını hatırlatmak isterim. MQ-4 sensörü havadaki metan gazını algılar. İsterseniz MQ-4 sensör kartını söküp farklı sensör kartları kullanmanız da mümkündür. Bu kartların çoğunun pin dizilimi aynıdır, doğrudan farklı sensör kartları takarak, örneğin MQ-2 sensörü takarak devreyi çok basit bir şekilde duman dedektörüne dönüştürebilirsiniz. Bir diğer dikkat etmeniz gereken nokta ise kodda bulunan threshold değerini sizin belirlemeniz gerektiğidir. Bu işlemi sensörü kullanmak istediğiniz yere koyup deneyerek yapabilirsiniz.

Son Çıkan Yazılar

90 YORUMLAR

  1. bi sorum olacak ben devre elemanlarını bu siteden sipariş verdim ve devreyi yaptım çok güzel calıştı fakat ilk devreye gaz verip çalıştırmamdan sonra hep alarm çalmaya ve led yanmaya devam etti usb çıkarıp yenıden taksam bile 5-6 saniye sonra devre alarmı çalmaya devam ediyor ama ben çaldıktan sonra durmasını ve gaz ne zaman verirsem alarmın devreye girmesini istiyorum nasıl yardımcı olursunuz bana

      • değeri değiştirip 1000 yapıyorum ne kadar gaz verseniz de alarm çalışmıyor,1000 in altında bir değer verdiğimde ise ise her türlü kırmızı yanıyor ve alarm çalışıyor.

      • Kerem Bey merhaba alttaki kodları yazarak lcd li MQ4 gas kontrol devresi yaptım bu konuda yeniyim 1. sorum I2C-driver li LCD kullanacağım library sini bulamadım
        2. sizin programdaki sensör ısınma katını sistemime eklemek istiyor ve ilk açılışta LCD ekranımda verilen 5sn. değerde ” sensör ısınıyor” yazısını görmek istiyorum..
        sonra tekrar lcd clear ile ana menüde ölçüm yapmayı nasıl yaparım bana aşağıdaki programa gereken satırları ekleyebilir misiniz ?
        alakanıza teşekkürler….

        #include
        int mq4 = A0; // GAS sensörü analog giriş pini
        int buz = 10; // Buzzer çıkış pini
        int led = 9; // Led çıkış pini
        int d; // dig. çıkış değeri sensör den 4.62V = POTENZ=AD/9.48
        float p; // sensör referans değeri 4.62 (ADC) (GERİLİM DÜŞÜMÜ)

        LiquidCrystal lcd (12, 11, 9, 8, 7, 6); // LCD bağlantıları
        lcd.clear(); // ekran temizle
        void setup(){
        pinMode(rel, OUTPUT);
        pinMode(buz, OUTPUT);
        pinMode(led, OUTPUT);
        digitalWrite(rel, LOW);
        digitalWrite(buz, LOW);
        digitalWrite(led, LOW);
        lcd.begin(16, 2); // 16 karakter 2 satır LCD
        }
        void loop(){
        lcd.clear(); // ekran temizle
        d = analogRead(mq4); // sensörü oku
        lcd.setCursor(0,0); // cursoru pozisyonla
        lcd.print(“CNG,LPG,METANGAZ”); // yazdır

        if (d = 20)
        {
        digitalWrite(rel, LOW);
        digitalWrite(buz, HIGH);
        delay (500);
        digitalWrite(buz, LOW);
        delay (500);
        digitalWrite(led, HIGH);
        delay (500);
        digitalWrite(led, LOW);
        delay (500);
        lcd.clear();
        lcd.setCursor(2,0);
        lcd.print(“GAZ SEViYESi”);
        lcd.setCursor(3,1);
        lcd.print(“TEHLiKELi !”);
        }
        else
        {
        digitalWrite(rel, HIGH);
        digitalWrite(buz, LOW);
        digitalWrite(led, LOW);
        }
        delay(1000);
        lcd.clear();
        }

  2. Yazınız için çok teşekkür ederim ama bir sorunum var.Oled ekranımız ile bmp180 sensörümüz a4 ve a5’i kullanıyor.Bizim bunların ikisini aynı yere takmamız halinde sizce sorun çıkarmı, çıkarsada nasıl bir yol izlemeliyiz?

  3. merhaba, bu devre üzerine birde servo eklemek istiyorum. gaz algılandığında servo çalışacak. Yardımlarınız için çok teşekkürler.

    • Buzzer’a seri olarak 100 ohm civarında bir direnç bağladığınız sürece hiçbir problem olmaz. Buzzer modülü kullanmamızın tek sebebi daha pratik olmasıdır.

      • buse : bi sorum olacak ben devre elemanlarını bu siteden sipariş verdim ve devreyi yaptım çok güzel calıştı fakat ilk devreye gaz verip çalıştırmamdan sonra hep alarm çalmaya ve led yanmaya devam etti usb çıkarıp yenıden taksam bile 5-6 saniye sonra devre alarmı çalmaya devam ediyor ama ben çaldıktan sonra durmasını ve gaz ne zaman verirsem alarmın devreye girmesini istiyorum nasıl yardımcı olursunuz bana
        yasin :değeri değiştirip 1000 yapıyorum ne kadar gaz verseniz de alarm çalışmıyor,1000 in altında bir değer verdiğimde ise ise her türlü kırmızı yanıyor ve alarm çalışıyor.

        Yukarıdaki hatalardan bahsediyorum. Çünkü daha önceden ardunio ile çalışmadım. Aynı problem karşıma çıkar mı diye düşüncelerim var ?

          • pinMode(buzzer_pin, OUTPUT); satırını sildiğimiz zaman gaz algıladığında buzzer kesik kesik çalmaya başlıyor gazı kesilince düz bir şekilde çalmaya devam ediyor. resetleyinceye kadar. gaz kesilince buzzer ın düz bir şekilde çalmasını nasıl engelleyebilirim ?

          • Buzzer’ın bağlı olduğu pini çıkış pini olarak tanımlamak zorundasınız, aksi taktirde bu pini çıkış pini olarak tanımlamadığınız için hatalar ile karşılaşırsınız.

  4. Arduino:1.8.5 (Windows 10), Kart:”Arduino/Genuino Uno”

    Çalışmanız programın 3172 bayt (9 %) saklama alanını kullandı. Maksimum 32256 bayt.
    Global değişkenler belleğin 231 byte kadarını (11%) kullanıyor. Yerel değişkenler için 1817 byte yer kalıyor. En fazla 2048 byte kullanılabilir.
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xf8
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xf8
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xf8
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xf8
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xf8
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xf8
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xf8
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xf8
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xf8
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xf8
    Karta yüklenirken sorun oluştu. Tavsiyeler için http://www.arduino.cc/en/Guide/Troubleshooting#upload adresine göz atabilirsiniz.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.
    HATASINI ALIYORUM NE YAPMALIYIM

    • Bu hatanın 3 temel sebebi olabilir:
      1) Arduino’nuzun RX ve TX pinlerine (0 ve 1 numaralı dijital pinler) harici bir bağlantı yapılıdır.
      2) Doğru COM portu Arduino IDE’den seçilmemiştir.
      3) Sürücüleriniz ile ilgili bir sorun mevcuttur.

      1 ve 2 numaralı sebeplerin çözümü basittir. Sürücülerinizi orijinal Arduino kullanıyorsanız Arduino IDE’yi tekrar yükleyerek, CH340 çipli klon Arduino kullanıyorsanız buradaki rehberimizden faydalanarak tekrar yüklemeniz mümkündür.

  5. Her şey iyi güzel proje çalışıyor fakat tek sıkıntımız Buzzer ın sürekli çalışması.

    Devreye enerji verdiğimizde buzzer sürekli çalıyor. Gaz verdiğimizde alarm şeklinde çalıyor. Alarm bitince düz bir şekilde çalıyor.
    Bu problemi nasıl çözebiliriz ?

    • Devre kartlı buzzer kullanıyorsanız 10k veya 1k ohm değerinde bir pull-down direncini sinyal pinine bağlamayı deneyebilirsiniz.

      • Evet Devre kartı buzzer kullanıyorum ama elektronik ile hiç uğraşmadım daha önce. Daha ayrıntılı (Sinyal pini ve pull – down) anlatabilirmisiniz videonuzda olduğu gibi.

        • //Sensör pinlerimizi tanımlıyoruz:
          #define sensor_pin A0
          #define buzzer_pin 10
          //RGB LED’imizin çıkış pinlerini tanımlıyoruz:
          #define led_r 5
          #define led_g 6
          #define led_b 7
          //Sensörün çalışması için gerekli ön ısıtma süresini 5sn olarak belirliyoruz
          #define preheat_time 5000
          //Alarmın çalması için gerekli eşik değerini 300 olarak belirliyoruz.
          #define threshold 500
          void setup()
          {
          //Alarm için kullanacağımız buzzer ve LED’leri çıkış olarak tanımlıyoruz

          pinMode(led_r, OUTPUT);
          pinMode(led_g, OUTPUT);
          pinMode(led_b, OUTPUT);
          //Varsayılan olarak LED’in sönük kalmasını sağlıyoruz
          digitalWrite(led_r, HIGH);
          digitalWrite(led_g, HIGH);
          digitalWrite(led_b, HIGH);
          //Sensör değerini seri monitörden görebilmemiz için seri haberleşmeyi başlatıyoruz:
          Serial.begin(9600);
          //İlk 5sn boyunca sensörün ısınmasını bekliyoruz. Bu esnada LED mavi renkte yanıyor:
          Serial.println(“Sensor isitiliyor…”);
          digitalWrite(led_b, LOW);
          delay(preheat_time);
          //Isıma işlemi için gereken 5sn süre tamamlandığında mavi LED’i söndürüyoruz:
          digitalWrite(led_b, HIGH);
          delay(1000);
          }

          void loop()
          {
          //analogRead() fonksiyonu ile sensör değerini ölçüyoruz ve bir değişken içerisinde tutuyoruz:
          int sensorValue = analogRead(sensor_pin);
          //Sensör değeri belirlediğimiz eşik değerinden yüksek ise alarm() fonksiyonunu çağırıyoruz:
          if (sensorValue >= threshold)
          alarm(300);
          //Alarmın çalmadığı durumda LED’in yeşil yanmasını istiyoruz:
          else
          digitalWrite(led_g, LOW);
          //Sensör değerini bilgisayarımızdan görebilmek için seri monitöre yazıyoruz:
          Serial.println(sensorValue);
          delay(1);
          }

          //Alarm fonksiyonumuzu tanımlıyoruz. Bu fonksiyon parametre olarak buzzerın ötüp ve LED’in yanıp söneceği süreyi almakta.

          void alarm(unsigned int duration)
          {
          //Buzzer’ın 440Hz’te (la notası) ses üretmesini istiyoruz:
          tone(buzzer_pin, 440);
          //Normal durumda yeşil yanmakta olan LED’i söndürüp kırmızı renkte yakıyoruz:
          pinMode(buzzer_pin, OUTPUT);
          digitalWrite(led_r, LOW);
          digitalWrite(led_g, HIGH);
          delay(duration);
          noTone(buzzer_pin);
          digitalWrite(led_r, HIGH);
          digitalWrite(led_g, HIGH);
          delay(duration);
          }

          • Bu kodu kullan verimli çalışıyor,fakat alarmdan sonra arduino ya reset atman lazım.

      • devre kartlı kulllanıyorum öne yeşil yanıyor sonra beyaz çakmağı tuttuğumda buzzer ötmüyor kırmızı ışıkta yanmıyor pull down nasıl bağlıcaz sinyal pini hangisi

  6. Selamun Aleykum.
    Arkadaşlar Buzzer’ın sürekli ötmesine çözüm buldum.Kodları aşağıdaki gibi düzelttiğiniz zaman sadece Gazı algıladığında ötecektir.Ayrıca
    Buzzer’ın sesinide değiştirdim.İlk defa Arduino ile bir proje yapmaya kalkan biri olarak kendimi Bilgisayarı bulmuş gibi hissettim 🙂

    Yeni Kodlar:
    //Sensör pinlerimizi tanımlıyoruz:
    #define sensor_pin A0
    #define buzzer_pin 9
    //RGB LED’imizin çıkış pinlerini tanımlıyoruz:
    #define led_r 5
    #define led_g 6
    #define led_b 7
    //Sensörün çalışması için gerekli ön ısıtma süresini 5sn olarak belirliyoruz
    #define preheat_time 5000
    //Alarmın çalması için gerekli eşik değerini 300 olarak belirliyoruz.
    #define threshold 300

    void setup()
    {
    //Alarm için kullanacağımız buzzer ve LED’leri çıkış olarak tanımlıyoruz

    pinMode(led_r, OUTPUT);
    pinMode(led_g, OUTPUT);
    pinMode(led_b, OUTPUT);
    //Varsayılan olarak LED’in sönük kalmasını sağlıyoruz
    digitalWrite(led_r, HIGH);
    digitalWrite(led_g, HIGH);
    digitalWrite(led_b, HIGH);
    //Sensör değerini seri monitörden görebilmemiz için seri haberleşmeyi başlatıyoruz:
    Serial.begin(9600);
    //İlk 5sn boyunca sensörün ısınmasını bekliyoruz. Bu esnada LED mavi renkte yanıyor:
    Serial.println(“Sensor isitiliyor…”);
    digitalWrite(led_b, LOW);
    delay(preheat_time);
    //Isıma işlemi için gereken 5sn süre tamamlandığında mavi LED’i söndürüyoruz:
    digitalWrite(led_b, HIGH);
    delay(1000);
    }

    void loop()
    {
    //analogRead() fonksiyonu ile sensör değerini ölçüyoruz ve bir değişken içerisinde tutuyoruz:
    int sensorValue = analogRead(sensor_pin);
    //Sensör değeri belirlediğimiz eşik değerinden yüksek ise alarm() fonksiyonunu çağırıyoruz:
    if (sensorValue >= threshold)
    alarm(40);
    //Alarmın çalmadığı durumda LED’in yeşil yanmasını istiyoruz:
    else
    digitalWrite(led_g, LOW);
    //Sensör değerini bilgisayarımızdan görebilmek için seri monitöre yazıyoruz:
    Serial.println(sensorValue);
    delay(1);
    }

    //Alarm fonksiyonumuzu tanımlıyoruz. Bu fonksiyon parametre olarak buzzerın ötüp ve LED’in yanıp söneceği süreyi almakta.

    void alarm(unsigned int duration)
    {
    //Buzzer’ın 440Hz’te (la notası) ses üretmesini istiyoruz:
    tone(buzzer_pin, 1000);
    //Normal durumda yeşil yanmakta olan LED’i söndürüp kırmızı renkte yakıyoruz:
    digitalWrite(led_r, LOW);
    digitalWrite(led_g, HIGH);
    delay(duration);
    noTone(buzzer_pin);
    digitalWrite(led_r, HIGH);
    digitalWrite(led_g, HIGH);
    delay(duration);
    pinMode(buzzer_pin, INPUT);
    }

  7. #define sensor_pin A0
    #define buzzer_pin 9
    #define led_r 5
    #define led_g 6
    #define led_b 7
    #define preheat_time 5000
    #define threshold 300
    #define trek 550
    void setup()
    {
    pinMode(led_r, OUTPUT);
    pinMode(led_g, OUTPUT);
    pinMode(led_b, OUTPUT);
    digitalWrite(led_r, HIGH);
    digitalWrite(led_g, HIGH);
    digitalWrite(led_b, HIGH);
    Serial.begin(9600);
    Serial.println(“Ulaaa SENSÖR Yaniyaa…”);
    digitalWrite(led_b, LOW);
    delay(preheat_time);
    digitalWrite(led_b, HIGH);
    delay(1);
    }

    void loop()
    {
    pinMode(buzzer_pin, LOW);
    int sensorValue = analogRead(sensor_pin);
    if (sensorValue >= threshold)
    alarm(90);
    else
    digitalWrite(led_g, LOW);
    Serial.println(sensorValue);
    delay(1);
    if (sensorValue >= trek)
    alarm(1000);
    }

    void alarm(unsigned int duration)
    {
    tone(buzzer_pin, 9000);
    digitalWrite(led_r, LOW);
    digitalWrite(led_g, HIGH);
    delay(duration);
    noTone(buzzer_pin);
    digitalWrite(led_r, HIGH);
    digitalWrite(led_g, HIGH);
    delay(duration);
    }

    BU KOD SORUN SUZ ÇALIŞMAK DA DIR,

  8. Sayın Buğra ve Sayın Oğulcan ne yazık ki paylaştığınız kodlarınızın serial.println satırlarında

    exit status 1
    stray ‘\342’ in program

    hatası vermekte.Bilginiz olsun.

  9. Çalışmanız programın 3.132 bayt (10 %) saklama alanını kullandı. Maksimum 30.720 bayt.
    Global değişkenler belleğin 229 byte kadarını (11%) kullanıyor. Yerel değişkenler için 1.819 byte yer kalıyor. En fazla 2.048 byte kullanılabilir.
    avrdude: ser_open(): can’t open device “\\.\COM3”: Semafor zaman aşımı süresi geçildi.

    Karta yüklenirken sorun oluştu. Tavsiyeler için http://www.arduino.cc/en/Guide/Troubleshooting#upload adresine göz atabilirsiniz.

    hatasını veriyor ne yapmam gerekiyor

    • Yanlış COM portu seçtiğinizden dolayı böyle bir hata almaktasınız. Bilgisayarınızda “Aygıt Yöneticisi”ni açarak “Bağlantı Noktaları” başlığı altındaki cihazlara bakarak doğru COM portunu görebilirsiniz. Kartınızın “USB-SERIAL CH340” veya “Arduino UNO” olarak görünmesi gereklidir.

  10. Bir kere en başta yayınlanan kodlar yanlış tanımlanmış, bazı akıllılar da kodları kafalarına göre düzenlemişler az kendiniz de uğraşın. Başlangıçta ledleri tanımladıktan sonra sönük kalması gereken yerde ilk yayınlanan kod dahil hatalı, değer HIGH verilmiş, akılları sıra hatayı düzeltenler de aynı hatayı copy-paste işlemiyle sunmuşlar bunun gibi hataları düzeltince sistem çalışacaktır sistemi başlangıç seviyesine göre yeniden kendimce şekillendirdim

    // donanımda hata yapmazsanız sistem sorunsuz çalışacaktır 🙂

    const int analogInPin = A0;
    const int led_r = 5;
    const int led_g = 6;
    const int led_b = 7;
    int buzzer_pin = 2;

    int veri = 0;
    void setup() {
    Serial.begin(9600);
    pinMode(led_r, OUTPUT);
    pinMode(led_g, OUTPUT);
    pinMode(led_b, OUTPUT);
    pinMode(buzzer_pin,OUTPUT);

    digitalWrite(buzzer_pin, LOW);

    digitalWrite(led_b, HIGH);
    delay(5000);
    digitalWrite(led_b, LOW);

    }
    void loop() {
    veri = analogRead(analogInPin);
    if (veri >= 300);
    { digitalWrite(led_g, LOW);
    digitalWrite(led_b, LOW);
    digitalWrite(led_r, HIGH);
    digitalWrite(buzzer_pin, HIGH);

    }
    else
    { digitalWrite(led_g, HIGH);
    digitalWrite(led_b, LOW);
    digitalWrite(led_r, LOW);
    digitalWrite(buzzer_pin, HIGH);
    }

    Serial.print(“Okunan Değer = ” );
    Serial.println(veri);
    delay(750);
    }

    • Kodda hata yok, dikkatli bakacak olursanız kullandığımız LED ortak anot yapıya sahip. Bu sebeple LED’leri yakmak için LOW vermemiz gerekiyor.

      • Evet ancak bir bütünlük söz konusu olmayacaktır yani dediğinizi yaptıgım zaman da mavi yesil kırmızı hepsi beraber parça parça yanıyor yakılmak istenen renk yanıyor ama tam verimle yanmamakta.

  11. Çalışmanız programın 3172 bayt (10 %) saklama alanını kullandı. Maksimum 30720 bayt.
    Global değişkenler belleğin 231 byte kadarını (11%) kullanıyor. Yerel değişkenler için 1817 byte yer kalıyor. En fazla 2048 byte kullanılabilir.
    Taslak yüklenirken bir hata oluştu
    BÖLE HATA VERİYOR YÜKLENİRKEN SADECE DERLEMDE SIKINTI YOK YÜKLERKEN SIKINTI OLUYOR SORUNU NEDİR ALLAH AŞKINA YARDIM

  12. merhabalar devreyi kurdum yeşil yanıyor sonra beyaza dönüyor çakmağı basılı tutuğumda birşey olmuyor buzzerda ötmüyor sorunu nedir acaba

  13. merhabalar devreyi kurdum yeşil yanıyor sonra beyaza dönüyor çakmağı basılı tutuğumda birşey olmuyor buzzerda ötmüyor sorunu nedir acaba lütfen ALLAH RIZASI İÇİN CEVAP

    • Arduino IDE’den Dosya -> Örnekler -> 01.Basics -> AnalogReadSerial örneğini yükleyip sensörün doğru çalışıp çalışmadığını kontrol edin. Eğer gaz algılandığında değer değişiyor ise sensörünüz ile ilgili bir sorun yoktur, LED ve buzzer modülleriniz ile ilgili bir sorun var demektir.

  14. Merhabalar gaz ölçümü sırasında aşırı ısınma ile karşılaşıyorum.mq-8 sensörü ile çalışıyorum acaba yardım edebilir misiniz?

  15. Merhaba. Buna benzer bir sistem yapıp seramdaki karbondioksit miktarını ölçmek istiyorum. Karbon diokait belirlediğim ppm miltarından yüksek ise fanları çalıştırıp serana temiz hava girişini sağlamak istiyorum. Acaba hangi sensörü önerirsiniz? Sanırım bu sensörü kullanamıyorum istediğim veriler için.

  16. Devreyi kuran arkadaşlar üstten bir fotoğraf atabilir misiniz ben kuramadım devreyi yanlış bağlıyorum sanırım. Devreyi videoya göre kurdum ama olmadı devre şemasınıda anlayamadım.

  17. merhaba
    Arduino ile hem gaz alarmı hemde android kontrollü ışık sensörü yaptım fakat ikisini aynı anda çalıştıramıyorum kodları nasıl aynı anda çalıştıracağım?

  18. Merhabalar, bu projeye rfid ekleyerek kartı okutunca alarmın kesilmesini sağlamaya çalışıyorum, bağlantılar ve kodlarda neler yapmam yapmam lazım yardımcı olursanız çok sevinirim

  19. Kerem Bey merhaba alttaki kodları yazarak lcd li MQ4 gas kontrol devresi yaptım bu konuda yeniyim 1. sorum I2C-driver li LCD kullanacağım library sini bulamadım
    2. sizin programdaki sensör ısınma katını sistemime eklemek istiyor ve ilk açılışta LCD ekranımda verilen 5sn. değerde ” sensör ısınıyor” yazısını görmek istiyorum..
    sonra tekrar lcd clear ile ana menüde ölçüm yapmayı nasıl yaparım bana aşağıdaki programa gereken satırları ekleyebilir misiniz ?
    alakanıza teşekkürler….

    #include
    int mq4 = A0; // GAS sensörü analog giriş pini
    int buz = 10; // Buzzer çıkış pini
    int led = 9; // Led çıkış pini
    int d; // dig. çıkış değeri sensör den 4.62V = POTENZ=AD/9.48
    float p; // sensör referans değeri 4.62 (ADC) (GERİLİM DÜŞÜMÜ)

    LiquidCrystal lcd (12, 11, 9, 8, 7, 6); // LCD bağlantıları
    lcd.clear(); // ekran temizle
    void setup(){
    pinMode(rel, OUTPUT);
    pinMode(buz, OUTPUT);
    pinMode(led, OUTPUT);
    digitalWrite(rel, LOW);
    digitalWrite(buz, LOW);
    digitalWrite(led, LOW);
    lcd.begin(16, 2); // 16 karakter 2 satır LCD
    }
    void loop(){
    lcd.clear(); // ekran temizle
    d = analogRead(mq4); // sensörü oku
    lcd.setCursor(0,0); // cursoru pozisyonla
    lcd.print(“CNG,LPG,METANGAZ”); // yazdır

    if (d = 20)
    {
    digitalWrite(buz, HIGH);
    delay (500);
    digitalWrite(buz, LOW);
    delay (500);
    digitalWrite(led, HIGH);
    delay (500);
    digitalWrite(led, LOW);
    delay (500);
    lcd.clear();
    lcd.setCursor(2,0);
    lcd.print(“GAZ SEViYESi”);
    lcd.setCursor(3,1);
    lcd.print(“TEHLiKELi !”);
    }
    else
    {
    digitalWrite(rel, HIGH);
    digitalWrite(buz, LOW);
    digitalWrite(led, LOW);
    }
    delay(1000);
    lcd.clear();
    }

  20. Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: “Arduino/Genuino Uno”

    ^

    sketch_sep06a:1:1: error: ‘Arduino’ does not name a type

    Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: “Arduino/Genuino Uno”

    ^

    exit status 1
    too many decimal points in number
    bU HATAYI VERİYOR

  21. Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: “Arduino/Genuino Uno”

    Sketch uses 992 bytes (3%) of program storage space. Maximum is 32256 bytes.
    Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
    Serial port not selected.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

  22. beyler bayanlar buzzerın sürekli ötmesine çözüm buldum sadece sensöre gaz tuttuğunuzda kırmızı ledle beraber ötüyor sonra kesiliyor
    #define sensor_pin A0
    #define buzzer_pin 9
    #define led_r 5
    #define led_g 6
    #define led_b 7
    #define preheat_time 5000
    #define threshold 300

    void setup()
    {
    // put your setup code here, to run once:
    pinMode (buzzer_pin, OUTPUT);
    pinMode (led_r, OUTPUT);
    pinMode (led_g, OUTPUT);
    pinMode (led_b, OUTPUT);

    digitalWrite (buzzer_pin, HIGH);
    digitalWrite (led_r, LOW);
    digitalWrite (led_g, LOW);
    digitalWrite (led_b, LOW);
    Serial.begin(9600);
    Serial.print(“sensor isitiliyor…”);
    digitalWrite (led_b, HIGH);
    delay(preheat_time);
    digitalWrite (led_b, LOW);
    delay (1000);

    }

    void loop() {
    // put your main code here, to run repeatedly:
    int sensorValue = analogRead(sensor_pin);
    if (sensorValue >= threshold)
    alarm(100);

    else
    digitalWrite(led_g, HIGH);
    digitalWrite(buzzer_pin, HIGH);
    Serial.print(sensorValue);
    delay(1);

    }

    void alarm(unsigned int duration)
    {

    digitalWrite (led_r, HIGH);
    digitalWrite (buzzer_pin, LOW);
    digitalWrite (led_g, LOW);
    delay(duration);

    digitalWrite(led_r, LOW);
    digitalWrite(buzzer_pin, HIGH);
    digitalWrite(led_g, LOW);
    delay(duration);

    }

  23. Arduino:1.8.13 (Windows 10), Kart:”Arduino Uno”

    Çalışmanız programın 3166 bayt (9 %) saklama alanını kullandı. Maksimum 32256 bayt.

    Global değişkenler belleğin 227 byte kadarını (11%) kullanıyor. Yerel değişkenler için 1821 byte yer kalıyor. En fazla 2048 byte kullanılabilir.

    Taslak yüklenirken bir hata oluştu

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    bana bu hata veriyor ne yapmam gerekiyor yardım eder misiniz kerem bey lutfen

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz