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 ~

22 September 2016

Tutorial 10 - UNO Asli vs UNO Clone



Secara jujurnya, saya adalah pengguna tegar Arduino jenis klon ( made in China ) sejak tahun 2012 lagi. Ada pelanggan yang sering mempersoalkan kemampuan Arduino jenis klon ni berbanding dengan yang asli. Pada pendapat saya, untuk penggunaan yang ringan dan sederhana ( light & medium usage ), apatah lagi untuk mereka yang baru nak berjinak - jinak dengan microcontroller, cuba dapatkan Arduino yang murah / clone version dahulu.. Kenapa? Kerana harganya jauh lebih murah, beroperasi sama dengan yang asli dan rupa fizikal juga adalah sama.

Saya pernah membuat tinjauan di kawasan"syurga elektronik" yang terletak di Pudu, Kuala Lumpur. Beberapa kedai besar menjual Arduino yang "kononnya" asli tetapi saya yakin ianya adalah klon. Penjual - penjual ini meletakkan harga "asli" walhal yang pembeli dapat adalah "klon". Namun, ada juga kedai yang secara terus terang mengatakan mereka hanya menjual Arduino versi klon dan harganya juga lebih rendah. Mengapa penjual ini berani menjual benda klon ini? Jawapannya adalah mudah. SEBAB UNO KLON BOLEH BEROPERASI. Mana mungkin orang jual secara terang - terangan benda yang tak boleh operasi? Logik kan?

Lagi satu, bila mana anda membeli Arduino yang asli, cuba tanya pekedai, "Tauke, ini barang warranty berapa lama?". 5% akan jawab 3 hari, 95% akan jawab "Ini barang tiada warranty". Tak percaya? Gerakkan kaki anda dan mula melangkah ke mana - mana kedai yang menjual Arduino.

Kalau yang asli pun tiada warranty atau jaminan, baik anda beli yang klon punya. Pun takde warranty jugak. Sama je! Ye dok?


Masalah utama yang sering dihadapi oleh pengguna Arduino Klon

Apabila anda menyambungkan USB cable ke Arduino klon, kita akan dapati bahawa PC atau laptop tidak akan recognize new hardware walaupun sambungan antara Arduino kepada PC kita telah pun dibuat. Kenapa jadi macam ni? Kerana Arduino klon tidak menggunakan cip Serial to USB yang standard tetapi digantikan dengan satu cip yang lain iaitu CH340G. Rujuk gambar di bawah.


Jadi, untuk menyelesaikan masalah ini, anda dikehendaki memuat turun dan install software yang telah dikeluarkan oleh pengeluar cip CH340G ke dalam komputer anda. Tapi disebabkan saya seorang yang budiman, saya akan mudahkan kerja anda. Sila muat turun perisian CH340G dekat sini.
Perisian ini boleh digunakan untuk apa juga versi Windows sekalipun.

Apabila anda launch software ini, tetingkap seperti dibawah akan muncul. Jangan rasa takut atau pun gerun.. Klik sahaja button INSTALL dan tunggu sehingga selesai. Selepas tu, anda boleh gunakan Arduino ini sama macam Arduino yang asli. 

Best kan??

Klik pada button INSTALL


Akhir sekali, saya ingin memetik kata - kata co-founder (pengasas) Arduino, 

"Arduino is different from other platforms on the market because of these it is open source hardware and software—if you wish, you can download the circuit diagram, buy all the components, and make your own, without paying anything to the makers of Arduino."
Massimo Banzi

19 May 2016

Tutorial 9 - Arduino & Real Time Clock (DS3231) - Set Alarm


Apa khabar semua? Saya doakan semua pembaca blog ini sihat - sihat belaka. Untuk post kali ini, saya ingin berkongsi cara - cara menggunakan Real Time Clock (RTC) jenis DS 3231. Kenapa saya ingin membawa tajuk ini kepada semua??? Sebab ramai yang bertanya kepada saya bagaimana boleh mengawal alatan elektrik @ apa - apa output kita dengan berpandukan masa (time based).

