ROBOTICS UNIVERSITY. Diberdayakan oleh Blogger.

Program Robot4 ON/OFF Dengan PWM

robotics-university.com | Dalam tulisan kali ini, saya akan memberikan contoh program mikrokontroler pengendalian robot4. Bahasa pemrograman yang saya gunakan adalah bahasa BASIC menggunakan software Integrated Development Environment (IDE) BASCOM-AVR. Sedangkan teknik pengendalian yang saya gunakan adalah teknik pengendalian On/Off dengan membangkitkan sinyal pulse width modulation (PWM) untuk mengatur kecepatan putar motor DC (roda robot4). Berikut contoh program tersebut:

' -----------------------------------------------
' Programmer  : Taufiq D.S. Suyadhi
' Teknik      : Pengendalian ON/OFF dengan PWM
' Company     : CH electronics
' Website     : www.circuits-home.com
'------------------------------------------------

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

Dim Sensor As Byte

Config Porta = Input
Config Portc = Output
Config Portd = Output
Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up

Motor1 Alias Portc.0                       ' motor kanan
Motor2 Alias Portc.1

Motor3 Alias Portc.2                       ' motor kiri
Motor4 Alias Portc.3

'prototype sub-rutin
'--------------------
Declare Sub Pwm(byval Kiri As Integer , Byval Kanan As Integer)
Declare Sub Maju()
Declare Sub Terus()
Declare Sub Kiri1()
Declare Sub Kiri2()
Declare Sub Kiri3()
Declare Sub Kanan1()
Declare Sub Kanan2()
Declare Sub Kanan3()
Declare Sub Mundur()
Declare Sub Lanjut()

'Program utama
'-------------
Do
   Sensor = Pina
   Select Case Sensor

      Case &B00000000 : Call Terus()
      Case &B11100111 : Call Maju()

      Case &B11110111 : Call Terus()
      Case &B11110011 : Call Lanjut()
      Case &B11111011 : Call Lanjut()
      Case &B11111001 : Call Kanan1()
      Case &B11111101 : Call Kanan1()
      Case &B11111100 : Call Kanan2()
      Case &B11111110 : Call Kanan3()
      Case &B11111000 : Call Kanan2()
      Case &B11110000 : Call Kanan2()
      Case &B11100000 : Call Kanan2()

      Case &B11101111 : Call Terus()
      Case &B11001111 : Call Lanjut()
      Case &B11011111 : Call Lanjut()
      Case &B10011111 : Call Kiri1()
      Case &B10111111 : Call Kiri1()
      Case &B00111111 : Call Kiri2()
      Case &B01111111 : Call Kiri3()
      Case &B00011111 : Call Kiri2()
      Case &B00001111 : Call Kiri2()
      Case &B00000111 : Call Kiri2()

      Case &B11111111 : Call Mundur()

      Case &B10001111 : Call Lanjut()
      Case &B11000111 : Call Lanjut()
      Case &B11100011 : Call Lanjut()
      Case &B11110001 : Call Lanjut()

      Case &B10000111 : Call Lanjut()
      Case &B11000011 : Call Lanjut()
      Case &B11100001 : Call Lanjut()

      Case &B10000011 : Call Lanjut()
      Case &B11000001 : Call Lanjut()

   End Select
Loop
End



'---------------------------------
Sub Maju()
      Motor1 = 0
      Motor2 = 1
      Motor3 = 0
      Motor4 = 1
      Call Pwm(130 , 130)
End Sub

'----------------------------------
Sub Terus()
      Motor1 = 0
      Motor2 = 1
      Motor3 = 0
      Motor4 = 1
      Call Pwm(150 , 150)
End Sub

'----------------------------------
Sub Lanjut()
      Motor1 = 0
      Motor2 = 1
      Motor3 = 0
      Motor4 = 1
      Call Pwm(160 , 160)
End Sub

'----------------------------------
Sub Mundur()
      Motor1 = 1
      Motor2 = 0
      Motor3 = 1
      Motor4 = 0
      Call Pwm(150 , 150)
End Sub

'------------>>RIGHT<<-------------
Sub Kanan1()
      Motor1 = 0
      Motor2 = 1
      Motor3 = 0
      Motor4 = 1
      Call Pwm(160 , 180)
End Sub

'----------------------------------
Sub Kanan2()
      Motor1 = 0
      Motor2 = 1
      Motor3 = 0
      Motor4 = 1
      Call Pwm(150 , 255)
End Sub

'----------------------------------
Sub Kanan3()
      Motor1 = 0
      Motor2 = 1
      Motor3 = 0
      Motor4 = 1
      Call Pwm(30 , 255)
End Sub

'------------>>LEFT<<--------------
Sub Kiri1()
      Motor1 = 0
      Motor2 = 1
      Motor3 = 0
      Motor4 = 1
      Call Pwm(180 , 160)
End Sub

'----------------------------------
Sub Kiri2()
      Motor1 = 0
      Motor2 = 1
      Motor3 = 0
      Motor4 = 1
      Call Pwm(255 , 150)
