Translate

Membuat Robot WALL AVOIDER

Membuat Robot WALL AVOIDER
   

             Pada kesempatan yang berbahagia ini saya akan share mengenai bagaimana cara membuat robot wall avoider atau robot penghindar tembok, robot ini seperti namanya penghindar tembok, robot ini akan menghindari halangan yang ada di bagian depannya, jadi jika terdapat halangan tembok didepannya robot ini akan berbelok, entah itu ke arah kanan atau ke kiri tergantung lintasannya, robot ini menggunakan 3 buah sensor jarak HC-SRF04 yang mana ditempatkan di bagian depan, samping kanan dan kiri, fungsi sensor dibagian depan yaitu untuk mendeteksi apakah ada halangan atau tidak, kemudian fungsi sensor kanan dan kiri untuk menentukan apakah robot harus berbelok ke arah kanan atau ke arah kiri, jika sensor depan mendeteksi halangan maka mikrokontroller akan mengecek sensor kanan dan kiri, apakah ada jalan di bagian kanan atau kiri, jika ada jalan di bagian kanan maka robot akan berbelok ke arah kanan begitu pula dengan kiri, hanya menggunakan komparasi antara jarak kanan dan kiri. begitulah prinsip kerjanya, berikut adalah skema dan programnya.


Gambar ilustrasi gerak robot






a. Minimum System ATMega16



b. Motor Driver L293




 c. Program Bascom AVR

$regfile = "m16def.dat"
$crystal = 12000000

Config Timer0 = Timer , Prescale = 256

Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2
Config Lcdpin = Pin , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2

Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Ddrb = &B11111111

Config Portd.6 = Output                                     'depan
Config Pind.7 = Input
Config Portd.2 = Output                                     'kanan
Config Pind.3 = Input
Config Portd.0 = Output                                     'kiri
Config Pind.1 = Input

Dirkiri1 Alias Portb.0
Dirkiri2 Alias Portb.1
Dirkanan1 Alias Portb.2
Dirkanan2 Alias Portb.3

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output

Declare Sub Cek_jarak1
Declare Sub Cek_jarak2
Declare Sub Cek_jarak3

Dim Data_jarak3 As Word
Dim Data_jarak_olah3 As Word
Dim Data_jarak_fix3 As Word

Dim Data_jarak1 As Word
Dim Data_jarak_olah1 As Word
Dim Data_jarak_fix1 As Word

Dim Data_jarak2 As Word
Dim Data_jarak_olah2 As Word
Dim Data_jarak_fix2 As Word

Triger3 Alias Portd.6                                       'depan
Pecho3 Alias Pind.7
Triger2 Alias Portd.2                                       'kanan
Pecho2 Alias Pind.3
Triger1 Alias Portd.0                                       'kiri
Pecho1 Alias Pind.1

Mulai:
Cls
Cursor Off
Locate 1 , 4
Lcd "Pendeteksi"
Locate 2 , 2
Lcd "Jarak Benda"
Wait 3

Do

Call Cek_jarak3                                             'depan
  Data_jarak3 = Data_jarak3
  Data_jarak_olah3 = Data_jarak3 * 100
  Data_jarak_fix3 = Data_jarak_olah3 / 256

Call Cek_jarak1                                             'kanan
  Data_jarak1 = Data_jarak1
  Data_jarak_olah1 = Data_jarak1 * 100
  Data_jarak_fix1 = Data_jarak_olah1 / 256

Call Cek_jarak2                                             'kiri
  Data_jarak2 = Data_jarak2
  Data_jarak_olah2 = Data_jarak2 * 100
  Data_jarak_fix2 = Data_jarak_olah2 / 256


Cls
Cursor Off
Upperline
Lcd "Jarak Benda="
Locate 2 , 1
Lcd Data_jarak_fix3                                         'depan
Locate 2 , 4
Lcd Data_jarak_fix1                                         'kiri
Locate 2 , 7
Lcd Data_jarak_fix2                                         'kanan
Waitms 1

'maju
If Data_jarak_fix3 > 15 And Data_jarak_fix2 > 7 And Data_jarak_fix1 > 7 Then

   Dirkiri1 = 0
   Dirkiri2 = 1
   Dirkanan1 = 0
   Dirkanan2 = 1
   Pwm1a = 70
   Pwm1b = 70

'mundur
Elseif Data_jarak_fix3 < 15 And Data_jarak_fix2 > 7 And Data_jarak_fix1 > 7 Then
   Dirkiri1 = 1
   Dirkiri2 = 0
   Dirkanan1 = 1
   Dirkanan2 = 0
   Pwm1a = 100
   Pwm1b = 100

'belok kiri
Elseif Data_jarak_fix3 > 0 And Data_jarak_fix3 < 20 And Data_jarak_fix2 < 30 And Data_jarak_fix1 > 10 Then

   Dirkiri1 = 1
   Dirkiri2 = 1
   Dirkanan1 = 0
   Dirkanan2 = 1
   Pwm1a = 0
   Pwm1b = 255
   Waitms 250

'belok kanan
Elseif Data_jarak_fix3 > 0 And Data_jarak_fix3 < 20 And Data_jarak_fix2 > 10 And Data_jarak_fix1 < 30 Then
   Dirkiri1 = 0
   Dirkiri2 = 1
   Dirkanan1 = 1
   Dirkanan2 = 1
   Pwm1a = 255
   Pwm1b = 0
   Waitms 250

End If

Loop


'depan
Sub Cek_jarak3:
Reset Triger3
Waitus 10
Set Triger3
Waitus 20
Reset Triger3
Tcnt0 = 0
Bitwait Pecho3 , Set
Start Timer0
Do
If Pecho3 = 0 Then
Data_jarak3 = Tcnt0
Stop Timer0
Exit Do
End If
If Tifr.0 = 1 Then
Stop Timer0
Tifr.0 = 1
Data_jarak3 = &HFF
Exit Do
End If
Loop
Stop Timer0
Waitms 15
End Sub


'kiri
Sub Cek_jarak1:
Reset Triger1
Waitus 10
Set Triger1
Waitus 20
Reset Triger1
Tcnt0 = 0
Bitwait Pecho1 , Set
Start Timer0
Do
If Pecho1 = 0 Then
Data_jarak1 = Tcnt0
Stop Timer0
Exit Do
End If
If Tifr.0 = 1 Then
Stop Timer0
Tifr.0 = 1
Data_jarak1 = &HFF
Exit Do
End If
Loop
Stop Timer0
Waitms 15
End Sub


'kanan
Sub Cek_jarak2:
Reset Triger2
Waitus 10
Set Triger2
Waitus 20
Reset Triger2
Tcnt0 = 0
Bitwait Pecho2 , Set
Start Timer0
Do
If Pecho2 = 0 Then
Data_jarak2 = Tcnt0
Stop Timer0
Exit Do
End If
If Tifr.0 = 1 Then
Stop Timer0
Tifr.0 = 1
Data_jarak2 = &HFF
Exit Do
End If
Loop
Stop Timer0
Waitms 15
End Sub







 

No comments:

Post a Comment