Sebelum saya menerangkan RTC lebih lanjut, pernahkah anda terfikir, bagaimana PC atau desktop kita sentiasa memaparkan waktu yang tepat dan betul walau dalam keadaan tiada bateri atau bekalan kuasa? Anda boleh mencuba sendiri menggunakan laptop  / PC anda. Cabut bateri, jangan sambungkan bekalan kuasa dan biarkan dalam masa 5 - 10 minit. Kemudian pasang balik bateri / pasang bekalan kuasa dan ON laptop / PC anda. Masa yang dipaparkan MASIH TEPAT. Kenapa? Ini kerana dalam laptop / PC anda, telah dipasang dengan satu peranti (device) yang dipanggil RTC. RTC ini menggunakan bateri kecil dan tidak akan terganggu operasinya jika tidak mendapat bekalan kuasa dari luar kerana dia ada bekalan kuasa yang sendiri. Segala data mengenai masa dan tarikh akan distorkan pada hari pertama anda membeli laptop (sewaktu configure OS) dan tidak akan hilang sehinggalah anda membuang data tersebut (format laptop) atau RTC ini sendiri dah rosak.

Saya ada terbaca, yang kadar ketepatan RTC sangat baik. Jika dipasang selama 1 tahun, kadar ketepatan jam anda mungkin lari dalam 2 saat sahaja. 1 tahun tau!! Lari 2 saat je!! Power la tu!

RTC DS-3231 (Front)
RTC DS-3231 (Rear)
Saya pernah membuat 2 projek yang menggunakan RTC ini. Ada yang nak kawal siraman pokok dan ada yang nak buat timer + clock (3 kali sehari) dan outputnya adalah semburan pewangi, lampu dan kipas. Harga RTC ini dalam lingkungan RM35 - RM40 sahaja. Ingat!! Ada dua jenis RTC di pasaran, DS3231 dan DS1307. DS3231 adalah lebih stabil dan upgraded version kepada DS1307. Jadi, belilah device yang paling latest. Mmmuuaaahhh cikedd!

Bateri dan module adalah dijual berasingan yer....!! Belilah dekat kedai mana pun.. Memang asing - asing. Gunakan bateri jenis XX2032 (3V - 3.7V) di kedai jam tangan.. Di Bidor, bateri ni harga dia RM9/-. Beli dekat KL, RM12/-. Hampeh!!

So, untuk tutorial kali ini, saya nak berkongsi cara menggunakan Arduino dan RTC DS3231 untuk membuat task (hidupkan LED) pada pukul 2.50 pagi dan tutup LED 10 saat kemudian. Kenapa 2.50 pagi?? Aku nak solat tahajjud!!  Hahaha!! Moh ler yeop!!

Komponen yang diperlukan:
  1. Arduino
  2. RTC DS3231
  3. 16x02 LCD Display
  4. Potentiometer 10k Ohm
  5. Resistor 220 Ohm
  6. LED
  7. Jumper Cable
  8. Breadboard
  9. USB Cable A-B type
Library yang perlu ditambah ke dalam Arduino
  1. DS3231.h 
  2. Time.h
  3. TimeAlarms.h
  4. VirtualWire.h
Cara Penyambungan


Untuk RTC DS3231 Module, ikut sambungan seperti di bawah:

      RTC                                      Arduino
      32K                                Tiada Sambungan
     SQW                               Tiada Sambungan
      SCL                                   SCL atau A4
      SDA                                  SDA atau A5
      VCC                                        5V
      GND                                      GND


Sambungan Penuh Untuk Litar

Aturcara:
  1. Untuk menggunakan RTC kali pertama (bau kedai lagi), anda dikehendaki memuat naik (upload) WAKTU yang terbaru ke dalam module RTC ini.
  2. Mana nak dapat full coding? Nah, amek ni. Jangan cakap abang tak payunggg! 
Pada baris ke-19, anda akan nampak aturcara ini:
 setDS3231time(SS,MM,JJ,H,TT,BB,YY);  

Ubah ikut panduan di bawah:

SS - saat / seconds. Jika nak set saat = 5, taip 5 sahaja. Jangan taip 05!
MM - minit / minute. Sama cara taip macam saat.
JJ - jam / hours. Guna sistem 24 jam. Kalau pukul 6 pagi, taip 6. Kalau pukul 2 petang, tulis 14
H - Hari / Day. Kalau hari Ahad, tulis 1, Isnin = 2..... hinggalah Sabtu = 7
TT - Tarikh / Date. Kalau 5hb, taip 5 shj.. Jgn 05
BB - Bulan / Month. 1 - 12. Takkan ni pun kena ajar kut.. Huhu
YY - Tahun / Year. Kalau 2016, tulis 2 angka terakhir je iaitu 16.

