Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

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 ~

26 August 2015

Tutorial 4 - Motor Control - Forward & Reverse PART 1

Assalamualaikum wbt & Salam Sejahtera

Pada kali ini, saya akan menerangkan secara ringkas 2 kaedah yang biasa digunakan untuk mengawal motor. Yang dimaksudkan dengan mengawal di sini adalah motor membuat  rotasi hadapan (forward) dan juga rotasi ke belakang (reverse). Kaedah yang boleh digunakan adalah:
  1. Menggunakan 2 set litar geganti (relay)
  2. Menggunakan IC L293D (H-Bridge Motor Driver)
Untuk Bahagian 1 ini, saya akan menerangkan lebih lanjut cara kawalan motor menggunakan 2 set litar geganti. Terdapat beberapa kelemahan mengawal motor menggunakan litar geganti ini. Antaranya ialah:
  1. Kos litar geganti yang agak mahal.
  2. Hanya boleh mengawal arah rotasi sahaja, bukan kelajuan
 Ramai yang masih tidak faham tentang fungsi litar geganti. Litar geganti biasanya digunakan untuk menghidupkan satu litar yang lain (lebih dari 5V) apabila menerima isyarat dari Arduino.
Sebagai contoh, apabila saya ingin menghidupkan motor DC 12 Volt selepas sensor suhu (LM35) mengesan 40 darjah Celcius, saya memerlukan litar geganti. Ini kerana, Arduino hanya mengeluarkan isyarat 5V dan maksimum 40mA pada satu pin keluaran.

Mana mungkin dengan 5V dan current 40mA boleh menggerakkan satu motor 12V??!!

Dalam kes ini, litar geganti sangat sangat membantu. Isyarat yang dihantar oleh pin Arduino akan mengaktifkan litar geganti melalui transistor yang ada dalam litar tersebut.
Ramai juga yang bertanya pada saya, berapakah maksimum beban yang boleh diletakkan pada keluaran relay? Jawapannya mudah sahaja. Maksimum load yang boleh digunakan biasanya tertera pada badan komponen relay itu sendiri. Saya boleh katakan yang relay boleh menampung sehingga 240V AC / 10 A dan 30V DC / 10A. Besar tu.. Bukan setakat boleh nak hidupkan DC motor 12V,  nak hidupkan lampu pendaflour pun boleh!!

5V Relay
Terdapat beberapa jenis voltan untuk mengaktifkan coil yang ada pada relay. Ada 5VDC, 9VDC, 12VDC dan sebagainya.
Gambar di atas adalah komponen relay jenis 5VDC. Ramai pelajar yang terkeliru  dengan angka tersebut. Mereka ingatkan 5V adalah maksimum beban yang boleh digunakan. Tidak!! Ianya hanyalah nilai voltan yang perlu untuk mengaktifkan coil pada relay. Ini bermaksud, kita perlu letakkan +5VDC pada hujung terminal coil dan GROUND pada hujung yaang satu lagi. Itu sahaja.

Layout Pin Relay

Skematik Litar Geganti

Litar Kawalan Motor Mara Sonsang (Forward Reverse)

19 January 2015

Simulasi Litar Arduino Menggunakan Perisian Proteus - Siri 2

Assalamualaikum wbt & Salam Sejahtera.

Selepas anda memuat turun fail Library Arduino, ikut arahan yang terdapat dalam fail itu untuk membolehkan anda membuat simulasi Arduino pada Proteus.

Arahan yang terdapat dalam fail Library Arduino
Sekarang, buka Proteus anda dan pada Component Mode, klik pada simbol P. Pastikan perkataan Emulator wujud dalam senarai kategori komponen (rujuk gambar bawah). Jika tiada, anda mungkin tidak mengikut arahan dengan betul. Sila lihat video dalam Youtube untuk bantuan.
Emulator pada kategori komponen
Double click pada Emulator dan pilih Arduino UNO R3. Kemudian, tambah komponen yang lain seperti perintang, LED dan suis.

Jika anda mahu kaedah pantas cara menambah komponen, taip sahaja RES untuk perintang, RED-LED untuk LED dan BUTTON untuk suis pada ruangan keyword.

