Saturday, February 26, 2011

Sensor InfraRed + Arduino

Video konsep dasar penggunaan sensor inframerah pada Arduino





List Program:

/* Test deteksi sinar infrared
 sensor infrared di hubungkan ke PIN A0 (Analog)
 apabila sensor infrared mendapat sinar inframerah
 maka, LED 13 nyala, jika tidak LED 13 padam
 sementara itu nilai yang diterima sensor inframerah
 dapat dipantau melalui serial monitor
 oleh : Aan Darmawan
 blog : http://valfa.blogspot.com
 */
void setup() {                
  Serial.begin(9600); 
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);   
}
int sensor;
void loop() {
  // baca nilai sensor di PIN A0 (Analog) dan kirim ke serial
  sensor=analogRead(A0);
  Serial.print("Nilai: ");  
  Serial.println(sensor);  
  // Jika sensor mendapat sinar infra merah nilai sensor turun
  // Angka 900 dapat diubah sesuai jarak pantul yang diinginkan
  // dan nilai hasil pemantauan di serial monitor
  if(sensor<=900) 
    digitalWrite(13, HIGH);   // LED 13 dinyalakan
  else               
    digitalWrite(13, LOW);    // LED 13 dipadamkan
  delay(500);              // delay 0,5 detik
}


Tuesday, February 22, 2011

Car obstacle avoidance using IR (Mobil penghindar rintangan menggunakan IR)

Salah satu topik menarik dalam mikrokontroler adalah membuat mobil (robot beroda) yang dapat menghindari rintangan didepannya, banyak cara dan metoda untuk menyelesaikan masalah ini, salah satu cara yang mudah, sederhana dan murah adalah menggunakan sensor Infra Merah (IR =Infra Red), hasilnyapun cukup memadai, Prinsip dasar kerjanya adalah dengan mengirimkan sinar (Tx) infra merah ke bagian depan, sementara itu disamping sumber infra merah  diletakkan sensor (Rx) infra merah (lihat Gambar 1), apabila di depan tidak ada benda/rintangan , maka tidak akan ada sinar infra merah yang memantul ke sensor, tetapi apabila ada benda/rintangan maka sinar infra merah akan memantul dan pantulan sinar ini akan terdeteksi oleh sensor Infra merah, dan selanjutnya di olah melalui mikrokontroler dan mikrokontroler akan mengatur pergerakan motor. 

Gambar 1

Berikut ini video contoh hasil realisasi  Mobil penghindar rintangan menggunakan IR:





Skema rangkaian


List Program:

/*
Mobil penghindar rintangan
sensor penghalang menggunakan 3 buah sensor infra merah 
sensor 1,2 dan 3 sambung ke pinA0,A1 dan A2
Oleh   : Aan Darmawan
blog   : valfa.blogspot.com
tanggal: 21/02/11
 */

const int k1=900;
const int k2=880;
const int k3=885;
int s1,s2,s3,baru;

void setup() {                
//  Serial.begin(9600); 
  pinMode(2,OUTPUT);  // kendali motor 1
  pinMode(3,OUTPUT);  // motor 1 +
  pinMode(4,OUTPUT);  // motor 1 -
  pinMode(5,OUTPUT);  // kendali motor 2
  pinMode(6,OUTPUT);  // motor 2 +
  pinMode(7,OUTPUT);  // motor 2 -
  baru=1;
  
}
void maju(void){
  digitalWrite(2,LOW);
  digitalWrite(5,LOW);     
  delayMicroseconds(100);
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);     
  delayMicroseconds(100);
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);     
  delayMicroseconds(100);
  digitalWrite(2,HIGH);
  digitalWrite(5,HIGH);     
  delayMicroseconds(100);
  }
  
void mundur(void){
  digitalWrite(3,HIGH);
  digitalWrite(4,LOW);     
  delayMicroseconds(100);
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);     
  delayMicroseconds(100);
  digitalWrite(2,HIGH);
  digitalWrite(5,HIGH);     
  delayMicroseconds(200);
  delay(1000);
  }
          
void kanan_mj(void){
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);     
  delayMicroseconds(100);
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);     
  delayMicroseconds(100);
  digitalWrite(2,HIGH);
  digitalWrite(5,HIGH);     
  delayMicroseconds(200);
  delay(900);  
  }

void kiri_mj(void){
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);     
  delayMicroseconds(100);
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);     
  delayMicroseconds(100);
  digitalWrite(2,HIGH);
  digitalWrite(5,HIGH);     
  delayMicroseconds(200);
  delay(900);  
  }