Sebagai contoh, saya nak setkan:
Waktu: 2.45 petang
Tarikh: 19 / 5 / 2016 (Khamis)

jadi, saya akan ubah line tadi macam ini:

setDS3231time(00,45,14,5,19,5,16); .


Lepas itu, untuk Alarm pula, kita akan upload aturcara yang berlainan. Anda tak perlu risau sebab aturcara yang ada upload sebelum ini (Set Time RTC) hanya akan hilang dalam Arduino, tetapi tidak pada RTC module. So, tak perlu risau la jam anda akan lari atau tak sama dengan yang asal.

Mana nak dapat full coding? Nah, amek lagi ni!! Jangan cakap abang tak pasang khemah! 


Pada baris 24 & 25 coding alarm ni, anda akan nampak line ni:

  Alarm.alarmRepeat(2,50,00, Alarm1High);
  Alarm.alarmRepeat(2,50,10, Alarm1Low);  

Itu maksudnya alarm akan trigger pada pukul 2:50 pagi 00 saat (setiap hari) dan juga 2:50 pagi 10 saat. Setiap hari!! Tapi kenapa saya buat alarm pada waktu yang hanya beza 10 saat?? Sebab saya bijak!! Hahaha. Takdela.. Sebab saya nak assign 2 job berbeza pada 2 waktu berbeza.

Macam ni, pada waktu 2:50 pagi 00 saat, saya nak LED saya ON dan selepas 10 saat, Alarm akan trigger sekali lagi dan kali ini saya bagi arahan dia untuk OFF  balik LED tadi. Senangkan? Kalau anda nak 20 saat, 1 minit, 1 jam, tukar je pada baris Alarm1Low.

Kalau nak 10 Alarm dalam sehari? Declare la 20 Alarm dengan nama berbeza. Kenapa 20?? Yelah, sebab 10 untuk ON, 10 lagi untuk OFF. Tak gitu? Guna la Alarm2High, Alarm2Low, Alarm3High, Alarm3Low dan seterusnya.. Lepas tu, assign void untuk setiap Alarm tadi. Simple mimple kn?

Arduino Nano + RTC DS3231 + LCD

SELAMAT MENCUBA!!

08 April 2016

Tutorial 8 : Pad Kekunci (Keypad) & Arduino

ASSALAMUALAIKUM WBT & SALAM SEJAHTERA


Apa khabar semua? Saya mendoakan agar semua pembaca setia blog litarprojek2u sihat dan sejahtera belaka.

Sempena hari Jumaat yang penuh keberkatan ini, saya ingin berkongsi dengan pembaca semua cara - cara membuat sambungan dan di antara Arduino dan keypad (4x4) dan juga cara menulis atur caranya.

Apa itu Pad Kekunci (Keypad) ?

Pad kekunci adalah sejenis alat / komponen yang membekalkan (provide) isyarat masukan (input) kepada Arduino. Keypad biasanya dipakai bila mana pengguna ingin membuat operasi menggunakan jujukan nombor seperti password, nombor telefon, nombor pekerja dan lain - lain lagi.

Terdapat pelbagai keypad yang dijual di pasaran. Ada yang murah, ada yang mahal. Pada pendapat saya, keypad jenis membrane adalah sangat sesuai kerana ianya lebih ekonomi dan saiznya yang nipis memudahkan pengguna untuk pasang dan dibawa ke mana - mana.
Membrane Keypad (4 x 4)









Button Keypad (4 x 4)
Button Keypad (4 x 3)
Jika diperhatikan, kita dapat lihat perbezaan ketara antara keypad (4 x 4) dan keypad (4 x 3). Untuk 4 x 4, keypad tersebut mempunyai 4 baris dan 4 kolum (16 karakter) manakala bagi 4 x 3,  keypadnya pula mempunyai 4 baris dan 3 kolum (12 karakter). Oleh yang demikian, adalah sangat penting jika anda memilih keypad yang betul sebelum membeli. Takut membazir pula. Membazir tu kan amalan syaitoon!

Operasi Aturcara

