24 April 2017

Tutorial 14 - Arduino & Gas Sensor



Apa khabar kepada semua pembaca - pembaca setia blog saya? Mudah - mudahan dirahmati Allah sentiasa lah ye.. Rasanya dah hampir 3 bulan saya tidak update apa - apa dalam blog ini. Maaf sekiranya ada yang ternanti - nanti berkaitan tutorial terbaru dalam blog ini. Saya menghadapi kesibukan yang amat luar biasa berikutan tempahan projek dari pelajar diploma politeknik yang telah pun selamat membuat pembentangan akhir projek mereka pada bulan 3 lepas. Alhamdulillah, kini saya ada sedikit kelapangan untuk berkongsi dengan anda semua tutorial terbaru saya iaitu Gas Sensor.

Gas sensor adalah satu instrumen yang digunakan untuk mengesan kehadiran sesuatu jenis gas yang wujud dalam persekitaran. Saya sering ditanya oleh pelajar, bolehkah saya mengukur jumlah gas mengunakan gas sensor? Jawapannya adalah TIDAK SAMA SEKALI. Ini kerana, gas sensor digunakan hanya untuk mengesan kewujudan gas, bukannya mengukur ketumpatan / jumlah gas. Ada beza tu ye..

Terdapat pelbagai jenis gas sensor yang ada dipasaran. Kepelbagaian ini adalah disebabkan wujudnya banyak jenis gas yang ada di persekitan kita. Semua gas sensor mempunyai kod produk yang tersendiri. Kod produk gas sensor adalah MQ-X. Abjad "X" adalah merujuk kepada jenis gas yang ingin dikesan. Di sini, saya akan membuat senarai ringkas berkaitan jenis - jenis gas sensor yang ada dipasaran:

  • MQ-2  :  General combustible gas
  • MQ-3  :  Gas alkohol
  • MQ-4  :  Gas metana dan CNG ( compressed natural gas )
  • MQ-5  :  LPG ( gas memasak) & gas natural
  • MQ-6  :  LPG ( gas memasak), gas butana & gas propana
  • MQ-7  :  Gas karbon monoksida
  • MQ-8  :  Gas hidrogen
Gas sensor module

Cadangan Projek:

Saya ingin membuat satu alat / device yang mengesan kebocoran gas memasak (LPG) di dapur. Apabila terdapatnya kebocoran gas, kipas ekzos yang terdapat di dapur akan berfungsi secara automatik ( bertujuan untuk menyedut gas LPG ini keluar dari rumah ) sehinggalah tiada lagi gas LPG dikesan.

Komponen / Peralatan

  1. Arduino UNO
  2. MQ-5 gas sensor module
  3. 5V Relay
  4. Kipas Ekzos
Cara Sambungan

Jika diperhatikan, gas sensor module ini boleh digunakan dalam 2 cara, iaitu secara digital atau analog. Oleh sebab itu, sensor ini didatangkan dengan 4 pin yang perlu disambung kepada Arduino. Dari 4 pin ini, kita hanya perlu sambung 3 sahaja bergantung pada kaedah yang ingin kita gunakan, sama ada digital atau analog. Rujuk rajah dibawah.

Bagi projek ini, saya ingin menggunakan kaedah digital sahaja. Tidak menjadi satu kesalahan jika anda ingin menggunakan pengesanan kaedah analog. Tak berdosa pun!

Jadi, sambungannya adalah seperti ini:

  • Vcc ( module ) ---- 5V ( Arduino )
  • GND ( module ) ---- GND ( Arduino )
  • DOUT ( module ) ---- Pin 2 ( Arduino )