void kanan_md(void){
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);     
  delayMicroseconds(100);
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);     
  delayMicroseconds(100);
  digitalWrite(2,HIGH);
  digitalWrite(5,HIGH);     
  delayMicroseconds(200);
  delay(900);
  }

void kiri_md(void){
  digitalWrite(3,HIGH);
  digitalWrite(4,LOW);     
  delayMicroseconds(100);
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);     
  delayMicroseconds(100);
  digitalWrite(2,HIGH);
  digitalWrite(5,HIGH);     
  delayMicroseconds(200);
  delay(900);
  }
  
void henti(void){
// mundur sedikit (rem)
  if(baru==1){
  digitalWrite(3,HIGH);
  digitalWrite(4,LOW);     
  delayMicroseconds(100);
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);     
  delayMicroseconds(100);
  digitalWrite(2,HIGH);
  digitalWrite(5,HIGH);     
  delayMicroseconds(200);
  delay(100); 
  baru=0;
  } 
// berhenti
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);     
  delayMicroseconds(100);
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);     
  delayMicroseconds(100);
  digitalWrite(2,LOW);
  digitalWrite(5,LOW);     
  delayMicroseconds(200);
  }

// main program 
void loop() {
  s1=analogRead(A0);  // sensor kanan
  s2=analogRead(A1);  // sensor tengah
  s3=analogRead(A2);  // sensor kiri  
  if(s1<k1)s1=1; else s1=0;  
  if(s2<k2)s2=1; else s2=0;  
  if(s3<k3)s3=1; else s3=0;    
//  Serial.print("S1 : "); 
//  Serial.print(s1);  
//  Serial.print(", S2: ");  
//  Serial.print(s2); 
//  Serial.print(", S3: ");  
//  Serial.println(s3);   
  if(s1==0 && s2==0 && s3==0) { //maju
    baru=1;
    maju();
  }
  if(s1==1 && s2==1 && s3==1) { //mundur
    baru=1;  
    mundur();
  }
  if(s1==1 && s2==0 && s3==0) { // maju belok kiri 
    baru=1;  
    kiri_mj();
  }
  if(s1==0 && s2==0 && s3==1) { // maju belok kanan 
    baru=1;  
    kanan_mj();
  }
  if(s1==1 && s2==1 && s3==0) { // mundur belok kiri 
    baru=1;  
    kiri_md();
  }
  if(s1==0 && s2==1 && s3==1) { // mundur belok kanan 
    baru=1;  
    kanan_md();
  } 
  if((s1==0 && s2==1 && s3==0) ||
     (s1==1 && s2==0 && s3==1) ){ // obstacle tengah berhenti
    henti();
  }
 // delay(1);              // tunggu 1 ms
}


Monday, February 14, 2011

Controlling car by light using Arduino + L293 +LDR (Pengendalian mobil dengan cahaya menggunakan Arduino + L293 + LDR)

IC L293 adalah IC Quadruple Half H Driver yang dapat digunakan sebagai driver 2 arah  untuk arus yang cukup besar (1A, untuk tipe L293D maks 600mA). datasheet ICL293 dapat diunduh disini .
Sebagaimana kita ketahui bahwa pin digital Arduino (umumnya) hanya bisa meng handle arus sekitar 40 mA, sehingga untuk menggerakan motor DC, stepper Motor, ataupun beban lainnya yang memerlukan arus besar perlu driver.
Tulisan ini menjelaskan cara menggerakan motor DC (asumsi motor DC 5V dengan konsumsi arus di bawah 500mA) dengan menggunakan IC L293 pada Arduino. Dengan formasi Biderectional Motor Control (informasi lanjut lihat data sheet) ,satu IC L293 dapat mengendalikan 2 motorDC dan masing2 motor dapat dikendalikan pada dua arah  (bidirectional) putaran (ClockWise atau CounterClockWise), dan arah putaran dapat dianalogikan sebagai maju dan mundur.
Berikut ini dibuat suatu aplikasi  Kendali 2 motor DC untuk maju ,berhenti dan mundur yang ditentukan oleh kekuatan cahaya, bila cahaya cukup, motor tidak bergerak (berhenti),  bila terang, motor bergerak kearah tertentu (maju) dan  bila  gelap, motor bergerak kearah yg berlawanan (mundur).Sensor cahaya yang digunakan adalah LDR yang dihubungan ke analog input (A0) dan secara sederhana dalam tulisan ini pembagian daerah kerja sensor thd respon cahaya dibagi 3 daerah yaitu daerah gelap (nilai sensor 0-341), daerah cukup cahaya (342-682) dan daerah terang (683-1023), artinya pada program variabel batasbawah=341 dan batasatas=682;  Tentu saja untuk nilai daerah kerja (batasbawah dan batasatas) yang sebenarnya thd lingkungan anda buat harus disesuaikan dengan kondisi cahaya setempat.

