Oleh Muhammad Ilyasaa dalam Tutorial Arduino
Tahap Kesukaran : Pertengahan, Mempunyai Asas Arduino

Belum mempunyai asas arduino? Jika Ya, lakukan tutorial yang lebih mudah dahulu

>> Arduino Bagaimana Untuk Menggunakan Sensor Gas Jenis MQ

>> Arduino Bagaimana Untuk Menggunakan Modul GSM SIM900A

>> Kebocoran Gas Boleh Berlaku Di mana mana sahaja <<

Antara kemalangan yang selalu kita dengar dan dekat dengan kita adalah kebocoran gas di dapur rumah dan kebocoran gas di dalam kenderaan. Apabila berlaku kebocoran gas di dapur rumah lalu menyebabkan dapur rumah mula dipenuhi dengan gas yang berbahaya, sedikit percikan api sahaja seperti penghidup api rokok yang dinyalakan boleh menyebabkan satu dapur rumah terbakar.

Blog ini akan menerangkan bagaimana Sistem Pengesan Kebocoran Gas Arduino dapat dibangunkan. Sistem ini membantu pengguna untuk memantau kebocoran gas dengan lebih berkesan melalui sistem pesanan ringkas SMS. Dengan sistem pengesan kebocoran gas ini, pengguna mempunyai keupayaan untuk memantau status tahap gas di sesuatu tempat. Pembunyi isyarat juga akan berbunyi untuk memberikan amaran apabila gas melebihi tahap yang ditetapkan. Dengan ini, langkah awal dapat diambil dengan membuka pintu untuk membolehkan gas yang bocor dihalakan ke tempat lain.

>> Sensor GAS dari keluarga jenis MQ <<

Siri MQ sensor gas berfungsi menggunakan pemanas kecil di dalamnya bersama sama sensor elektro-kimia. Sensor ini sensitif untuk pelbagai jenis gas bergantung pada jenis siri MQ serta sesuai digunakan indoor pada suhu bilik. Output sensor gas jenis MQ ini adalah isyarat analog dan boleh dibaca dengan input analog Arduino. Walaubagaimanapun, kebanyakan modul sensor gas di pasaran sudah ditambah baik untuk mempunyai pin digital yang boleh dilaras menggunakan perintang boleh laras yang ada di atas modul sensor gas ini. Kita tidak akan menyentuh tentang pin digital pada modul sensor gas di dalam tutorial ini tetapi kita akan menggunakan pin analog yang terdapat pada sensor gas.

>> Kenali sensor sensor gas dan jenis jenis gas <<

Sensor gas jenis MQ-2 merupakan sensor yang sensitif pada gas methane, butane, LPG (Liquefied Petroleum Gas), dan asap.

Sensor gas jenis MQ-5 merupakan sensor yang sensitif pada gas asli dan LPG (Liquefied Petroleum Gas).

Sensor gas jenis MQ-6 merupakan sensor yang sensitif pada LPG (Liquefied Petroleum Gas) dan gas butane.

Sensor gas jenis MQ-9 merupakan sensor yang sensitif pada gas carbon monoxide dan gas mudah terbakar.

Antara contoh penggunaanya sensor gas jenis MQ-2, MQ-5, MQ-6 dan MQ-9 adalah sensor ini sesuai untuk dijadikan peranti pengesan gas yang boleh menyebabkan kebakaran atau peranti pengesan gas yang mudah terbakar.

Sensor gas jenis MQ-3 merupakan sensor yang sensitif pada alcohol, ethanol dan asap. Antara contoh penggunaanya adalah sensor ini sesuai dijadikan peranti untuk mengukur kepekatan alkohol dalam nafas seseorang.

Sensor gas jenis MQ-4 merupakan sensor yang sensitif pada gas methane dan CNG (Compressed Natural Gas). Antara keburukan gas methane dalam kuantiti yang tinggi adalah ianya mampu memerangkap haba lebih kuat berbanding gas Carbon Dioxide yang menyumbang kepada fenomena Rumah Hijau dan juga perubahan iklim.

Sensor gas jenis MQ-7 merupakan sensor yang sensitif pada gas carbon dioxide. Antara keburukan gas carbon dioxide dalam kuantiti yang tinggi adalah ianya mampu memerangkap haba yang menyumbang kepada fenomena Rumah Hijau dan juga perubahan iklim.

Sensor gas jenis MQ-8 merupakan sensor yang sensitif pada gas hidrogen. Antara keburukan gas hidrogen ini adalah kepekatan tinggi gas hidrogen dalam persekitaran menandakan kurangnya gas oksigen. Individu yang bernafas dalam suasana sebegini boleh mengalami gejala sakit kepala, berdering di telinga, pening, mengantuk, tidak sedarkan diri, mual, dan muntah.