LED akan menyala apabila kata kunci (password) yang betul iaitu 1234 dimasukkan ke dalam sistem. Cara menekan masuk password adalah dengan cara menekan karakter 1, 2, 3 dan 4, kemudian diikuti butang ' * ' yang berfungsi seolah - olah butang ENTER. Jika pengguna tersilap tekan (sebab jari gemuk sangat), pengguna boleh menggunakan butang ' # ' yang berfungsi sebagai butang RESET.

Secara jujurnya, projek ini amat menarik kerana anda boleh mengubah LED kepada Solenoid Lock ( guna litar geganti untuk terima isyarat dari Arduino ) dan letakkan dibahagian dalam pintu rumah anda. Ia akan bertindak seperti home security system. Murah & mudah.


Komponen Yang Diperlukan
  1. Arduino ( apa - apa jenis pun takpe, tapi saya guna Nano )
  2. Membrane Keypad
  3. USB Cable A-B type
  4. Perintang 220 Ohm
  5. LED
  6. Jumper Cable
Libraries Yang Diperlukan
  1. Keypad 
  2. Password 
Sambungan Litar


LED disambung pada pin 13 Arduino Nano
Resistor 220 dipasang pada LED
Aturcara


#include <Password.h>
#include <Keypad.h>


Password password = Password ("1234"); // tukar password disini


const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

byte rowPins[ROWS] = { 9, 8, 7, 6 };
byte colPins[COLS] = { 5, 4, 3, 2 };

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()
  { 
  pinMode(13, OUTPUT);
  keypad.addEventListener(keypadEvent);
  }

void loop(){
  keypad.getKey();
  }
  void keypadEvent(KeypadEvent eKey){
  
  switch (keypad.getState()){
  case PRESSED:
  
  switch (eKey){
    
    case '*': 
    
    checkPassword();
    delay(10); 
    break;
    
    case '#': 
    
    password.reset();
    delay(10);
    
    break;
    
    default: 
    
    password.append(eKey);
    delay(10);
    }
  }
}

void checkPassword(){
  
if (password.evaluate())
    {
    digitalWrite(13, HIGH);   
    }


else
    {
    digitalWrite(13, LOW); 
    }
}




21 March 2016

Tutorial 7 - Arduino & GSM Module (SIM900)

ASSALAMUALAIKUM W.B.T & SALAM SEJAHTERA

Hai pembaca setia blog litarprojek2u! Apa khabar semua? Semoga sihat - sihat belaka. Okey, cerita banyak pun tak guna. Untuk post kali ini, saya ingin kongsikan cara - cara menggabungkan Arduino UNO dengan satu lagi alat perhubungan tanpa wayar iaitu GSM Module jenis SIM900. Jika anda baca post sebelum ini, saya ada membuat senarai pendek tentang alat perhubungan tanpa wayar ini. Antaranya ialah RF Transmitter & Receiver, Bluetooth dan GSM. GSM module ni sangat powerful sebab kita boleh kawal litar kita menggunakan SMS atau, lagi power, boleh buat call terus. Oleh kerana dia power, harga dia pun boleh tahan power. Chia chia chia... (ketawa jilake)

Saya ada membuat tinjauan sekitar Jalan Pasar di Pudu, KL (syurga elektronik bagi saya) berkaitan modul GSM ini. Saya dapati harga setiap kedai lebih kurang sama sahaja iaitu dalam lingkungan RM190 ke RM200. Tak termasuk GST tau.. So, dalam RM210++ la jugak.. Jadi, kalau ada pembaca yang ingin membeli module ini, pasti jangan kena tipu pulak ye.. Kalau murah semacam je, hati - hati. Takut kena scam pula.

APA ITU SIM900?

SIM900 GSM / GPRS Shield
SIM900 GSM/GPRS Shield adalah alat yang berfungsi untuk melakukan komunikasi antara telefon bimbit dengan Arduino anda menggunakan rangkaian GSM. Menggunakan alat ini, kita boleh menghantar dan menerima SMS dan panggilan, dengan menggunakan general purpose input/output (GPIO) yang disediakan

SIM900 menggunakan AT Command untuk beroperasi dan menggunakan komunikasi UART (Universal Asynchronous Receiver/Transmitter) dengan Arduino. SIM900 memiliki 12 GPIO, 2 ADC dan 1 PWM.