End Sub

'----------------------------------
Sub Kiri3()
      Motor1 = 0
      Motor2 = 1
      Motor3 = 0
      Motor4 = 1
      Call Pwm(255 , 30)
End Sub

'-------Sub-rutin PWM---------------
Sub Pwm(byval Kiri As Integer , Byval Kanan As Integer)
   Pwm1a = Kiri                          ' PORTD.5 (OC1A)
   Pwm1b = Kanan                         ' PORTD.4 (OC1B)
End Sub


Penjelasan program: 
Untuk memudahkan pemahaman terhadap contoh program di atas, berikut ini saya sajikan pembahasan program dengan cara menjelaskan setiap bagian struktur programnya. Semoga bermanfaat. 

1. Deklarasi library (pustaka) 

$regfile = "m32def.dat" => dapat diganti dengan seri ATmega8535/16 

Deklarasi ini berfungsi untuk memberitahukan kepada compiler (BASCOM-AVR) bahwa program yang kita buat akan diaplikasikan pada IC mikrokontroler ATMEGA32 (library-nya m32def.dat). Apabila ingin menggunakan seri mikrokontroler yang lain (misal ATMEGA8535/16) maka kita harus mengganti library-nya. Misalnya, 

ATMEGA16 => "m16def.dat" 
ATMEGA8535 => "8535def.dat" 

2. Deklarasi frekuensi kristal 

$crystal = 12000000 

Deklarasi ini berfungsi untuk memberitahukan kepada compiler bahwa frekuensi kristal yang kita gunakan adalah 12 MHz (12000.000 KHz). 

3. Penentuan dimensi/tipe data variabel 

Dim Sensor As Byte 

Apabila dalam program yang kita buat membutuhkan suatu variabel, maka kita harus menentukan tipe data (dimensi) dari variabel tersebut. Pemilihan tipe data ini hendaknya dilakukan secara tepat. 

4. Konfigurasi fitur mikrokontroler yang digunakan 

Config Porta = Input 
Config Portc = Output 
Config Portd = Output 
Config Timer1 = Pwm , Pwm = 8 , Prescale = 64 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up 

Dalam penggunaan IC mikrokontroler AVR. Untuk aktifasi suatu fiturnya, maka kita harus melakukan konfigurasi terhadap register-register yang berkaitan dengan fitur tersebut. Misalkan (dalam program ini) register PORT I/O seperti PORTA kita atur sebagai jalur Input, PORTC dan PORTD sebagai jalur Output, kemudian Timer-1 kita atur sebagai pembangkit sinyal PWM yang dikeluarkan pada pin/kaki PD.4 (OC1B) dan PD.5 (OC1A). 

5. Penggantian nama pin mikrokontroler 

Motor1 Alias Portc.0 ' motor kanan 
Motor2 Alias Portc.1 
Motor3 Alias Portc.2 ' motor kiri 
Motor4 Alias Portc.3 

Untuk memudahkan kita dalam mengingat suatu fungsi suatu pin/kaki mikrokontroler, maka terkadang kita juga perlu mengganti nama pin/kaki tersebut dengan nama lain (alias) sehingga dalam program ketika kita melakuakn pengaturan pin/kaki tersebut yang kita pakai adalah nama alias-nya. Seperti PORTC.0 kita ganti namanya dengan Motor1, dan seterusnya. 

6. Deklarasi sub-rutin (prototype fungsi) 

Declare Sub Pwm(byval Kiri As Integer , Byval Kanan As Integer) 
Declare Sub Maju() 
Declare Sub Terus() 
Declare Sub Kiri1() 
Declare Sub Kiri2() 
Declare Sub Kiri3() 
Declare Sub Kanan1() 
Declare Sub Kanan2() 
Declare Sub Kanan3() 
Declare Sub Mundur() 
Declare Sub Lanjut() 

Dalam bahasa BASIC, apabila kita akan membuat suatu sub-program atau sub-rutin yang sering kita gunakan (panggil) berulang kali maka kita harus melakukan deklarasi sub-rutin tersebut diawal program yang kita buat. 

7. Program utama 

Do 
Sensor = Pina 
Select Case Sensor 
Case &B00000000 : Call Terus() 
Case &B11100111 : Call Maju() 
Case &B11110111 : Call Terus() 
Case &B11110011 : Call Lanjut() 
Case &B11111011 : Call Lanjut() 
Case &B11111001 : Call Kanan1() 
Case &B11111101 : Call Kanan1() 
Case &B11111100 : Call Kanan2() 
Case &B11111110 : Call Kanan3() 
Case &B11111000 : Call Kanan2() 
Case &B11110000 : Call Kanan2() 
Case &B11100000 : Call Kanan2() 
Case &B11101111 : Call Terus() 
Case &B11001111 : Call Lanjut() 
Case &B11011111 : Call Lanjut() 
Case &B10011111 : Call Kiri1() 
Case &B10111111 : Call Kiri1() 
Case &B00111111 : Call Kiri2() 
Case &B01111111 : Call Kiri3() 
Case &B00011111 : Call Kiri2() 
Case &B00001111 : Call Kiri2() 
Case &B00000111 : Call Kiri2() 
Case &B11111111 : Call Mundur() 
Case &B10001111 : Call Lanjut() 
Case &B11000111 : Call Lanjut() 
Case &B11100011 : Call Lanjut() 
Case &B11110001 : Call Lanjut() 
Case &B10000111 : Call Lanjut() 
Case &B11000011 : Call Lanjut() 
Case &B11100001 : Call Lanjut() 
Case &B10000011 : Call Lanjut() 
Case &B11000001 : Call Lanjut() 
End Select 
Loop 
End 