Demo Video

 (dalam percobaan ini menggunakan parameter batasbawah=700 dan batasatas=860)


Skema rangkaian




List Program:

/*
 Kendali 2 motor DC untuk maju ,berhenti dan mundur 
 yang ditentukan oleh kekuatan cahaya
 bila cahaya cukup motor tidak bergerak (berhenti)
 bila terang, motor bergerak kearah tertentu (maju) dan
 bila  gelap, motor bergerak kearah yg berlawanan (mundur)
 Motor 1 dan Motor 2 dihubungkan ke IC L293 (lihat skema)
 sensor menggunakan 1 buah LDR sambung ke pin A0 dan Vcc
 pin A0 ke ground pasang R = 10KOhm
 Oleh : Aan Darmawan
 Blog : http://valfa.blogspot.com
 Date : 14 Februari 2011  */

const int batasbawah=341;
const int batasatas=682;
// set batas atas dan bawah (threshold) dibagi 3 daerah sama rata
// (0-341) gelap, (342-682) cukup, (683-1023)terang
// nilai batas atas dan bawah ini bisa diubah sesuai dengan kondisi cahaya

int s1; // variabel untuk sensor

void setup() {                
  pinMode(2,OUTPUT);  // kendali motor 1
  pinMode(3,OUTPUT);  // motor 1 +
  pinMode(4,OUTPUT);  // motor 1 -
  pinMode(5,OUTPUT);  // kendali motor 2
  pinMode(6,OUTPUT);  // motor 2 +
  pinMode(7,OUTPUT);  // motor 2 - 
}
void maju(void){
  digitalWrite(2,LOW);
  digitalWrite(5,LOW);     
  delayMicroseconds(100);
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);     
  delayMicroseconds(100);
  digitalWrite(6,LOW);
  digitalWrite(7,HIGH);     
  delayMicroseconds(100);
  digitalWrite(2,HIGH);
  digitalWrite(5,HIGH);     
  delayMicroseconds(200);
}

void mundur(void){
  digitalWrite(3,HIGH);
  digitalWrite(4,LOW);     
  delayMicroseconds(100);
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);     
  delayMicroseconds(100);
  digitalWrite(2,HIGH);
  digitalWrite(5,HIGH);     
  delayMicroseconds(200);
}        

void henti(void){
  // berhenti
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);     
  delayMicroseconds(100);
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);     
  delayMicroseconds(100);
  digitalWrite(2,LOW);
  digitalWrite(5,LOW);     
  delayMicroseconds(200);
}

// main program 
void loop() {
  s1=analogRead(A0);  // ambil nilai dr sensor LDR
  if(s1<=batasbawah) { //mundur 
    mundur();
  }
  if(s1>batasbawah && s1<=batasatas) { // berhenti
    henti();
  }
  if(s1>batasatas) { //maju
    maju();
  }
  delay(10);              // tunggu 10 mdetik
}



Tuesday, February 08, 2011

Rangkaian LDR dengan Arduino severino sebagai Lilin Elektronik

LDR (light Dependent Resistor) adalah suatu resistor yang nilai resistansinya bergantung pada cahaya (Jika mendapat cahaya terang, nilai resistansi kecil sekitar puluhan s/d ratusan Ohm, jika kondisi gelap nilai resistansi akan besar bisa mencapai puluhan-ratusan KOhm bahkan bisa mencapai MOhm), umumnya LDR digunakan sebagai sensor cahaya. Berikut ini contoh aplikasi LDR pada arduino severino sebagai Lilin Elektronik, cara kerja skema di bawah ini adalah LED1 akan padam saat LDR mendapat cahaya cukup terang, apabila LDR tidak mendapat cahaya (kondisi lingkungan gelap) maka LED1 akan menyala (LED1 berfungsi sebagai Lilin Elektronik).

R1 = 10 KOhm, R2=LDR dan R3=560 Ohm