SIM900 boleh beroperasi secara Quad Band, iaitu rangkaian GSM yang berfrekuensi 850MHz, 900MHz, rangakaian Dual-Band 900/1800MHz dan 1900MHz. Di Malaysia, kita menggunakan jaringan 900/1800MHz. Oleh yang demikian, boleh la kita guna module ini.
 
Ciri - ciri lain SIM900 (saya copy paste dari eBay)
  • Quad-Band 850 / 900/ 1800 / 1900 MHz. 
  • GPRS multi-slot class 10/8
  • GPRS mobile station class B
  • Compliant to GSM phase 2/2+
  • Class 4 (2 W @ 850 / 900 MHz)
  • Class 1 (1 W @ 1800 / 1900MHz)
  • Control via AT commands - Standard Commands: GSM 07.07 & 07.05 | Enhanced Commands: SIMCOM AT Commands.
  • Short Message Service - so that you can send small amounts of data over the network (ASCII or raw hexadecimal).
  • Embedded TCP/UDP stack
  • RTC supported.
  • Selectable serial port.
  • Speaker and Headphone jacks
  • Low power consumption - 1.5mA(sleep mode) 
  • Industrial Temperature Range - -40°C to +85 °C

Library yang perlu ditambah:

Untuk menggunakan module ini, anda perlu menambah library Software Serial ke dalam folder libraries Arduino.

Bekalan Kuasa SIM900

Untuk membolehkan module ini beroperasi dalam keadaan optimum, sila gunakan adapter berkapasiti 5V dengan arus sebanyak 2 Ampere.

Operasi

Untuk kali ini, saya ingin membina satu aturcara bila mana water sensor mengesan air (HIGH), SMS akan dihantar ke telefon bimbit penerima.

Memasang Kad Sim pada SIM900

Pastikan kad sim yang anda hendak pasang pada module ini ada kredit ye. Kalau takde kredit, sampai kiamat la SMS tak kan diterima.
Pasang sim kad pada Modul SIM900
Selepas anda memasang sim kad, gunakan adapter 5V,2A untuk menghidupkan module ini. Terdapat 2 indicator LED iaitu Status dan juga NetLight. Jika module ini menerima voltan yang mencukupi dan minima arus, LED Status akan menyala (tidak berkelip). Anda perlu menekan  softswitch yang terdapat pada module tersebut. Jika Netlight berkelip selang 3 saat, itu menunjukkan yang SIM900 anda sudah bersedia untuk beraksi.

Sambungan

Bagi water sensor, sambungan dia adalah sangat mudah. Terdapat 3 pin iaitu +, - dan S. Jadi:
  • + sambung pada pin Arduino 5V
  • - sambung pada pin Arduino GND
  • S sambung pada pin Arduino A0 (sebenarnya, mana - mana pin Analog Input pun boleh)
Water Sensor
Untuk berkomunikasi dengan Arduino, shield ini menggunakan komunikasi serial UART. Pin yang digunakan adalah port Arduino anda, sama ada ingin gunakan pin Rx/Tx (D0/D1) atau Rx/Tx (D7/D8). Agar tidak menganggu komunikasi antara Arduino dengan PC, pin yang kita gunakan adalah software serial D7/D8. Oleh itu, kita perlu membuat tetapan jumper UART di module SIM900 seperti gambarajah di bawah:
Sambungan UART pada SIM900

 

Aturcara.


#include <SoftwareSerial.h>   
#define rxPin 0  
#define txPin 1  

SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);  
char text[150];   
String message="WATER DETECTED";

int Water_Sensor = A0;

int Water_Sensor_State = 0;

int sms_Send = 0;

void setup() {

  mySerial.begin(9600);  

  pinMode (Water_Sensor, INPUT);

}