Ruangan keywords

Sambungkan litar seperti gambar bawah. Tukar nilai perintang anda agar litar dapat berfungsi dengan baik.
Running LED dengan 1 suis
 Copy aturcara dibawah dan paste pada IDE Arduino anda.

const int buttonPin = A0;    
int LED3 =  13;
int LED2 =  12;
int LED1 =  11;
int buttonState = 0;


void setup() {
 
pinMode(LED3, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(buttonPin, INPUT);
}

void loop() {
buttonState = digitalRead(buttonPin);

if (buttonState == HIGH) {
  

digitalWrite(LED3, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED1, HIGH);
delay(500);
  

digitalWrite(LED3, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED1, LOW);
delay(500);
     

digitalWrite(LED3, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED1, LOW);
delay(500);
}

else {

digitalWrite(LED3, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED1, LOW);
}  
}


Selepas itu, pada IDE Arduino anda, klik butang Verify sehingga keluar status Done compiling.
Butang Verify pada IDE Arduino
Bagi memudahkan kita load hex file, langkah berikut adalah sangat penting.
  1. Taip %TEMP% pada column Run dan tekan Enter
  2. Patah balik ke folder Local
  3. Create shortcut untuk folder Temp

Step 1

Langkah 2 - Klik pada butang Local untuk patah balik ke folder

Langkah 3 - Create Shorcut pada desktop
Untuk load hex file anda ke dalam Proteus, double click pada Arduino anda di Proteus dan splash screen berikut akan terpapar.



Pada Program File, klik pada icon folder (rujuk gambar atas). Pergi ke desktop dimana anda telah create shortcut folder Temp. Pilih fail yang ada perkataan buildxxxxxxxxxxxx.tmp.
Double click pada folder tersebut dan pilih .hex file. JANGAN PILIH .ELF!!
Klik Open dan OK.
Tekan butang Run the Simulation dan akan anda dapat lihat LED akan berkelip secara bergilir-gilir setiap kali anda menekan suis.
Run the simulation

SELAMAT MENCUBA!!

15 December 2014

Simulasi Litar Arduino Menggunakan Perisian Proteus - Siri 1

Assalamualaikum wbt & Salam Sejahtera.

Pada hari ini saya ingin berkongsi cara membuat simulasi litar Arduino menggunakan perisian Proteus.
Saya menggunakan Proteus 8 (latest) sebagai contoh dan IDE Arduino 1.5.7 ERW untuk menulis aturcara Arduino.

Saya akan membuat satu litar yang ringkas dahulu sebagai permulaan.

Litar Skematik guna Proteus
Operasi litar saya adalah: Apabila suis push-button ditekan, 3 LED yang berlainan warna akan menyala secara bergilir-gilir mengikut turutan. BLUE (1 saat), diikuti warna RED (1 saat) dan kemudian warna YELLOW (1 saat). Selepas itu, semua LED akan padam. Alaa, macam konsep running light..

Sebelum anda mula melukis litar skematik ini, pastikan perisian libraries Proteus anda telah ditambah dengan litar Arduino. Macam mana nak check? Jangan risau.. Saya akan tunjuk step-by-step..

Gambarajah 1 - Component Mode
Ok. Jika anda lihat gambar di atas, ada button yang menunjukkan Component Mode (dalam box merah, bawah anak panah). Klik button tu kemudian gerakkan mouse anda ke huruf P (dalam box kuning). Klik dan splash screen seperti di bawah akan muncul.

Splash Screen
Jika ada tertulis perkataan Emulator, maknanya Library Proteus anda telah diupdate. Bagi yang tiada, anda boleh muat turun fail ini dan ikut arahan yang terdapat di dalam fail tersebut.


~bersambung..




08 September 2014

Arduino & Ultrasonic Module (HC SR-04)

 

Modul Ultrasonic menggunakan konsep sonar seperti mana yang digunakan oleh tentera untuk mengukur jarak di antara objek dengan kapal mereka. 

Konsep Sonar
Untuk tutorial kali ini, kami akan menunjukkan bagaimana Arduino UNO akan di"attach" bersama modul ultrasonic ini akan menghasilkan litar yang "awesome dan cool".

Litar ini akan menyalakan LED jika objek berada di antara julat 7 cm hingga ke 10 cm. Jika jarak objek lebih dari 10cm atau kurang dari 7 cm, LED akan OFF. Ayuh kita mencuba

Peralatan yang diperlukan:
  1. Arduino UNO
  2. Ultrasonic Module HC SR-04
  3. Cable
  4. LED
  5. Perintang 220 ohm
HC-SR04
 Untuk HC SR-04 modul, sila sambung ikut senarai di bawah:
  1. Vcc sambung ke 5V Arduino
  2. Gnd sambung ke GND Arduino
  3. Echo sambung ke kaki 7 Arduino
  4. Trig sambung ke kaki 8 Arduino
Untuk perintang dan LED pula, sambung secara series ikut turutan berikut:
   Kaki 6 UNO - Perintang - Positive LED - Negative LED - GND


Sambungan litar

Untuk coding arduino, macam biasa, anda copy paste coding di bawah.

#define echoPin 7
#define trigPin 8  

#define LEDPin1 6
int maxJarak = 10;

int minJarak = 7;  
long masa, jarak;

void setup()
  {
   Serial.begin(9600);         
  
   pinMode(trigPin, OUTPUT);    
   pinMode(echoPin, INPUT);     
   pinMode(LEDPin1, OUTPUT);  
   }

void loop()
  {

 digitalWrite(trigPin, LOW);       

delay(300);                

 digitalWrite(trigPin, HIGH);    
 delay(300);                   

 digitalWrite(trigPin, LOW);    
 masa = pulseIn(echoPin, HIGH); 

 jarak = masa/58.2;              


 if (jarak >= maxJarak || jarak <= minJarak) 
 {

     Serial.print(jarak);       

     Serial.println("  cm");
     Serial.println("LED OFF");
     digitalWrite(LEDPin1, LOW);
    
 }

 else
 {

 Serial.print(jarak); 
 Serial.println("  cm");
 Serial.println("LED ON");
 digitalWrite(LEDPin1, HIGH);
  }

 delay(1000);
  }


Anda juga boleh menggunakan paparan LCD untuk memaparkan jarak seperti mana yang Serial Communication anda paparkan.

Serial Communication?? Apa kejadah??!!


Sila tanya lebai Google. Anda akan dapat jawapannya.


Jumpa lagi! Selamat  mencuba!

 

17 March 2014

Apa Itu ARDUINO?

Arduino adalah sejenis microcontoller yang amat popular pada waktu ini. Setanding dengan PIC16F dan PIC18F, Arduino adalah salah satu mikro pengawal yang wajar untuk dipertimbangkan semasa membuat pemilihan ketika membuat projek akhir. 

Berasaskan platform open source, Arduino semakin mendapat perhatian pereka-cipta dan researcher. Penulisan coding yang mudah, mampu "bekerja" dengan lain - lain litar dan harga yang mampu milik menjadikan Arduino menjadi pilihan utama waktu ini.

Terdapat beberapa laman web yang boleh dijadikan rujukan utama untuk Arduino seperti arduino.cc dan myduino. Ini memudahkan lagi perekacipta untuk menghasilkan projek yang menarik dan berkualiti. Untuk e-book pula, saya menyarankan agar pengguna beginner @ newbies merujuk buku Arduino Cookbook yang boleh dimuat turun di website terpilih.

Arduino Cookbook

Bagi permulaan, anda bolehlah mencuba Arduino UNO yang berharga RM70.00 (maksimum). UNO mempunyai 5 input analog dan 13 output digital + analog + PWM. 

Walaupun terdapat jenis - jenis Arduino yang berlainan, pada pendapat saya, UNO adalah sangat berbaloi bagi pelajar yang mahu mula berjinak - jinak dengan pengawal ini. Percayalah, anda akan mendapati Arduino jauh lebih mudah dari PIC!!


Arduino UNO

Arduino IDE

Untuk membeli Arduino secara online, anda boleh merujuk laman berikut:
  1. Cytron
  2. myduino
  3. RS online