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
}


11 comments:

ferdi said...

bisa dishare codingnya, gan..

Aan Darmawan H said...

Sudah Mas Ferdi...

Fajar Kurniawan said...

bisa di share mas skema rangkaian serta coding nya .

Fajar Kurniawan said...

ke alamat email/PM facebook (razta.vara@yahoo.com) terima kasih

Aan Darmawan H said...

Mas Vaurist, saya rasa skema dan coding sudah jelas terpampang di atas, tinggal copas saja..... :-)

Unknown said...

permisi mas, saya sedang mencoba membuat robot penghindar halangan. boleh saya minta skema jalur yang akan dicetak ke papan pcb ngga ?
tolong kirim ke email saya ya mas :)

Aan Darmawan H said...

@Alhima: maaf saya ga buat pcb nya, cuma rangkaian sensor dan driver motor yg di pcb kan,itupun pake pcb berlubang... :-)

juna said...

mas mau nanyak nie mas sensor infra merah TX sama infra merah RX itu beda ya mas.
satu lagi mas law sensor photodioda beda juga ya mas sama sensor infra merah,,,,
terimakasi mas,,,,,
masih bingung mas....

Aan Darmawan H said...


@Juna: Betul, yang Tx penghasil sinar inframerah sedangkan yang Rx pendeteksi sinar Inframerah. photodioda dan sensor inframerah? photodioda adalah sensor cahaya yang teknologi pembuatannya mirip dengan pembuatan dioda, kalau suatu photodioda dibuat dan mempunyaikepekaan di daerah sinar infra merah, maka photodioda itu dapat digunakan untuk sensor inframerah. Sensor inframerah tidak harus terbuat dari photodioda, bisa terbuat dari bahan lainnya. semoga membantu.... pada

Unknown said...

battreinya dimna mas?

Aan Darmawan H said...

Sumber tegangan ikut ke Supply Arduino, bisa perhatikan pada wiring diagram