Sensor gas jenis MQ-135 merupakan sensor yang sensitif pada gas benzene, alkohol, dan asap. Antara contoh penggunaanya adalah untuk membangunkan peranti untuk memantau kualiti udara.

>> JADUAL SENSOR DAN GAS <<

Nama Sensor

Sensitif Kepada Gas

MQ-2

Methane, Butane, LPG, Asap

MQ-3

Alkohol, Ethanol, Asap

MQ-4

Methane, Gas CNG

MQ-5

Gas Asli, LPG

MQ-6

LPG, Butane

MQ-7

Carbon Monoxide

MQ-8

Gas Hidrogen

MQ-9

Carbon Monoxide, Gas mudah terbakar

MQ135

Gas yang berkaitan dengan pengawalan kualiti udara

>> Komponen Apa yang anda perlukan <<

Untuk tutorial ini, anda perlukan :

atau

>> menghubungkan sensor gas terus kepada pengguna <<

Litar 2 Sensor Gas Beserta Modul GSM

Pada tutorial kali ini, kita akan menggunakan hanya dua jenis sensor gas bagi memudahkan tutorial dan untuk memudahkan pemahaman pembaca. Sensor gas yang akan kita gunakan adalah MQ3 (Alcohol, ethanol dan asap) dan MQ9 (Carbon monoxide dan gas mudah terbakar). Bacaan Sensor gas akan dipaparkan pada paparan LCD 16×2. Bagi mendapatkan bacaan pada telefon bimbit, pengguna perlu menghantar mesej kepada nombor kad SIM yang terdapat pada modul GSM. Siapkan litar di atas dan kita akan muat naik kod Arduino Sensor gas Beserta Modul GSM ke papan Arduino Uno.

>> Sedikit Penerangan tentang kod arduino SENSOR GAS BESERTA Modul GSM <<

  // Prepare buzzer
  pinMode(BUZZER, OUTPUT);
  digitalWrite(BUZZER, LOW);

Kod diatas bertindak untuk mematikan pembunyi isyarat semasa sistem dihidupkan.

  // Prepare LCD
  lcd.begin(16, 2);

Kod diatas bertindak untuk menetapkan paparan LCD kepada mod 16 lajur dan 2 baris.

  // Prepare GSM
  gsmSerial.begin(19200);  //Connect to SIM900  

Kod di atas bertindak untuk membolehkan komunikasi diantara modul GSM dan papan Arduino Uno berlaku. Kadar kelajuan komunikasi siri diantara papan Arduino Uno dan modul GSM ditetapkan pada 19200 bit sesaat.

  powerOn();

Kod di atas bertindak untuk memeriksa samaada modul GSM berada dalam keadaan aktif atau tidak. Jika GSM tidak aktif, paparan LCD akan memaparkan mesej “GSM Tak Dapat Dihidupkan….”.

  while (gsmSerial.available())
  {
    char c = gsmSerial.read();
    temp.concat(c);
    delay(10);
  }      

    .
    .
    .
    .

    sendTextMessage();
    Serial.println("*** SENT SMS ***");
  }

Kod di atas bertindak untuk memeriksa samaada pengguna menghantar mesej atau tidak. Jika pengguna menghantar mesej, kod arduino di atas akan mengekstrak nombor telefon dari mesej khidmat pesanan ringkas pengguna. Nombor yang telah diekstrak tersebut akan digunakan bagi menhantar mesej yang mengandungi status bacaan sensor gas kepada pengguna.

  // Read Gas Sensor
  MQ3value = analogRead(MQ3);
  MQ9value = analogRead(MQ9);

Kod di atas bertindak untuk membaca nilai bacaan sensor gas. Nilai bacaan sensor adalah diantara paras 0 sehingga paras 1023.

  // Alarm the buzzer
  if( MQ3value > 200 || MQ9value > 200) digitalWrite(BUZZER, HIGH);
  else digitalWrite(BUZZER, LOW);

Kod di atas bertindak untuk membunyikan pembunyi isyarat jika bacaan sensor gas melebihi paras 200 dan mematikan pembunyi isyarat jika bacaan sensor gas kurang daripada paras 200.

>> Kod penuh sensor gas beserta modul gsm <<

/* Programmer : Muhammad Ilyasaa Bin Abdul Rahman
 * More info at https://www.nadieleczone.com.my
 */

// Library
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
#include <String.h>

// LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// GSM
SoftwareSerial gsmSerial(2, 3); // RX, TX
char phoneNumber[100];
int stopper1 = 0;
int stopper2 = 0;

// BUZZER
int BUZZER = 13;

// Gas Sensor
int MQ3 = A1;
int MQ9 = A5;
int MQ3value = 0;
int MQ9value = 0;

void setup()
{
  // Prepare buzzer
  pinMode(BUZZER, OUTPUT);
  digitalWrite(BUZZER, LOW);

  // Prepare LCD
  lcd.begin(16, 2);
  lcd.setCursor(0,0); lcd.print("                ");
  lcd.setCursor(0,0); lcd.print("Sistem sedang");  
  lcd.setCursor(0,1); lcd.print("                ");
  lcd.setCursor(0,1); lcd.print("dihidupkan....");          

  // Prepare GSM
  gsmSerial.begin(19200);  //Connect to SIM900  
  Serial.begin(9600);    //Connect to computer 
  delay(20000); //20s
  powerOn();
}
 
void loop()
{
  // GSM Read and Sent SMS
  String temp;
  stopper1 = 0;
  stopper2 = 0;

  while (gsmSerial.available())
  {
    char c = gsmSerial.read();
    temp.concat(c);
    delay(10);
  }      

  if (temp.startsWith("\r\n+CMT: "))
  {
    Serial.println("*** RECEIVED SMS ***");
    memset(phoneNumber, '\0', 100);     
    int len = temp.length();
    for(int counter = 0; counter < len; counter++)
    {
      phoneNumber[counter] = temp[counter];
      if( (temp[counter] == '"') && (stopper1 > 0) )
      {
        stopper2 = counter;
        Serial.print("Stopper2 = ");
        Serial.println(stopper2);
        break;
      }          
      if( (temp[counter] == '"') && (stopper1 == 0) ) 
      {
        stopper1 = counter+1;
        Serial.print("Stopper1 = ");
        Serial.println(stopper1);
      }
    } 
        
    for(int counter = stopper1; counter < stopper2; counter++)
    {
      Serial.print(phoneNumber[counter]);
    } 
    Serial.println();
             
    Serial.println("*** END SMS ***");

    sendTextMessage();
    Serial.println("*** SENT SMS ***");
  }

  // Read Gas Sensor
  MQ3value = analogRead(MQ3);
  Serial.print("MQ3, Alcohol, ethanol dan asap = "); Serial.print(MQ3value); Serial.print("\t");
  MQ9value = analogRead(MQ9);
  Serial.print("MQ9, Carbon monoxide dan gas mudah terbakar = "); Serial.println(MQ9value);

  lcd.setCursor(0,0); lcd.print("                ");
  lcd.setCursor(0,0); lcd.print("MQ3 = "); lcd.print(MQ3value);  
  lcd.setCursor(0,1); lcd.print("                ");
  lcd.setCursor(0,1); lcd.print("MQ9 = "); lcd.print(MQ9value);        

  // Alarm the buzzer
  if( MQ3value > 200 || MQ9value > 200) digitalWrite(BUZZER, HIGH);
  else digitalWrite(BUZZER, LOW);
}

void powerOn()  // To check whether GSM is ON or OFF
{
  int answer=0;
    
  while(1)
  {    
    answer = sendATcommand("AT", "OK", 2000);
    Serial.println();
    if (answer == 0)
    {
      lcd.setCursor(0,0); lcd.print("                ");
      lcd.setCursor(0,0); lcd.print("GSM Tak Dapat");  
      lcd.setCursor(0,1); lcd.print("                ");
      lcd.setCursor(0,1); lcd.print("dihidupkan....");           
    }
    else  break;
  }

  gsmSerial.println("AT+CNMI=2,2,0,0,0");
  delay(2000);

  Serial.println("Succesful ON");
  lcd.setCursor(0,0); lcd.print("                ");
  lcd.setCursor(0,0); lcd.print("GSM Berjaya");  
  lcd.setCursor(0,1); lcd.print("                ");
  lcd.setCursor(0,1); lcd.print("dihidupkan....");        
}

void sendTextMessage() // Send SMS to user
{
  gsmSerial.print("AT+CMGF=1\r");    //Because we want to send the SMS in text mode
  delay(500);
  gsmSerial.print("AT+CMGS=\"");
  for(int counter = stopper1; counter < stopper2; counter++)
  {
    gsmSerial.print(phoneNumber[counter]);
  }   
  gsmSerial.println("\"\r");
  delay(500);
  gsmSerial.print("MQ3 Alcohol, ethanol dan asap = "); gsmSerial.print(MQ3value);
  gsmSerial.print(", MQ9 Carbon monoxide dan gas mudah terbakar = "); gsmSerial.println(MQ9value);
  delay(500);
  gsmSerial.println((char)26);//the ASCII code of the ctrl+z is 26
  delay(500);
}