Sambungan relay module pula adalah seperti di bawah
  • IN ( relay ) ---- Pin 8 ( Arduino )
  • GND ( module ) ---- GND ( Arduino )
  • Vcc ( module ) ---- 5V ( Arduino )



    Sambungan relay module sebagai suis bagi kipas ekzos
    Aturcara:



    1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    const int Gas_Sensor = 2;
    const int fan_relay =  8;
    int Gas_state = 0;
    
    void setup()
    {
      pinMode(fan_relay, OUTPUT);
      pinMode(Gas_Sensor, INPUT);
    }
    
    void loop() 
    {
      Gas_state = digitalRead(Gas_Sensor);
    
      if (Gas_state == HIGH) 
      {
        digitalWrite(fan_relay, HIGH);
      }
      else 
      {
        digitalWrite(fan_relay, LOW);
      }
    }
    

    SELAMAT MENCUBA!!

    09 January 2017

    Tutorial 13 - Arduino dan Paparan LCD Menggunakan I2C



    Hai kawan - kawan.. Sihat ke tu? Kalau sihat, baguslah.. Kalau tak sihat, jangan lupa makan ubat yer.. Rasanya masih belum terlewat untuk saya ucapkan Selamat Tahun Baru 2017. Semoga tahun 2017 ini menjadi turning point untuk saya dan rakan - rakan pembaca setia blog ini berusaha lebih keras lagi.

    Untuk tutorial kali ini, saya ingin berkongsi dengan anda semua cara mudah menggunakan LCD. Saya pernah berkongsi cara menggunakan LCD pada Tutorial 2 sebelum ini. Kaedah itu adalah salah satu dari DUA cara yang boleh diaplikasikan untuk menggunakan LCD. Cara ke-2 adalah menggunakan Serial Interface Adapter Module atau lebih popular dipanggil I2C ( sebut I to see ). Jika ditanya pada saya kaedah mana yang lebih digemari, saya akan pilih guna I2C ini. Saya akan senaraikan kebaikan dan keburukan ( pada pandangan saya ) menggunakan I2C ini.

    Kebaikan:
    1. Mengurangkan penggunaan pin pada Arduino ( dari 6 pin kepada 2 pin sahaja)
    2. Mengurangkan risiko kesalahan penyambungan antara Arduino dgn LCD
    3. Tidak perlu menggunakan variable resistor (VR) kerana sudah ada VR dalam module I2C
    Keburukan:
    1. Kena beli I2C module yang harganya RM12.
    I2C mempunyai 4 pin yang perlu disambungkan secara terus kepada Arduino anda. 4 pin tersebut ialah:
    1. Vcc / 5V
    2. GND
    3. SCL
    4. SDA
    Jika papan Arduino anda tiada pin SCL dan SDA (model lama), anda masih boleh menggunakan I2C ini dengan cara sambungan seperti berikut:
    1. SCL ( I2C ) ke pin A5 ( Arduino )
    2. SDA ( I2C ) ke pin A4 ( Arduino )
    I2C Module

    Contoh Sambungan I2C dan Arduino



    Projek: Memaparkan ayat "Selamat Datang" & "Welcome" pada LCD menggunakan I2C

    Untuk menggunakan I2C ini, untuk penulisan coding nanti, kita perlu menambah library LiquidCrystal_I2C pada folder libraries Arduino kita. Mana nak dapat library itu? Seperti biasa, saya yang baik hati ini akan memudahkan kerja anda. Anda boleh muat turun library itu di bawah

    LiquidCrystal_I2C

    Aturcara:

    Selepas anda membuat sambungan seperti gambar di atas dan memuat turun library I2C, anda bolehlah memulakan penulisan coding anda. Saya akan tunjukkan coding ringkas menggunakan I2C dan anda semua bolehlah jadikan ini sebagai rujukan,



    1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
    
    void setup()
    {
      lcd.begin(16,2);
      lcd.backlight();
    }
    
    void loop()
    {
      lcd.setCursor(4,0);
      lcd.print("Welcome!");
      delay (2000);
    
      lcd.setCursor(1,1);
      lcd.print("Selamat Datang");
      delay (2000);
    
      lcd.clear();
      delay (1000);
    }
    

    Perhatikan pada baris yang ke-2, terdapat nombor 0x27. Ini menunjukkan alamat I2C yang digunakan. Jika anda perhatikan tiada apa - apa paparan pada LCD selepas anda upload coding ini, terdapat 2 faktor yang menyebabkan masalah ini.
    1. VR tidak dilaraskan. Anda perlu laraskan VR (warna biru) yang terdapat pada module I2C sehinggalah tulisan timbul
    2. 0x27 bukanlah alamat I2C yang digunakan. Cuba tukar 0x27 kepada 0x3F.
    SELAMAT MENCUBA...!

    08 December 2016

    Tutorial 12 - Arduino & Bluetooth



    Dah lama rasanya saya tak menulis dalam blog ni. Bukan sombong atau apa - apa yang sewaktu dengannya. Ini semua disebabkan tempahan projek dari pelajar Kolej Vokasional (KV) dan politeknik yang tak putus - putus. Sampai tak tido malam saya dibuatnya. Apa - apa pun, jutaan terima kasih saya ucapkan pada semua pelanggan kerana memberi kepercayaan kepada syarikat kecil kami, NAA Electronics untuk menyiapkan projek akhir anda. Diharap anda semua berpuas hati dengan servis yang telah kami beri.

    TERIMA KASIH PELANGGAN!!
    Ok. Back to business. Untuk tutorial kali ini, saya akan menunjukkan kaedah dan juga cara yang mudah untuk mengawal output (ON & OFF) menggunakan teknologi tanpa wayar, Bluetooth.

    Apa itu Bluetooth?

    Bluetooth adalah teknologi memindahkan data (fail, suara, nombor dll) dari satu device ke satu device yang lain tanpa menggunakan wayar (wireless). Bluetooth ini sesuai digunakan untuk perhubungan jarak dekat ( kurang 10 meter ) dan yang paling penting, sistem keselamatan untuk perhubungan jenis bluetooth adalah secured kerana memerlukan persetujuan antara 2 pihak untuk memulakan proses pemindahan data ( pairing concept )

    HC-06 Bluetooth Module 

    HC-06 Bluetooth Module
    Module ini mempunyai 4 pin yang mana keempat - empat ini akan disambungkan secara terus pada Arduino anda. Saya akan tunjukkan cara untuk sambungan ini nanti. Oh ya, untuk pengetahuan anda semua, harga module ini dalam lingkungan RM30 - RM40 per unit. So, hati - hati ya.. Jangan sampai kena game..

    Contoh Projek

    Untuk tutorial kali ini, saya akan mengawal 3 biji LED dengan menggunakan apps yang saya muat turun dari Google Playstore. 3 LED ini akan dikawal digital (ON/OFF) secara berasingan dan juga secara serentak. Bagi memastikan agar anda semua dapat follow contoh ini dengan mudah, disarankan agar anda memuat turun apps yang sama seperti yang saya guna. Jadi, muat turun la apps di sini.

    Komponen - komponen yang digunakan

    1. Arduino
    2. Kabel USB
    3. HC-06 Bluetooth Module
    4. 3 x LED
    5. 3 x Perintang 220 Ohm
    6. Breadboard
    7. Jumper wire secukupnya
    Baiklah. Bagi memudahkan anda, saya akan pecahkan projek ini pada 2 bahagian. Bahagian pertama adalah untuk membaca data yang dihantar oleh apps kepada Arduino kita. Jom!

    Bahagian 1: Membaca Data Apps Menggunakan "Serial Monitor"

    Sambungan:

    Arduino               HC-06

      VCC   --------        5V
      GND  --------       GND
       10      --------        TX
       11      --------        RX

    Sambungan Arduino dengan HC-06

    Aturcara:


    #include <SoftwareSerial.h>
    #include <Wire.h>
    SoftwareSerial BT(10, 11);
    char a; 
    
    void setup() 
    {
      BT.begin(9600);
      Serial.begin(9600);
    }
    
    void loop() 
    {
      if (BT.available())
         {
           a = (BT.read());
                 Serial.println(a);
         }
    }
    

    Selepas anda memuat naik coding di atas ke Arduino anda, sila ikuti langkah - langkah berikut:

    1. Buka Setting pada telefon pintar anda, dan ON kan Bluetooth
    2. Scan nearby bluetooth signal
    3. Sekiranya ada device bernama HC-06, pilih device itu untuk pairing
    4. Password untuk pairing adalah "1234"
    5. Pastikan pada bawah perkataan HC-06, ada tertulis dengan tulisan kecil, "Paired" yang membuktikan connection was establish. 


    Sekarang kita tumpu pada Apps pula. Sila ikuti langkah - langkah seperti dibawah:
    1. Pastikan apps anda sama seperti dibawah. Sekiranya sama, tekan butang "Connect" untuk memulakan komunikasi antara apps dengan module
    2. Pilih device yang bernama HC-06
    3. Sekiranya proses pairing berjaya, anda dapat perhatikan yang lampu biru pada module HC-06 akan berhenti berkelip dan berada dalam keadaan statik. Tahniah!
    4. Sekarang, buka Serial Monitor pada software Arduino dan setkan 'No line ending' dan baudrate = 9600
    5. Bila dah buat tetapan seperti di atas, sila tekan keypad pada apps anda. Mulai tekan keypad pada Device 1, kemudian OFF semula dan teruskan dengan Device 2, OFF semula dan seterusnya.
    6. Perhatikan pada Serial Monitor anda. Ada keluar apa - apa tak?
    7. Kalau ada, tahniah sekali lagi.
    8. Kalau tak keluar apa - apa, takziah. Sila check balik. Haha.
    Saya buat kesimpulan apa yang akan anda dapat pada Serial Monitor.

    Device 1: ON = A, OFF = a
    Device 2: ON = B, OFF = b
    Device 3: ON = C, OFF = c
    Device 4: ON = D, OFF = d
    Device 5: ON = E, OFF = e

    Betul tak? Hehe.. Power kan saya.. Sekarang, catat apa yang anda dapat dari Serial Monitor kerana data ini adalah bahagian terpenting dalam coding kita nanti.

    Tekan butang Connect

    Pilih device HC-06


    Buka Serial Monitor pada Arduino IDE



    Buat tetapan "No line ending" dan "9600"

    Data yang terhasil apabila keypad pada apps ditekan
    So, bahagian 1 dah tamat.

    Sekarang kita bergerak ke bahagian ke-2 iaitu menambah LED dan membuat aturcara penuh.

    Bahagian 2: Mengawal LED Menggunakan HC-06

    Rujuk gambarajah dibawah untuk sambungan penuh.
    Sambungan penuh litar
    Apa yang nak saya pada LED saya adalah seperti berikut:

    Device 1 akan mengawal LED 1
    Device 2 akan mengawal LED 2
    Device 3 akan mengawal LED 3
    Device 4 akan mengawal LED 1, 2 & 3 (serentak)

    Aturcara:

    #include <SoftwareSerial.h>
    #include <Wire.h>
    SoftwareSerial BT(10, 11);
    char a;
    int LED1 = 4;
    int LED2 = 5;
    int LED3 = 6;
    
    void setup() 
    {
      BT.begin(9600);
      Serial.begin(9600);
      pinMode (LED1, OUTPUT);
      pinMode (LED2, OUTPUT);
      pinMode (LED3, OUTPUT);
    }
    
    void loop() 
    {
      if (BT.available())
         {
           
           a = (BT.read());
                Serial.println(a);
    
           if ( a == 'A' )
           {
            digitalWrite (LED1, HIGH);
           }
    
           if ( a == 'a' )
           {
            digitalWrite (LED1, LOW);
           }
    
           if ( a == 'B' )
           {
            digitalWrite (LED2, HIGH);
           }
           
           if ( a == 'b' )
           {
            digitalWrite (LED2, LOW);
           }
           
           if ( a == 'C' )
           {
            digitalWrite (LED3, HIGH);
           }
           
           if ( a == 'c' )
           {
            digitalWrite (LED3, LOW);
           }
    
           if ( a == 'D' )
           {
            digitalWrite (LED1, HIGH);
            digitalWrite (LED2, HIGH);
            digitalWrite (LED3, HIGH);
           }
           
           if ( a == 'd' )
           {
            digitalWrite (LED1, LOW);
            digitalWrite (LED2, LOW);
            digitalWrite (LED3, LOW);
           }
         }
    }
    

    SELAMAT MENCUBA...!

    10 November 2016

    Tutorial 11 - Penggunaan "Delay" Yang Betul


    Hai!! Apa khabar semua! Diharap anda semua mendapat perlindungan dari Allah s.w.t hendaknya. Ok, baiklah! Untuk tutorial kali ini, saya ingin berkongsi sedikit ilmu berkaitan dengan penggunaan "delay". Dalam Arduino, penggunaan delay haruslah sesuai mengikut projek yang anda ingin hasilkan.

    APA ITU DELAY?

    Delay adalah sejenis arahan yang apabila dilaksanakan, ia akan menyebabkan semua aktiviti terhenti seketika ( ikut masa yang telah disetkan ). Ya. Semua benda akan terhenti! Jika anda ingin membuat LED menyala selama 5 saat, pasti anda akan tulis code seperti dibawah:

    1
    2
    3
    4
    5
    void loop() {
      digitalWrite ( LED, HIGH );
      delay ( 5000 );
      digitalWrite ( LED, LOW );
    }
    

    Jika diperhatikan pada code diatas, saya telah meletakkan delay selama 5 saat (5,000ms) supaya LED tersebut terus menyala. Dalam kata lain, aturcara ini akan pause aktivitinya pada baris coding ke -3 selama 5 saat, kemudian barulah ia akan bergerak ke baris yang ke-4. Apa yang saya ingin tekankan disini adalah konsep freeze atau pause pada delay ini.

    Jadi kenapa kita perlu elakkan mengguna delay?

    Apabila Arduino masuk ke dalam arahan "delay", ia akan menyebabkan KESELURUHAN pin Input dan Output anda terhenti. Iya.. SEMUA! Bayangkan, anda ada sensor yang akan mengesan gas LPG dan secara kebetulan program anda masuk ke dalam arahan "delay ( 10000 )", pin yang ditugaskan untuk membaca sensor hanya akan mula beroperasi pada saat yang ke 10.001 saat. Sebab, pada saat yang ke 0.001 hingga ke 10, semua pin dalam keadaan beku atau freeze. Ini semua angkara "delay". Jahat kan? Apabila anda menggunakan sensor sahaja, perkara ini perlu diambil kira kerana ianya akan membuatkan projek anda tidak real - time.

    Jadi, macam mana nak selesaikan??

    Aaa.. Sebab itulah wujudnya command millis(). Apa itu millis()? Millis ini adalah satu arahan yang akan memberi kita nilai, dalam milisaat, berapa lama Arduino telah beroperasi (apabila mendapat bekalan kuasa). Nilai millis ini akan menjadi sifar selepas 50 hari.. Masa yang diberi ini adalah masa sebenar ye.. Tidak cepat 1 saat atau lewat 0.5 saat

    Contoh projek:

    Saya ingin membuat projek yang mengandungi 2 jenis sensor iaitu Gas Sensor dan Temperature Sensor (LM35). Apabila pin Gas = HIGH, kipas ekzos akan menyala selama 20 saat dan dalam masa yang sama, LM35 akan mendapatkan bacaan suhu. Jika suhu lebih dari 35 Celcius, Buzzer akan berbunyi sehinggalah suhu turun bawah dari 35 Celcius

    ** jika kita masih menggunakan "delay", mmg jahanam la sebab lama tu saya letak delay.. 20 saat.. Bayangkan kalau suhu dah cecah pada 45 Celcius pada saat yang ke-5 dan kebetulan bacaan gas pula HIGH, buzzer tak akan berbunyi la sebab masih belum keluar dari keadaan beku 20 saat tu..


    Jadi nak buat macam mana? Ayuh, kita guna millis ()


    const int Buzzer =  2;
    const int Ekzos_Fan = 3;
    const int GasSensor = A0;
    const int LM35 = A1;
    float Temp = 0;
    
    int Gas_State = 0;
    int LM35_State = 0; 
    int Gas_Time;
    
    void setup() 
     {
    
      pinMode ( Buzzer, OUTPUT );
      pinMode ( Ekzos_Fan, OUTPUT );
      pinMode ( GasSensor, INPUT );
      pinMode ( LM35, INPUT );
      
      int Gas_State = LOW;
      int LM35_State = LOW;
      
      int Gas_Time = 0;
      
     }
    
    void loop()
    {
    
      Gas_State = digitalRead (GasSensor);
      LM35_State = analogRead (LM35);
      Temp = LM35_State * 0.48828125;
      
      if ( Gas_State == HIGH )
         
         {
           Gas_Time = millis ();
           digitalWrite ( Ekzos_Fan, HIGH );
         }
      
      if ( Gas_Time > 0 && millis() - Gas_Time > 20000 )
         
         {
           digitalWrite ( Ekzos_Fan, LOW );
           Gas_Time = 0;
         }
      
      if ( Temp > 35 )
         
         {
           digitalWrite ( Ekzos_Fan, HIGH );
         }
         
      else
         
         {
           digitalWrite ( Ekzos_Fan, LOW );
         }
    }
    

    ~ TAMAT ~