void loop() {

 Water_Sensor_State = digitalRead (Water_Sensor);

 if ( Water_Sensor_State == HIGH )
  {
    for (sms_Send; sms_Send < 1; sms_Send++)
        {
          delay (30);
          mySerial.print("AT+CMGF=1\r"); 
          delay(1000);  
          mySerial.print("AT+CMGS=\"+601xxxxxxxx\"\r"); // masukkan no. telefon
          delay(1000);  
          mySerial.println(message);  
          mySerial.print("\r");  
          delay(1000);  
          mySerial.println((char)26);  
          mySerial.println();
        }
      
   }

 else
  {

  }

13 January 2016

Tutorial 6 - Arduino + 433MHz Radio Frequency (RF) Transmitter & Receiver

ASSALAMUALAIKUM WBT & SALAM SEJAHTERA.

Seperti yang janjikan pada post sebelum ini, saya akan menerangkan tentang cara mengawal output menggunakan kaedah wireless. Kali ini, saya memilih alat / komponen asas dalam telekomunikasi  iaitu Radio Frequency.

433MHz RF Transmitter - Receiver
Untuk pengetahuan anda, RF banyak digunakan pada alat kawalan jauh (remote control) seperti TV, penghawa dingin, kipas dan juga alat keselamatan kereta. Sebelum kita pergi lebih jauh, adalah lebih baik kita mengenal secara mendalam tentang RF Transmitter - Receiver.

Transmitter (Tx): 

Voltan Kendalian : 3V hingga 12V  (untuk kuasa maksimum, guna 12V)
Arus Kendalian: 9mA hingga 40mA
Mod Resonan: Surface Acoustic Wave
Mod Modulasi: Amplitude Shift Keying
Frekuensi Kendalian: 433MHz
Kuasa Penghantaran: 25mW (433MHz pada 12V)
Ralat Frekuensi: +150kHz (maksima)
Halaju Gelombang :  kurang dari 10Kbps

Receiver (Rx):

Voltan Kendalian: 5.0VDC +0.5V
Arus Kendalian: maksima 5.5mA
Mod Nyahmodulasi: On Off Keying / Amplitude Shift Keying
Frekuensi Kendalian: 315MHz hingga 433.92MHz
Lebar jalur: 2MHz
Halaju Penghantaran: <9.6Kbps (pada 315MHz dan -95dBm)


Jika di lihat pada spesifikasi di atas, kita boleh membuat kesimpulan yang dengan menggunakan RF Tx-Rx ini, jarak maksimum antara Tx dengan Rx boleh dikawal sejauh 100 meter!! What??!! Ya. 100 meter. Jarak 100 meter hanya boleh dicapai jika tiada halangan seperti dinding, pokok atau bangunan. Atau dalam kata lain, KAWASAN TERBUKA ler.. Jika ada halangan antara Tx dan Rx, maka jarak maksima 100 meter tidak mampu dicapai.

Untuk projek kali ini, saya akan menggunakan 2 Arduino (satu untuk transmit data dan satu lagi untuk receiver) untuk menyalakan LED. Jika bahagian Rx menerima isyarat yang dihantar oleh Rx, LED pada pin 13 (onboard) akan berkelip - kelip mengikut isyarat yang diterima.

Ayuh!! kita mula berhuhu~ ~

Komponen  yang diperlukan.

  1. Arduino UNO - 2 set
  2. 433MHz Transmitter - Receiver - 1 set
  3. Jumper Wire - sesedap rasa
  4. Breadboard
  5. 9V Bateri (Petak) - 2 biji

Skematik Sambungan Litar

Sambungan pada Tx

Sambungan pada Rx

 Aturcara Arduino

Sebelum menulis aturcara, anda perlu memuat turun Arduino library yang membolehkan pengguna menghantar data ringkas tanpa melalui proses addressing, re-transmit dan juga acknowlegdement. Klik link dibawah dan paste folder VirtualWire ini ke dalam libraries Arduino.


Virtual Wire Arduino 

Aturcara pada Tx


#include <VirtualWire.h>
char *controller;
void setup()
{
  pinMode(13,OUTPUT);
  vw_set_ptt_inverted(true);
  vw_set_tx_pin(12);
  vw_setup(4000);
}

void loop()
{
  controller="1"  ;
  vw_send((uint8_t *)controller, strlen(controller));
  vw_wait_tx(); 
  digitalWrite(13,1);
  delay(2000);
  controller="0"  ;
  vw_send((uint8_t *)controller, strlen(controller));
  vw_wait_tx(); 
  digitalWrite(13,0);
  delay(2000);
}


Aturcara pada Rx


#include <VirtualWire.h>
 
void setup()
{
  vw_set_ptt_inverted(true);
  vw_set_rx_pin(12);
  vw_setup(4000); 
  pinMode(13, OUTPUT);
  vw_rx_start();     
}
  
void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)){
      
       if(buf[0]=='1'){
         digitalWrite(13,1);
         }
   
      if(buf[0]=='0'){
         digitalWrite(13,0);
         }

      }
}