ROBOT PEMINDAH BARANG SESUAI WARNA BARANG
kali ini saya ingin share mengenai tugas akhir yang telah saya buat dimana saya membuat sebuah simulasi robot pemindah barang sesuai warna barang secara otomatis dimana barang akan dipindahkan ketempat tujuan masing-masing sesuai warna barang yang di deteksi dengan mengikuti garis hitam, robot ini hanya dapat mengetahui warna dasar saja (RGB). pada robot ini menggunakan atmega32 sebagai pengontrol kerja keseluruhan dari robot ini. menggunakan 5 buah sensor garis untuk mendeteksi garis, menggunakan 3buah photodioda dan led RGB sebagai sensor warna, menggunakan driver motor l293D dan menggunakan motor gearbox 630rpm. untuk mekanik gripper menggunakan 3 buah servo s90
gambar perancangan robot
bagian gripper menggunakan bahan acrilic susu dengan ketebalan 3mm. penggeraknya menggunakan 3buah servo sg90 dimana 2 buah servo difungsikan untuk menjepit dan 1 buah servo digunakan untuk mengangkat dan menurunkan barang bawaan. design gripper sendiri saya buat dengan menggunakan software corel dikarenakan tempat cutting acrilic ditempat saya supportnya dengan software tersebut. penampakan gripper dapat dilihat pada gambar dibawah ini:
gambar gripper
untuk manuver dari pada robot ini saya menggunakan motor gearbox dengan kecepatan 630rpm yang saya beli di teman fb saya, saya beli motor plus rodanya langsung skitar kurang dari 200rb sepasang,, torsi motor gearbox ini lumayan kuat untuk menjalankan robot ini pada medan tanjakan, penampakannya bisa dilihat pada gambar dibawah ini
gambar penampakan motor + roda robot
selanjutnya mengenai skema saya akan share skema sensor pada robot ini menggunakan photodioda sebagai sensor garis untuk mendeteksi garis hitam dan sensor warna untuk mendeteksi warna barang, dimana sensor garis
berfungsi untuk mendeteksi garis hitam dari permukaan yang berada dibawah robot dimana nantinya sensor garis ini dapat mengasilkan logika
posisi dari robot terhadap garis tepat berada dibawah
robot. Logika
posisi yang dihasilkan oleh sensor garis ini kemudian akan dijadikan input ke
mikrokontroler pada robot untuk mengatur kedua motor untuk dapat robot tetap berada di tengah-tengah garis.
Pada sensor garis, komponen yang digunakan yaitu Photodiode sebagai pendeteksi garis
hitam dengan dasar putih yang menjadi jalur robot dan LED ( Light Emitting
Diode ) superbright sebagai pemancar cahaya ke lantai yang kemudian
dipantulkandan diterima oleh Photodiode. Rangkaian sensor garis pada robot ini menggunakan 5 buah sensor, dimana setiap sensor menggunakan
LED berwarna biru sebagai pemancar cahaya dan menggunakan photodiode sebagai
penerima. Rangkaian sensor garis ditunjukkan pada gambar dibawah ini:
skema rangkaian sensor garis
Pada rangkaian sensor
warna menggunakan 3 buah sensor,
dimana setiap sensor menggunakan 3 LED dengan warna yang berbeda diantaranya berwarna merah, hijau dan biru sebagai
pemancar cahaya dan menggunakan photodiode sebagai penerima. Rangkaian sensor
warna ditunjukkan pada gambar dibawah ini:
Rangkaian sensor warna
Masing-masing
photodiode akan di pasangkan dengan sebuah led, dengan warna LED yang berbeda-beda diantaranya LED merah, LED
biru dan LED hijau. Prinsip kerjanya adalah setiap LED akan memancarkan cahaya dimana cahaya tersebut
akan dipantulkan oleh object/benda di
depannya, besarnya intensitas cahaya setiap warna LED yang dipantulkan oleh
object tersebut akan berbeda-beda
tergantung dengan warna object
tersebut. Bila object berwarna merah
maka intensitas cahaya LED merah yang akan paling banyak dipantulkan
dibandingkan intensitas cahaya LED hijau ataupun biru, sehingga photodiode yang berdekatan dengan
LED merah akan mendapat
intensitas cahaya paling terang menyebabkan resistansi photodiode
berkurang sehingga drop tegangan di photodiode di led merah akan paling kecil ,
sebaliknya bila object berwarna hijau maka intensitas cahaya LED hijau yang
akan paling banyak dipantulkan dibandingkan intensitas cahaya LED merah ataupun
biru, sehingga photodiode yang berdekatan
dengan LED hijau akan mendapat
intensitas cahaya paling terang menyebabkan resistansi photodiode
berkurang sehingga drop tegangan di photodiode di led hijau akan paling kecil ,
begitu juga pada Photodioda yang dipasangkan dengan LED biru, bila object
berwarna biru maka intensitas cahaya LED biru yang akan paling banyak
dipantulkan dibandingkan intensitas cahaya LED hijau ataupun merah, sehingga photodiode yang berdekatan dengan
LED biru akan mendapat
intensitas cahaya paling terang menyebabkan resistansi photodiode
berkurang sehingga drop tegangan di photodiode di led biru akan paling kecil.
Dengan mengetahui perbandingan drop tegangan pada masing-masing photodiode maka
dapat ditentukan warna object yang didekatkan di depan sensor.
Selanjutnya Rangkaian
driver motor berfungsi sebagai pengontrol untuk mengatur arah putaran motor dan kecepatan
motor. Rangkaian driver motor pada tugas akhir ini menggunakan IC
L293D Rangkaian driver motor
ditunjukkan pada gambar dibawah ini:
Rangkaian driver motor
bim salabim dan ini finishing akhirnya dari robot ini,, hhee
foto robot setelah jadi
video beraksinya robot pemindah barang,, hihihi
PROGRAM DENGAN BASCOM AVR
$regfile = "m16def.dat"
$crystal = 16000000
Config Porta = Input
Config Portc = Output
'************************************ SWICTH ***********************************
Config Pinb.5 = Input
Config Pinb.6 = Input
Config Pinb.7 = Input
Tombol1 Alias Pinb.5
Tombol2 Alias Pinb.6
Tombol3 Alias Pinb.7
'******************************** PORT MOTOR ***********************************
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Kiri_a Alias Portd.3
Kiri_b Alias Portd.2
Kanan_a Alias Portd.7
Kanan_b Alias Portd.6
'*********************************** LED LCD ***********************************
Led_lcd Alias Portc.1
Reset Led_lcd
'********************************** TYPE DATA **********************************
Dim N_sensor As Integer
Dim Pv As Integer , Sensor(8) As Integer , Arah As Byte
Dim N As Byte , Z As Byte , Y As Byte
Dim Kepekaan As Integer , Kanan As Integer , Kiri As Integer ,
Dim Merah As Bit , Hijau As Bit , Biru As Bit
Declare Sub Belok_kanan
Declare Sub Belok_kiri
Declare Sub Lurus
Declare Sub Garis
Declare Sub Warna
Declare Sub Ambil_barang
Declare Sub Mearuh_barang
Declare Sub Setting_kepekaan
Declare Sub Get_adc
Declare Sub Menaruh_barang
Declare Sub Balik_kanan
Declare Sub Tombol_ke_menu
Declare Sub Renggang
Declare Sub Jepit
Declare Sub Angkat
Declare Sub Turun
Declare Sub Siaga
'****************************** CONFIGURASI PORT LCD *******
'==============================================================
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
Config Lcd = 16 * 2 : Cursor Off
'************************* CONFIGURASI ADC *****************
Config Adc = Single , Prescaler = Auto
'****************************** CONFIGURASI PWM ************
Config Timer1 = Pwm , Pwm = 8 , Prescale = 256 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
'************************************** servo *******************************
'==============================================================
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Servos = 3 , Servo1 = Portb.1 , Servo2 = Portb.0 , Servo3 = Portb.2 , Reload = 20
Enable Interrupts
'================================================
'MENU 1
' ===============================================
Readeeprom Kepekaan , 5
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 0
Pwm1b = 0
Call Jepit
Call Angkat
Kiri = 0
Cls
'Locate 1 , 1 : Lcd " BEBIT DE ARTHA "
'Locate 2 , 1 : Lcd " 1115313016 "
'Wait 3
Menu:
Cls
Locate 1 , 4 : Lcd "<< MENU >>"
Lowerline
Lcd "SET ADC GO!!!"
' Do
'Call Turun
' Call Jepit
'Wait 2
'Call Angkat
' Call Renggang
' Wait 2
' Loop
Do
If Tombol1 = 0 Then
Bitwait Tombol1 , Set
Waitms 100
Call Setting_kepekaan
End If
If Tombol2 = 0 Then
Bitwait Tombol2 , Set
Waitms 300
Cls
Locate 1 , 1 : Lcd "<< CEK SENSOR >>"
Lowerline
Lcd "WARNA GARIS"
Do
If Tombol1 = 0 Then
Bitwait Tombol1 , Set
Waitms 300
Call Warna
End If
If Tombol3 = 0 Then
Bitwait Tombol3 , Set
Waitms 300
Call Garis
End If
Loop
End If
If Tombol3 = 0 Then
Bitwait Tombol3 , Set
Cls
Locate 1 , 4 : Lcd "GO.....>>"
Wait 1
Call Siaga
Locate 1 , 1 : Lcd "MENUNGGU BARANG"
Gosub Menunggu_barang
Call Ambil_barang
Wait 1
Cls
Locate 1 , 2 : Lcd "JALANKAN MISI "
Wait 1
Set Led_lcd
Cls
Call Balik_kanan
Goto Tujuan
End If
Loop
'================================================
'setting nilai kepekaan
'================================================
Sub Setting_kepekaan
Cls
Locate 1 , 4 : Lcd "KEPEKAAN "
Do
If Tombol1 = 0 Then
Cls
Writeeeprom Kepekaan , 5
Lcd " SAVING..!! "
Waitms 200
Cls
Goto Menu
End If
If Tombol2 = 0 Then
Waitms 40
Kepekaan = Kepekaan - 5
If Kepekaan <= 0 Then
Kepekaan = 0
End If
End If
If Tombol3 = 0 Then
Waitms 40
Kepekaan = Kepekaan + 5
If Kepekaan > 1023 Then
Kepekaan = 1023
End If
End If
Locate 2 , 6 : Lcd Kepekaan ; " "
Loop
End Sub
'================================================
'BACA NILAI SENSOR
'================================================
Sub Garis
Cls
Do
Gosub Get_adc
Locate 2 , 1 : Lcd Sensor(5) ; " "
Locate 1 , 1 : Lcd Sensor(4) ; " "
Locate 1 , 7 : Lcd Sensor(3) ; " "
Locate 1 , 13 : Lcd Sensor(2) ; " "
Locate 2 , 13 : Lcd Sensor(1) ; " "
Waitms 50
Cursor Off
Call Tombol_ke_menu
Loop
End Sub
Sub Warna
Call Siaga
Cls
Do
Gosub Get_adc
Locate 2 , 1 : Lcd Sensor(6) ; " "
Locate 2 , 7 : Lcd Sensor(7) ; " "
Locate 2 , 13 : Lcd Sensor(8) ; " "
If Sensor(6) <= 100 And Sensor(7) => 250 And Sensor(8) => 300 Then
Locate 1 , 1 : Lcd "MERAH "
Elseif Sensor(6) => 550 And Sensor(7) <= 100 And Sensor(8) => 250 Then
Locate 1 , 1 : Lcd " HIJAU "
Elseif Sensor(6) => 320 And Sensor(7) => 150 And Sensor(8) < 100 Then
Locate 1 , 1 : Lcd " BIRU"
Else
Locate 1 , 1 : Lcd " "
End If
Call Tombol_ke_menu
Waitms 50
Cursor Off
Loop
End Sub
'================================================
'BACA ADC
'================================================
Get_adc:
For Z = 1 To 8
Y = Z - 1
Start Adc
Sensor(z) = Getadc(y)
Next Z
Return
'================================================
'MAPPING NILAI SENSOR
'================================================
Baca_sensor:
Gosub Get_adc
N_sensor = 0
If Sensor(1) >= Kepekaan Then
N_sensor = N_sensor + 1
End If
If Sensor(2) >= Kepekaan Then
N_sensor = N_sensor + 2
End If
If Sensor(3) >= Kepekaan Then
N_sensor = N_sensor + 4
End If
If Sensor(4) >= Kepekaan Then
N_sensor = N_sensor + 8
End If
If Sensor(5) >= Kepekaan Then
N_sensor = N_sensor + 16
End If
Select Case N_sensor '1 , 2 , 4 , 8 , 16
Case 1 : Pv = 4
Case 3 : Pv = 2
Case 2 : Pv = 2
Case 6 : Pv = 1
Case 4 : Pv = 0
Case 12 : Pv = -1
Case 8 : Pv = -2
Case 24 : Pv = -3
Case 16 : Pv = -4
End Select
Return
'================================================
'program deteksi lintasan garis
'================================================
Jalan:
Gosub Baca_sensor
If N_sensor = 0 Then
If Pv < 0 Then Pv = -5
If Pv > 0 Then Pv = 5
End If
If Pv = 0 Then
Kanan = 80 '34
Kiri = 80 '34
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 1 Then
Kanan = 95 '40
Kiri = 65 '28
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 2 Then
Kanan = 110 '46
Kiri = 50 '22
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 3 Then
Kanan = 125 '52
Kiri = 35 '16
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 4 Then
Kanan = 140 '58
Kiri = 20 '10
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 5 Then
Kanan = 155 '60
Kiri = 0
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -1 Then
Kiri = 95 '40
Kanan = 65 '28
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -2 Then
Kiri = 110 '46
Kanan = 50 '22
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -3 Then
Kiri = 125 '52
Kanan = 35 '16
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -4 Then
Kiri = 140 '58
Kanan = 20 '10
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -5 Then
Kiri = 155 '60
Kanan = 0
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
Pwm1a = Kanan
Pwm1b = Kiri
Call Tombol_ke_menu
Return
'================================================
''program utama
'================================================
Awal:
Do
Gosub Jalan
If Sensor(1) >= Kepekaan And Sensor(2) >= Kepekaan And Sensor(3) >= Kepekaan And Sensor(4) >= Kepekaan And Sensor(5) >= Kepekaan Then
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 220
Kiri_a = 0
Kanan_a = 0
Kiri_b = 1
Kanan_b = 1
Pwm1a = 80
Pwm1b = 80
Waitms 80
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 0
Pwm1b = 0
Call Get_adc
If Sensor(1) <= Kepekaan And Sensor(2) <= Kepekaan And Sensor(3) <= Kepekaan And Sensor(4) <= Kepekaan And Sensor(5) <= Kepekaan Then
Reset Led_lcd
Call Siaga
Locate 1 , 1 : Lcd "MENUNGGU BARANG"
Gosub Menunggu_barang
Call Ambil_barang
Wait 1
Cls
Locate 1 , 1 : Lcd "JALANKAN MISI "
Wait 1
Set Led_lcd
Cls
Call Balik_kanan
Goto Tujuan
'========= taruh barang
Else
If Merah = 1 Then Belok_kanan
If Hijau = 1 Then Lurus
If Biru = 1 Then Belok_kiri
'========== belok sesuai warna
End If
End If
Loop
'===================================================
'===================================================
Menunggu_barang:
Do
Call Get_adc
If Sensor(6) <= 100 And Sensor(7) => 250 And Sensor(8) => 300 Then
Merah = 1
Biru = 0
Hijau = 0
Cls
Locate 1 , 1 : Lcd "<< TERDETEKSI >>"
Locate 2 , 5 : Lcd " MERAH"
Wait 1
Exit Do
End If
If Sensor(6) => 550 And Sensor(7) <= 100 And Sensor(8) => 250then
Merah = 0
Biru = 0
Hijau = 1
Cls
Locate 1 , 1 : Lcd "<< TERDETEKSI >>"
Locate 2 , 5 : Lcd " HIJAU"
Wait 1
Exit Do
End If
If Sensor(6) => 320 And Sensor(7) => 150 And Sensor(8) < 100 Then
Merah = 0
Biru = 1
Hijau = 0
Cls
Locate 1 , 1 : Lcd "<< TERDETEKSI >>"
Locate 2 , 6 : Lcd " BIRU"
Wait 1
Exit Do
End If
Call Tombol_ke_menu
Loop
Return
'======================================================
'======================================================
Tujuan:
Do
Gosub Jalan
If Sensor(1) >= Kepekaan And Sensor(2) >= Kepekaan And Sensor(3) >= Kepekaan And Sensor(4) >= Kepekaan And Sensor(5) >= Kepekaan Then
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 220
Kiri_a = 0
Kanan_a = 0
Kiri_b = 1
Kanan_b = 1
Pwm1a = 80
Pwm1b = 80
Waitms 80
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 0
Pwm1b = 0
Call Get_adc
If Sensor(1) <= Kepekaan And Sensor(2) <= Kepekaan And Sensor(3) <= Kepekaan And Sensor(4) <= Kepekaan And Sensor(5) <= Kepekaan Then
Reset Led_lcd
Locate 1 , 2 : Lcd " MENARUH BARANG"
Wait 1
Call Menaruh_barang
Cls
Locate 1 , 3 : Lcd "MISI SELESAI"
Wait 1
Cls
Set Led_lcd
Call Balik_kanan
Goto Awal
'========= taruh barang
Else
If Merah = 1 Then Belok_kiri
If Hijau = 1 Then Lurus
If Biru = 1 Then Belok_kanan
'========== belok sesuai warna
End If
End If
Loop
Sub Ambil_barang
Call Jepit
Wait 1
Call Angkat
End Sub
Sub Menaruh_barang:
Call Turun
Wait 1
Call Renggang
Wait 1
Call Angkat
Wait 1
Call Jepit
End Sub
Sub Siaga
Call Renggang
Wait 1
Call Turun
End Sub
Sub Belok_kanan
Kiri_a = 1
Kanan_a = 0
Kiri_b = 0
Kanan_b = 1
Pwm1a = 80
Pwm1b = 80
While Sensor(5) < Kepekaan
Gosub Get_adc
Wend
While Sensor(1) < Kepekaan
Gosub Get_adc
Wend
While Sensor(2) < Kepekaan
Gosub Get_adc
Wend
Kiri_a = 0
Kanan_a = 1
Kiri_b = 1
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 40
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
End Sub
Sub Belok_kiri
Kiri_a = 0
Kanan_a = 1
Kiri_b = 1
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
While Sensor(1) < Kepekaan
Gosub Get_adc
Wend
While Sensor(5) < Kepekaan
Gosub Get_adc
Wend
While Sensor(4) < Kepekaan
Gosub Get_adc
Wend
Kiri_a = 1
Kanan_a = 0
Kiri_b = 0
Kanan_b = 1
Pwm1a = 80
Pwm1b = 80
Waitms 40
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
End Sub
Sub Lurus
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 30
End Sub
Sub Balik_kanan
Kiri_a = 1
Kanan_a = 0
Kiri_b = 0
Kanan_b = 1
Pwm1a = 80 '45
Pwm1b = 80 '45
While Sensor(1) < Kepekaan
Gosub Get_adc
Wend
While Sensor(2) < Kepekaan
Gosub Get_adc
Wend
Kiri_a = 0
Kanan_a = 1
Kiri_b = 1
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 40
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
End Sub
Sub Tombol_ke_menu
If Tombol1 = 0 Then
Bitwait Tombol1 , Set
Reset Led_lcd
Waitms 100
Pwm1a = 0
Pwm1b = 0
Goto Menu
End If
End Sub
Sub Renggang
Servo(2) = 59 ' kiri
Servo(3) = 55 '59
End Sub
Sub Angkat
Servo(1) = 87
End Sub
Sub Turun
Servo(1) = 52 '47
End Sub
Sub Jepit
Servo(2) = 45
Servo(3) = 75
End Sub
$crystal = 16000000
Config Porta = Input
Config Portc = Output
'************************************ SWICTH ***********************************
Config Pinb.5 = Input
Config Pinb.6 = Input
Config Pinb.7 = Input
Tombol1 Alias Pinb.5
Tombol2 Alias Pinb.6
Tombol3 Alias Pinb.7
'******************************** PORT MOTOR ***********************************
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Kiri_a Alias Portd.3
Kiri_b Alias Portd.2
Kanan_a Alias Portd.7
Kanan_b Alias Portd.6
'*********************************** LED LCD ***********************************
Led_lcd Alias Portc.1
Reset Led_lcd
'********************************** TYPE DATA **********************************
Dim N_sensor As Integer
Dim Pv As Integer , Sensor(8) As Integer , Arah As Byte
Dim N As Byte , Z As Byte , Y As Byte
Dim Kepekaan As Integer , Kanan As Integer , Kiri As Integer ,
Dim Merah As Bit , Hijau As Bit , Biru As Bit
Declare Sub Belok_kanan
Declare Sub Belok_kiri
Declare Sub Lurus
Declare Sub Garis
Declare Sub Warna
Declare Sub Ambil_barang
Declare Sub Mearuh_barang
Declare Sub Setting_kepekaan
Declare Sub Get_adc
Declare Sub Menaruh_barang
Declare Sub Balik_kanan
Declare Sub Tombol_ke_menu
Declare Sub Renggang
Declare Sub Jepit
Declare Sub Angkat
Declare Sub Turun
Declare Sub Siaga
'****************************** CONFIGURASI PORT LCD *******
'==============================================================
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
Config Lcd = 16 * 2 : Cursor Off
'************************* CONFIGURASI ADC *****************
Config Adc = Single , Prescaler = Auto
'****************************** CONFIGURASI PWM ************
Config Timer1 = Pwm , Pwm = 8 , Prescale = 256 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up
'************************************** servo *******************************
'==============================================================
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Servos = 3 , Servo1 = Portb.1 , Servo2 = Portb.0 , Servo3 = Portb.2 , Reload = 20
Enable Interrupts
'================================================
'MENU 1
' ===============================================
Readeeprom Kepekaan , 5
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 0
Pwm1b = 0
Call Jepit
Call Angkat
Kiri = 0
Cls
'Locate 1 , 1 : Lcd " BEBIT DE ARTHA "
'Locate 2 , 1 : Lcd " 1115313016 "
'Wait 3
Menu:
Cls
Locate 1 , 4 : Lcd "<< MENU >>"
Lowerline
Lcd "SET ADC GO!!!"
' Do
'Call Turun
' Call Jepit
'Wait 2
'Call Angkat
' Call Renggang
' Wait 2
' Loop
Do
If Tombol1 = 0 Then
Bitwait Tombol1 , Set
Waitms 100
Call Setting_kepekaan
End If
If Tombol2 = 0 Then
Bitwait Tombol2 , Set
Waitms 300
Cls
Locate 1 , 1 : Lcd "<< CEK SENSOR >>"
Lowerline
Lcd "WARNA GARIS"
Do
If Tombol1 = 0 Then
Bitwait Tombol1 , Set
Waitms 300
Call Warna
End If
If Tombol3 = 0 Then
Bitwait Tombol3 , Set
Waitms 300
Call Garis
End If
Loop
End If
If Tombol3 = 0 Then
Bitwait Tombol3 , Set
Cls
Locate 1 , 4 : Lcd "GO.....>>"
Wait 1
Call Siaga
Locate 1 , 1 : Lcd "MENUNGGU BARANG"
Gosub Menunggu_barang
Call Ambil_barang
Wait 1
Cls
Locate 1 , 2 : Lcd "JALANKAN MISI "
Wait 1
Set Led_lcd
Cls
Call Balik_kanan
Goto Tujuan
End If
Loop
'================================================
'setting nilai kepekaan
'================================================
Sub Setting_kepekaan
Cls
Locate 1 , 4 : Lcd "KEPEKAAN "
Do
If Tombol1 = 0 Then
Cls
Writeeeprom Kepekaan , 5
Lcd " SAVING..!! "
Waitms 200
Cls
Goto Menu
End If
If Tombol2 = 0 Then
Waitms 40
Kepekaan = Kepekaan - 5
If Kepekaan <= 0 Then
Kepekaan = 0
End If
End If
If Tombol3 = 0 Then
Waitms 40
Kepekaan = Kepekaan + 5
If Kepekaan > 1023 Then
Kepekaan = 1023
End If
End If
Locate 2 , 6 : Lcd Kepekaan ; " "
Loop
End Sub
'================================================
'BACA NILAI SENSOR
'================================================
Sub Garis
Cls
Do
Gosub Get_adc
Locate 2 , 1 : Lcd Sensor(5) ; " "
Locate 1 , 1 : Lcd Sensor(4) ; " "
Locate 1 , 7 : Lcd Sensor(3) ; " "
Locate 1 , 13 : Lcd Sensor(2) ; " "
Locate 2 , 13 : Lcd Sensor(1) ; " "
Waitms 50
Cursor Off
Call Tombol_ke_menu
Loop
End Sub
Sub Warna
Call Siaga
Cls
Do
Gosub Get_adc
Locate 2 , 1 : Lcd Sensor(6) ; " "
Locate 2 , 7 : Lcd Sensor(7) ; " "
Locate 2 , 13 : Lcd Sensor(8) ; " "
If Sensor(6) <= 100 And Sensor(7) => 250 And Sensor(8) => 300 Then
Locate 1 , 1 : Lcd "MERAH "
Elseif Sensor(6) => 550 And Sensor(7) <= 100 And Sensor(8) => 250 Then
Locate 1 , 1 : Lcd " HIJAU "
Elseif Sensor(6) => 320 And Sensor(7) => 150 And Sensor(8) < 100 Then
Locate 1 , 1 : Lcd " BIRU"
Else
Locate 1 , 1 : Lcd " "
End If
Call Tombol_ke_menu
Waitms 50
Cursor Off
Loop
End Sub
'================================================
'BACA ADC
'================================================
Get_adc:
For Z = 1 To 8
Y = Z - 1
Start Adc
Sensor(z) = Getadc(y)
Next Z
Return
'================================================
'MAPPING NILAI SENSOR
'================================================
Baca_sensor:
Gosub Get_adc
N_sensor = 0
If Sensor(1) >= Kepekaan Then
N_sensor = N_sensor + 1
End If
If Sensor(2) >= Kepekaan Then
N_sensor = N_sensor + 2
End If
If Sensor(3) >= Kepekaan Then
N_sensor = N_sensor + 4
End If
If Sensor(4) >= Kepekaan Then
N_sensor = N_sensor + 8
End If
If Sensor(5) >= Kepekaan Then
N_sensor = N_sensor + 16
End If
Select Case N_sensor '1 , 2 , 4 , 8 , 16
Case 1 : Pv = 4
Case 3 : Pv = 2
Case 2 : Pv = 2
Case 6 : Pv = 1
Case 4 : Pv = 0
Case 12 : Pv = -1
Case 8 : Pv = -2
Case 24 : Pv = -3
Case 16 : Pv = -4
End Select
Return
'================================================
'program deteksi lintasan garis
'================================================
Jalan:
Gosub Baca_sensor
If N_sensor = 0 Then
If Pv < 0 Then Pv = -5
If Pv > 0 Then Pv = 5
End If
If Pv = 0 Then
Kanan = 80 '34
Kiri = 80 '34
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 1 Then
Kanan = 95 '40
Kiri = 65 '28
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 2 Then
Kanan = 110 '46
Kiri = 50 '22
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 3 Then
Kanan = 125 '52
Kiri = 35 '16
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 4 Then
Kanan = 140 '58
Kiri = 20 '10
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = 5 Then
Kanan = 155 '60
Kiri = 0
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -1 Then
Kiri = 95 '40
Kanan = 65 '28
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -2 Then
Kiri = 110 '46
Kanan = 50 '22
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -3 Then
Kiri = 125 '52
Kanan = 35 '16
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -4 Then
Kiri = 140 '58
Kanan = 20 '10
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
If Pv = -5 Then
Kiri = 155 '60
Kanan = 0
Kanan_a = 1
Kanan_b = 0
Kiri_a = 1
Kiri_b = 0
End If
Pwm1a = Kanan
Pwm1b = Kiri
Call Tombol_ke_menu
Return
'================================================
''program utama
'================================================
Awal:
Do
Gosub Jalan
If Sensor(1) >= Kepekaan And Sensor(2) >= Kepekaan And Sensor(3) >= Kepekaan And Sensor(4) >= Kepekaan And Sensor(5) >= Kepekaan Then
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 220
Kiri_a = 0
Kanan_a = 0
Kiri_b = 1
Kanan_b = 1
Pwm1a = 80
Pwm1b = 80
Waitms 80
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 0
Pwm1b = 0
Call Get_adc
If Sensor(1) <= Kepekaan And Sensor(2) <= Kepekaan And Sensor(3) <= Kepekaan And Sensor(4) <= Kepekaan And Sensor(5) <= Kepekaan Then
Reset Led_lcd
Call Siaga
Locate 1 , 1 : Lcd "MENUNGGU BARANG"
Gosub Menunggu_barang
Call Ambil_barang
Wait 1
Cls
Locate 1 , 1 : Lcd "JALANKAN MISI "
Wait 1
Set Led_lcd
Cls
Call Balik_kanan
Goto Tujuan
'========= taruh barang
Else
If Merah = 1 Then Belok_kanan
If Hijau = 1 Then Lurus
If Biru = 1 Then Belok_kiri
'========== belok sesuai warna
End If
End If
Loop
'===================================================
'===================================================
Menunggu_barang:
Do
Call Get_adc
If Sensor(6) <= 100 And Sensor(7) => 250 And Sensor(8) => 300 Then
Merah = 1
Biru = 0
Hijau = 0
Cls
Locate 1 , 1 : Lcd "<< TERDETEKSI >>"
Locate 2 , 5 : Lcd " MERAH"
Wait 1
Exit Do
End If
If Sensor(6) => 550 And Sensor(7) <= 100 And Sensor(8) => 250then
Merah = 0
Biru = 0
Hijau = 1
Cls
Locate 1 , 1 : Lcd "<< TERDETEKSI >>"
Locate 2 , 5 : Lcd " HIJAU"
Wait 1
Exit Do
End If
If Sensor(6) => 320 And Sensor(7) => 150 And Sensor(8) < 100 Then
Merah = 0
Biru = 1
Hijau = 0
Cls
Locate 1 , 1 : Lcd "<< TERDETEKSI >>"
Locate 2 , 6 : Lcd " BIRU"
Wait 1
Exit Do
End If
Call Tombol_ke_menu
Loop
Return
'======================================================
'======================================================
Tujuan:
Do
Gosub Jalan
If Sensor(1) >= Kepekaan And Sensor(2) >= Kepekaan And Sensor(3) >= Kepekaan And Sensor(4) >= Kepekaan And Sensor(5) >= Kepekaan Then
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 220
Kiri_a = 0
Kanan_a = 0
Kiri_b = 1
Kanan_b = 1
Pwm1a = 80
Pwm1b = 80
Waitms 80
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 0
Pwm1b = 0
Call Get_adc
If Sensor(1) <= Kepekaan And Sensor(2) <= Kepekaan And Sensor(3) <= Kepekaan And Sensor(4) <= Kepekaan And Sensor(5) <= Kepekaan Then
Reset Led_lcd
Locate 1 , 2 : Lcd " MENARUH BARANG"
Wait 1
Call Menaruh_barang
Cls
Locate 1 , 3 : Lcd "MISI SELESAI"
Wait 1
Cls
Set Led_lcd
Call Balik_kanan
Goto Awal
'========= taruh barang
Else
If Merah = 1 Then Belok_kiri
If Hijau = 1 Then Lurus
If Biru = 1 Then Belok_kanan
'========== belok sesuai warna
End If
End If
Loop
Sub Ambil_barang
Call Jepit
Wait 1
Call Angkat
End Sub
Sub Menaruh_barang:
Call Turun
Wait 1
Call Renggang
Wait 1
Call Angkat
Wait 1
Call Jepit
End Sub
Sub Siaga
Call Renggang
Wait 1
Call Turun
End Sub
Sub Belok_kanan
Kiri_a = 1
Kanan_a = 0
Kiri_b = 0
Kanan_b = 1
Pwm1a = 80
Pwm1b = 80
While Sensor(5) < Kepekaan
Gosub Get_adc
Wend
While Sensor(1) < Kepekaan
Gosub Get_adc
Wend
While Sensor(2) < Kepekaan
Gosub Get_adc
Wend
Kiri_a = 0
Kanan_a = 1
Kiri_b = 1
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 40
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
End Sub
Sub Belok_kiri
Kiri_a = 0
Kanan_a = 1
Kiri_b = 1
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
While Sensor(1) < Kepekaan
Gosub Get_adc
Wend
While Sensor(5) < Kepekaan
Gosub Get_adc
Wend
While Sensor(4) < Kepekaan
Gosub Get_adc
Wend
Kiri_a = 1
Kanan_a = 0
Kiri_b = 0
Kanan_b = 1
Pwm1a = 80
Pwm1b = 80
Waitms 40
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
End Sub
Sub Lurus
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 30
End Sub
Sub Balik_kanan
Kiri_a = 1
Kanan_a = 0
Kiri_b = 0
Kanan_b = 1
Pwm1a = 80 '45
Pwm1b = 80 '45
While Sensor(1) < Kepekaan
Gosub Get_adc
Wend
While Sensor(2) < Kepekaan
Gosub Get_adc
Wend
Kiri_a = 0
Kanan_a = 1
Kiri_b = 1
Kanan_b = 0
Pwm1a = 80
Pwm1b = 80
Waitms 40
Kiri_a = 1
Kanan_a = 1
Kiri_b = 0
Kanan_b = 0
End Sub
Sub Tombol_ke_menu
If Tombol1 = 0 Then
Bitwait Tombol1 , Set
Reset Led_lcd
Waitms 100
Pwm1a = 0
Pwm1b = 0
Goto Menu
End If
End Sub
Sub Renggang
Servo(2) = 59 ' kiri
Servo(3) = 55 '59
End Sub
Sub Angkat
Servo(1) = 87
End Sub
Sub Turun
Servo(1) = 52 '47
End Sub
Sub Jepit
Servo(2) = 45
Servo(3) = 75
End Sub
mas saya boleh minta program na ga sama desai na? hehe
ReplyDeleteyurneyz@gmail.com
saya cuma share segini saja mas,, nnti mas bisa jadikan referens untuk mengembangkannyai,, untuk program dan design mas bisa belajar buat sendiri dengan kreatifitasnya mas :D
Deletemas saya mau nnyak mas rangkaian sensor warna nya berdasar kan led warna ya mas
ReplyDeleteterima kasih mas.....
iya mas,, nnti membandingkan sinar pantulan cahaya led rgb,,
Deleteyang rangkaian motor servonya boleh dishare gak mas???
ReplyDeletemas sensor warnanya semuanya ada 3 sensor kan mas setip sensor mempunyai pin masing-masing mas, jadi setiap pin dihubungkan ke port mana ya mas untuk ARDUINO UNO R3 mas
ReplyDeletebutuh bantuan mas
untuk tugas skripsi mas.......
sambungin ke pin analog mas<,, A0 sampe A5 bisa d pake 3 pin
Deletemas kalaw dari rangkaian mas yg di atas sensor warnanya dari no 1, 2, 3, 4, 5,
ReplyDeleteno 1 GND No 2 Vcc No 3 Vcc+5 Volt jadi No 4 Dan 5 masuk ke pin Analog A0 sma A1 ya mas.....
mohon bantuan nya mas buat tugas skripsi mas....??
susunannya itu,, no 1 ground, 2 vcc 5v,, no 3 sampe no 5 masuk ke pin ADC mas,, make 3buah photodioda untuk deteksi pantulan masing2 dari cahaya LED merah, biru, dan hijau
DeleteMas Boleh di share code program nya gak mas ...
ReplyDeleteke Email saya mas...?
vinogbastian748@gmail.com
terima kasih mas......
mas, apakah robotnya dijual jadi?
ReplyDeletedi jual mas
DeleteThis comment has been removed by the author.
ReplyDeletebisa inbox d facebook, bbm 74827389, hp 085737688250
Deletemas mau tanya, kalo robot pemindah berdasarkan warna, tapi yang statis ada tutorialnya gak??
ReplyDeletekeren robotnya!! bisa dishare gak mas desian untuk grippernya? saya mau nyoba buat tapi bingung harus dari mana mulainya
ReplyDeletekeren. trims mas buat referensi tugas akhir.
ReplyDeletehahaha
ReplyDeletemas saya barubelajar perakiitan robot,
ReplyDeletemohon bantuannya untuk pembuatannya bahan apa saja yang harus di beli
mas aku dah buat boleh minta share programnya gak ?
ReplyDeleteini email aku mas edwinfadillah.1987@gmail.com
boleh minta program arduinonya gak mas buat tugas akhir
ReplyDeletearifinmei.sega@yahoo.com
bisa minta program arduino nya gak gan?kalau bisa mohon direspon..dan akan segera saya tuliskan alamat email saya..thanks
ReplyDeletewah,, ini gak pake prog arduino mas
Deletesaya mahasiswa tingkat akhir teknik informatika.
ReplyDeletemaaf mas numpang share dan saya jadikan referensi data di web mas yg ini.
kendala mas dalam pembuatan dari awal sampai akhir apa saja.
jika boleh tau, biaya mas yg di keluarkan sampai selesai sampai berapa mas.
mas boleh jawab di comment saya atau di email saya xcyber_rahmanz@yahoo.com
tolong bantuannya.
terima kasih mas
Mas boleh share program dan codenya untuk bantu tubes saya ke email saya?
ReplyDeletealexandersihombing17@gmail.com
Terimakasih mas
mas saya mw tutor line follower dan beberapa wejangan tentang robot.
ReplyDeleteuntuk tugas akhir.
saya boleh minta kontak mas nya gak?
untuk lebih lanjut kita bisa omongin. hehehe
makasih ya. saya mohon bantuannya
Mas. Bisa minta programnya gk mas ? Kirim ke email saya rudytrisaputra97@gmail.com
ReplyDeletefacebook saya: https://web.facebook.com/DBEBIT
ReplyDeletehp:081238355725
mas sensor garisnya rangkai sendiri atau beli modul sensor garis?
ReplyDeleteRakit sendiri mas... Semuanya rakit sendiri
DeleteBang mau tanya itu make algoritma apa ajah yah bang?
ReplyDeleteMas ada sismin? Sama pin dari sensor dan drivernya harus masuk ke pin berapa di atmega?
ReplyDeletePin pin yang digunakan bisa dilihat dari programnya mas,,hhee
DeleteBang mau tanya, terus itu program nya ditulisnya semuanya yaa bang? Dari awal sampai akhir? Betul gak bang tulis semuanya program nya šš
ReplyDeletebang bisa minta penjelasan alat dan rangkaiannya gak? mikrokontrolernya pakai apa bang?
ReplyDelete