int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout) // Send command to gsm
{
  int x=0,  answer=0;
  char response[100];
  unsigned long previous;
  memset(response, '\0', 100);
  delay(500);              
    
  while( gsmSerial.available() > 0) gsmSerial.read();    // Clean the input buffer
  gsmSerial.println(ATcommand);
  Serial.println(ATcommand); 
    
  x = 0;
  previous = millis();
  do  // this loop waits for the answer
  {
    // if there are data in the UART input buffer, reads it and checks for the asnwer
    if(gsmSerial.available() != 0)
    {    
      response[x] = gsmSerial.read();
      Serial.write(response[x]); 
      x++;
      // check if the desired answer is in the response of the module
      if (strstr(response, expected_answer) != NULL)    
      {
        answer = 1;
        Serial.println(); 
        for( int count = 0; count < x ; count++)
        {
          Serial.write(response[count]); 
        }
      }
    }
  // Waits for the asnwer with time out
  }while((answer == 0) && ((millis() - previous) < timeout));    
  return answer;
}

Muat naik kod penuh sensor gas beserta modul gsm di atas ke dalam papan Arduino Uno. Selepas berjaya memuat naik, putuskan sambungan papan Arduino Uno dengan komputer dan hubungkan kabel USB papan Arduino Uno kepada Bekalan kuasa luar 5V. Hal ini kerana sensor gas memerlukan bekalan kuasa yang tinggi. USB port yang terdapat pada komputer atau laptop hanya mampu membekalkan bekalan kuasa yang rendah jika dibandingkan dengan bekalan kuasa luar yang mampu membekalkan arus setinggi 2 Ampere.

Nota : Bekalan kuasa luar 5V yang digunakan mempunyai USB port yang boleh terus dihubungkan kepada USB port papan Arduino Uno. Kami jarang menggunakan bekalan kuasa luar 9V atau 12V kerana Voltage Regulator di atas papan Arduino Uno akan menjadi panas apabila dihidupkan dalam jangka masa yang lama. Bagi mengelakkan hal ini berlaku, kami gemar menggunakan bekalan kuasa luar 5V yang langsung tidak menggunakan laluan Voltage Regulator di atas papan Arduino Uno dan secara terus mengelakkan Voltage Regulator tersebut menjadi panas.

>> JOM KITA LIHAT sensor gas dan modul gsm beraksi <<

Selepas anda menghidupkan bekalan kuasa luar 5V, paparan LCD akan memaparkan “Sistem sedang dihidupkan….” selama lebih kurang 20 saat. Jangka masa 20 saat ini bagi membolehkan modul GSM membuat hubungan dengan menara kawalan komunikasi GSM.

Situasi 1 : Selepas jangka masa 20 saat, papan Arduino Uno akan cuba membuat komunikasi dengan modul GSM. Papan Arduino Uno akan menghantar arahan AT kepada modul GSM dan mengharapakan balasan OK daripada modul GSM. Jika papan Arduino Uno tidak mendapat jawapan balas daripada modul GSM, paparan LCD akan memaparkan “GSM Tak Dapat dihidupkan….”.

Situasi 2 : Selepas jangka masa 20 saat, papan Arduino Uno akan cuba membuat komunikasi dengan modul GSM. Papan Arduino Uno akan menghantar arahan AT kepada modul GSM dan mengharapakan balasan OK daripada modul GSM. Jika papan Arduino Uno mendapat jawapan balas daripada modul GSM, kod Arduino akan diteruskan dengan membaca nilai sensor gas. Paparan LCD akan menunjukkan nilai bacaan sensor gas diantara paras 0 sehingga paras 1023.

Pengguna boleh memantau status bacaan sensor gas dengan menghantar apa apa mesej kepada nombor kad SIM yang berada dalam modul GSM. Modul GSM akan menerima mesej tersebut lalu papan Arduino Uno akan memproses mesej tersebut dan seterusnya menghantar bacaan sensor gas kepada penghantar mesej.

Teruskan ke tahap yang lebih mencabar >> Sistem Pengesan Kebocoran Gas Arduino Menghantar SMS Amaran

TINGGALKAN JAWAPAN BALAS ANDA

Sila masukkan ulasan anda!
Sila masukkan nama anda di sini