List Program
/* Program pemanfaatan LDR untuk Lilin Elektronik
 oleh : Aan Darmawan
 http://valfa.blogspot.com
 Februari 2011
 */

const int pinLDR = A0;// Sensor LDR dihubungkan dengan A0 dan
                      // A0 dihubungkan seri dengan Resistor 10 KOhm ke Ground
const int pinLED = 8; //LED1 dihubungkan ke pin8 melalui Resistor 560 Ohm
int sensorValue = 0; //var utk nilai yang terbaca di sensor
int outputValue = 0; //var utk penskalaan nilai sensor (0-1023)jadi nilai (0-255)

void setup() {
}

void loop() {
  // baca nilai dari sensor:
  sensorValue = analogRead(pinLDR);            
  // penskalaan nilai sensor (0-1023) menjadi nilai output (0-255)
  outputValue = map(sensorValue, 0, 1023, 0, 255);  
  // deteksi, jika nilai OutputValue <=200 , kondisi lingkungan redup/gelap
  // catatan: angka 200 dapat diubah-ubah disesuaikan dengan kondisi cahaya lingkungan
  // makin gelap nilai outputValue akan makin kecil dan sebaliknya
  if(outputValue<=200)
    digitalWrite(pinLED,HIGH);
  else digitalWrite(pinLED,LOW);     
  // delay 300 milidetik sebelum loop berikutnya
  // agar analog-to-digital converter siap membaca data berikutnya
  delay(300);                     
}


Lampu lalulintas dengan Arduino severino

Pengaturan nyala lampu lalulintas dapat di atur dengan mudah dengan arduino severino, berikut ini adalah prinsip dan rangkaian dasar cara pengatur lampu lalulintas (ideal) dengan nyala lampu hijau 5 detik, nyala lampu kuning 2,5 detik (lampu kuning mulai menyala setelah lampu hijau menyala 4 detik) dan nyala lampu merah 5 detik.

Demo Video



R1=R2=R3=560 Ohm, LED1=Merah, LED2=Kuning, LED3=Hijau


List Program

/* Program pengatur nyala lampu lalintas (dasar dan ideal)
 oleh : Aan Darmawan
 http://valfa.blogspot.com
 */
const int pinMerah = 8;
const int pinKuning =9;
const int pinHijau = 10;

void setup() {                
  // inisialisasi digitalpin 8,9,10 sebagai output
  pinMode(pinMerah, OUTPUT);   
  pinMode(pinKuning, OUTPUT);   
  pinMode(pinHijau, OUTPUT);   
  digitalWrite(pinMerah,LOW); 
  digitalWrite(pinKuning,LOW); 
  digitalWrite(pinHijau,LOW); 
}

void loop() {                
  //Led Hijau Nyala 4 detik ,Led kuning dan merah padam
  digitalWrite(pinMerah,LOW); 
  digitalWrite(pinKuning,LOW); 
  digitalWrite(pinHijau,HIGH);
  delay(4000); 
  //Led kuning dan hijau Nyala 1 detik ,Led merah padam
  digitalWrite(pinKuning,HIGH); 
  delay(1000);   
  //Led Kuning masih Nyala 1,5detik ,Led hijau dan merah padam
  digitalWrite(pinMerah,LOW); 
  digitalWrite(pinKuning,HIGH); 
  digitalWrite(pinHijau,LOW);
  delay(1500); 
  //Led Merah Nyala 5 detik ,Led kuning dan hijau padam
  digitalWrite(pinMerah,HIGH); 
  digitalWrite(pinKuning,LOW); 
  digitalWrite(pinHijau,LOW);
  delay(5000); 
}

Tuesday, February 01, 2011

KIT Arduino Severino (ElMarino)

Arduino Severino compatible Versi 2012 :



Kit Arduino Severino compatible:
Harga hanya Rp 150.000,- ,
 features hampir sama dengan Duemilanove ataupun UNO,
Isi Kit:
1 Arduino severino dengan ATMEGA8 
1 Kabel Serial (untuk Upload program dan komunikasi dengan komputer)


ElMarino (Severino campatible):
Kit ElMarino:
Harga hanya Rp 175.000,- ,
 features sama dengan* Duemilanove ataupun UNO,
 (*kecuali sarana upload)
Isi Kit:
1  Elmarino (Arduino severino compatible) dengan ATMEGA328 
1 Kabel Serial (untuk Upload program dan komunikasi dengan komputer)


petunjuk penggunaan dapat dilihat DISINI.


Bila minat hubungi via email ke valfa007@gmail.com