Pada palikasi robotika, ketika membutuhkan informasi jarak maka
kita langsung berpikir sensor jarak. Yang paling terkenal adalah sensor
ultrasonic. Nah apabila robot yang kita buat membutuhkan informasi 4
jarak, jarak didepan, di samping kanan, samping kiri dan belakang maka
solusinya kita bisa memakai 4 sensor ultrasonic.
Saya memakai sensor ultrasonic SRF-05. Empat buah sensor SRF05 dihubungkan dengan mikrokontroler ke PORTB. ATmega8535 dengan Kristal 16 MHz. satu sensor SRF05 memerlukan 2 port, satu untuk Trigger dan satunya untuk Echo. Mengenai prinsip kerja sensor SRF05 telah kita bahas pada atrikel sebelumnya “Ultrasonic Range Meter dengan SRF05″, silahkan baca dulu bagi yang belum tahu.
Total 8 Pin (4×2), sehingga PORTB sudah cukup kita gunakan. Rangkaian mikrokontroler dengan sensor SRF05 tampak pada gambar berikut :
Nah, software dibuat dengan BASCOM-AVR :
‘******************************************
$regfile = “m8535.dat”
$crystal = 16000000
Dim Flag As Bit , I As Byte
Dim Jarak As Word
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.2 , Db4 = Portc.4
Config Lcdpin = Pin , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Cursor Off
Cls
Lcd “4 Sensor Jarak”
Lowerline
Lcd “ SRF05 “
Wait 2
Cls
Lcd “S1= S2=”
Lowerline
Lcd “S3= S4=”
Ddrb = &B01010101
Config Timer1 = Timer , Prescale = 8
On Timer1 Jarak_over
Enable Interrupts ‘cm
‘————————
Do
Gosub Ukur_s1
Locate 1 , 4
Lcd Jarak ; ” “
Gosub Ukur_s2
Locate 1 , 12
Lcd Jarak ; ” “
Gosub Ukur_s3
Locate 2 , 4
Lcd Jarak ; ” “
Gosub Ukur_s4
Locate 2 , 12
Lcd Jarak ; ” “
Waitms 800
Loop
End
‘———————————
Ukur_s1:
Flag = 1
Waitus 100
Portb.0 = 1
Waitus 15
Portb.0 = 0
Waitus 100
Enable Timer1
Timer1 = 0
Bitwait Pinb.1 , Set
Start Timer1
While Flag = 1
If Pinb.1 = 0 Then
Stop Timer1
Jarak = Timer1
Flag = 0
End If
Wend ‘
Jarak = Jarak / 116
Return
‘———————————
Ukur_s2:
Flag = 1
Waitus 100
Portb.2 = 1
Waitus 15
Portb.2 = 0
Waitus 100
Enable Timer1
Timer1 = 0
Bitwait Pinb.3 , Set
Start Timer1
While Flag = 1
If Pinb.3 = 0 Then
Stop Timer1
Jarak = Timer1
Flag = 0
End If
Wend ‘
Jarak = Jarak / 116
Return
‘———————————
Ukur_s3:
Flag = 1
Waitus 100
Portb.4 = 1
Waitus 15
Portb.4 = 0
Waitus 100
Enable Timer1
Timer1 = 0
Bitwait Pinb.5 , Set
Start Timer1
While Flag = 1
If Pinb.5 = 0 Then
Stop Timer1
Jarak = Timer1
Flag = 0
End If
Wend ‘
Jarak = Jarak / 116
Return
‘———————————
Ukur_s4:
Flag = 1
Waitus 100
Portb.6 = 1
Waitus 15
Portb.6 = 0
Waitus 100
Enable Timer1
Timer1 = 0
Bitwait Pinb.7 , Set
Start Timer1
While Flag = 1
If Pinb.7 = 0 Then
Stop Timer1
Jarak = Timer1
Flag = 0
End If
Wend ‘
Jarak = Jarak / 116
Return
‘———————————
Jarak_over:
Flag = 0
Stop Timer1
Timer1 = 0
Jarak = 0
Return
Hasil percobaannya tampak pada gambar berikut :
Saya memakai sensor ultrasonic SRF-05. Empat buah sensor SRF05 dihubungkan dengan mikrokontroler ke PORTB. ATmega8535 dengan Kristal 16 MHz. satu sensor SRF05 memerlukan 2 port, satu untuk Trigger dan satunya untuk Echo. Mengenai prinsip kerja sensor SRF05 telah kita bahas pada atrikel sebelumnya “Ultrasonic Range Meter dengan SRF05″, silahkan baca dulu bagi yang belum tahu.
Total 8 Pin (4×2), sehingga PORTB sudah cukup kita gunakan. Rangkaian mikrokontroler dengan sensor SRF05 tampak pada gambar berikut :
Nah, software dibuat dengan BASCOM-AVR :
‘******************************************
$regfile = “m8535.dat”
$crystal = 16000000
Dim Flag As Bit , I As Byte
Dim Jarak As Word
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.2 , Db4 = Portc.4
Config Lcdpin = Pin , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Cursor Off
Cls
Lcd “4 Sensor Jarak”
Lowerline
Lcd “ SRF05 “
Wait 2
Cls
Lcd “S1= S2=”
Lowerline
Lcd “S3= S4=”
Ddrb = &B01010101
Config Timer1 = Timer , Prescale = 8
On Timer1 Jarak_over
Enable Interrupts ‘cm
‘————————
Do
Gosub Ukur_s1
Locate 1 , 4
Lcd Jarak ; ” “
Gosub Ukur_s2
Locate 1 , 12
Lcd Jarak ; ” “
Gosub Ukur_s3
Locate 2 , 4
Lcd Jarak ; ” “
Gosub Ukur_s4
Locate 2 , 12
Lcd Jarak ; ” “
Waitms 800
Loop
End
‘———————————
Ukur_s1:
Flag = 1
Waitus 100
Portb.0 = 1
Waitus 15
Portb.0 = 0
Waitus 100
Enable Timer1
Timer1 = 0
Bitwait Pinb.1 , Set
Start Timer1
While Flag = 1
If Pinb.1 = 0 Then
Stop Timer1
Jarak = Timer1
Flag = 0
End If
Wend ‘
Jarak = Jarak / 116
Return
‘———————————
Ukur_s2:
Flag = 1
Waitus 100
Portb.2 = 1
Waitus 15
Portb.2 = 0
Waitus 100
Enable Timer1
Timer1 = 0
Bitwait Pinb.3 , Set
Start Timer1
While Flag = 1
If Pinb.3 = 0 Then
Stop Timer1
Jarak = Timer1
Flag = 0
End If
Wend ‘
Jarak = Jarak / 116
Return
‘———————————
Ukur_s3:
Flag = 1
Waitus 100
Portb.4 = 1
Waitus 15
Portb.4 = 0
Waitus 100
Enable Timer1
Timer1 = 0
Bitwait Pinb.5 , Set
Start Timer1
While Flag = 1
If Pinb.5 = 0 Then
Stop Timer1
Jarak = Timer1
Flag = 0
End If
Wend ‘
Jarak = Jarak / 116
Return
‘———————————
Ukur_s4:
Flag = 1
Waitus 100
Portb.6 = 1
Waitus 15
Portb.6 = 0
Waitus 100
Enable Timer1
Timer1 = 0
Bitwait Pinb.7 , Set
Start Timer1
While Flag = 1
If Pinb.7 = 0 Then
Stop Timer1
Jarak = Timer1
Flag = 0
End If
Wend ‘
Jarak = Jarak / 116
Return
‘———————————
Jarak_over:
Flag = 0
Stop Timer1
Timer1 = 0
Jarak = 0
Return
Hasil percobaannya tampak pada gambar berikut :