Program utama pengendalian robot line follower yang sedang kita buat ini adalah mengendalikan gerak robot berdasarkan data pembacaan sensor detektor garis pandu. Jadi inti dari program yang kita buat adalah menentukan segala kemungkinan kondisi pembacaan sensor terhadap garis pandu kemudian memberikan aksi gerak robot yang terbaik supaya robot tetap berjalan pada jalur yang benar. 

8. Pembuatan sub-rutin yang diperlukan 
Dalam program ini, Kita membutuhkan beberapa sub-rutin yang telah Kita deklarasikan diawal program ini, yaitu: 

A. Sub-rutin Maju(), untuk pergerakan robot “maju”. 

Sub Maju() 
Motor1 = 0 
Motor2 = 1 
Motor3 = 0 
Motor4 = 1 
Call Pwm(130 , 130) 
End Sub 

B. Sub-rutin Terus(), untuk pergerakan robot “Terus” 

Sub Terus() 
Motor1 = 0 
Motor2 = 1 
Motor3 = 0 
Motor4 = 1 
Call Pwm(150 , 150) 
End Sub 

C. Sub-rutin Lanjut(), untuk pergerakan robot “Lanjut” 

Sub Lanjut() 
Motor1 = 0 
Motor2 = 1 
Motor3 = 0 
Motor4 = 1 
Call Pwm(160 , 160) 
End Sub 

D. Sub-rutin Mundur(), untuk pergerakan robot “Mundur” 

Sub Mundur() 
Motor1 = 1 
Motor2 = 0 
Motor3 = 1 
Motor4 = 0 
Call Pwm(150 , 150) 
End Sub 

E. Sub-rutin Kanan1(), untuk pergerakan robot “Belok kanan-1” 

Sub Kanan1() 
Motor1 = 0 
Motor2 = 1 
Motor3 = 0 
Motor4 = 1 
Call Pwm(160 , 180) 
End Sub 

F. Sub-rutin Kanan2(), untuk pergerakan robot “Belok kanan-2” 

Sub Kanan2() 
Motor1 = 0 
Motor2 = 1 
Motor3 = 0 
Motor4 = 1 
Call Pwm(150 , 255) 
End Sub 

G. Sub-rutin Kanan3(), untuk pergerakan robot “Belok kanan-3” 

Sub Kanan3() 
Motor1 = 0 
Motor2 = 1 
Motor3 = 0 
Motor4 = 1 
Call Pwm(30 , 255) 
End Sub 

H. Sub-rutin Kiri1(), untuk pergerakan robot “Belok Kiri-1” 

Sub Kiri1() 
Motor1 = 0 
Motor2 = 1 
Motor3 = 0 
Motor4 = 1 
Call Pwm(180 , 160) 
End Sub 

I. Sub-rutin Kiri2(), untuk pergerakan robot “Belok Kiri-2” 

Sub Kiri2() 
Motor1 = 0 
Motor2 = 1 
Motor3 = 0 
Motor4 = 1 
Call Pwm(255 , 150) 
End Sub 

J. Sub-rutin Kiri3(), untuk pergerakan robot “Belok Kiri-3” 

Sub Kiri3() 
Motor1 = 0 
Motor2 = 1 
Motor3 = 0 
Motor4 = 1 
Call Pwm(255 , 30) 
End Sub 

K. Sub-rutin PWM() 
Sub-rutin PWM digunakan untuk menghasilkan sinyal PWM yang diumpankan ke kaki PORTD.4 (OC1B) dan PORTD.5 (OC1A) yang langsung terhubung pada kaki EnableA dan EnableB IC driver motor DC L298. Sinyal PWM yang dihasilkan akan berguna dalam pengaturan kecepatan putar motor DC (roda robot). 

Sub Pwm(byval Kiri As Integer , Byval Kanan As Integer) 
Pwm1a = Kiri ' PORTD.5 (OC1A) 
Pwm1b = Kanan ' PORTD.4 (OC1B) 
End Sub

Tag : Robot4
1 Comment For "Program Robot4 ON/OFF Dengan PWM"

Bang, programnya ada yg pke CV AVR nda ?

Kami hanya mengizinkan komentar yang berkualitas!

Back To Top