• Tidak ada hasil yang ditemukan

Penjelasan Program Penggerak Robot Lengan

Dalam dokumen 3. PERENCANAAN & IMPLEMENTASI SISTEM (Halaman 56-65)

9. z merupakan nilai koordinat z end-effector yang didapatkan dari hasil percobaan penggerakan robot lengan. Data ini khusus untuk tipe inverse

3.7.2.1. Penjelasan Program Penggerak Robot Lengan

Program gerak.py merupakan program penggerak robot lengan yang akan dipanggil oleh worker.py ketika sudut-sudut kemiringan robot lengan masih berada dalam jangkauan robot. Mekanisme kerja gerak.py dapat dilihat pada gambar berikut.

Start

angle 1, angle 2, angle 3

Mengkonversi sudut kemiringan link menjadi posisi sudut pada

setiap motor servo Mengambil data 1, data 2, dan data3 atau hitung 1, hitung 2, dan

hitung 3 pada id antrian yang telah diproses dari tabel data

(database)

a1, a2, a3

Penginisiasian awal dari sensor kompas

Menggerakan motor servo 1 sesuai nilai sudut a1

Mengambil data heading dari tabel kompas pada database robot

Mengambil data raw dari sensor kompas

Data heading kompas saat menunjukan θ1 = 0

A

B

Gambar 3.55. Flowchart (1) penggerakan robot

Nilai raw axis x, y, z

Pengolahan nilai menggunakan persamaan matematika

Nilai derajat 1

Penginisiasian awal dari sensor accelerometer pada link 2

Menggerakan motor servo 2 sesuai nilai sudut a2

Mengambil data raw dari sensor accelerometer

Penginisiasian awal dari sensor accelerometer pada link 3 Gambar 3.56. Flowchart (2) penggerakan robot

Menggerakan motor servo 3 sesuai nilai sudut a3

Mengambil data raw dari sensor accelerometer

Gambar 3.57. Flowchart (3) penggerakan robot

Pada bagian awal program gerak.py dilakukan import library smbus (untuk komunikasi i2c), time (untuk keperluan delay), math (untuk melakukan operasi matematika), ServoKit (untuk keperluan pengendalian motor servo melalui PWM/servo driver board), dan mysql.connector (untuk keperluan komunikasu dengan database).

import smbus import time import math

from adafruit_servokit import ServoKit import mysql.connector

Gambar 3.58. Cuplikan (1) program gerak.py

Program kemudian dilanjutkan untuk mengambil nilai data 1, data 2, dan data 3 (bila tipe forward) atau hitung 1, hitung 2, dan hitung 3 (bila tipe inverse). Nilai tersebut dimasuk secara berurutan pada variabel angle 1, angle 2, dan angle 3.

Berikut cuplikan program pengambilan data tersebut.

connection = mysql.connector.connect(host="localhost", user="root", passwd="017", database="robot") cur = connection.cursor()

cur.execute ("SELECT id FROM data WHERE status = 'process' LIMIT 1")

if tipe[0] == "forward":

cur.execute ("SELECT data1, data2, data3 FROM data WHERE id

= %s LIMIT 1", (_id[0], )) data = list()

data = cur.fetchone() connection.commit() else :

cur.execute ("SELECT hitung1, hitung2, hitung3 FROM data WHERE id = %s LIMIT 1", (_id[0], ))

Gambar 3.59. Cuplikan (2) program gerak.py

Ketiga nilai angle tersebut kemudian dimasukan ke dalam persamaan konversi nilai sudut kemiringan link menjadi nilai posisi sudut motor servo (telah dijelaskan pada sub-bab 3.4.3) sehingga dihasilkan nilai a1, a2, dan a3. Lalu, dilakukan penginisiasian sensor kompas dengan memberi nilai hexa 70 pada register A (nilai output raw yang ditampilkan adalah rata-rata dari 8 sampel yang diambil), memberi nilai hexa A0 pada register B (mengatur nilai gain pada sensor sebesar 390 dengan resolusi 2,56 Mg/LSb) dan memberi nilai hexa 0 pada register mode (mode pembacaan sensor secara continously).

def Magnetometer_Init():

#write to Configuration Register A

bus.write_byte_data(Device_Address, Register_A, 0x70)

#Write to Configuration Register B for gain

bus.write_byte_data(Device_Address, Register_B, 0xa0)

#Write to mode Register for selecting mode

bus.write_byte_data(Device_Address, Register_mode, 0)

Gambar 3.60. Cuplikan (3) program gerak.py

Kemudian dilakukan penggerakan motor servo 1 dengan posisi sudut sebesar nilai a1. Namun sebelum dapat menggerakkan motor servo perlu untuk melakukan penginisiasian channel-channel servo driver yang akan digunakan.

kit = ServoKit(channels=16)

kit.servo[0].set_pulse_width_range(544, 2095) kit.servo[1].set_pulse_width_range(544, 2210) kit.servo[2].set_pulse_width_range(544, 2095)

Gambar 3.61. Cuplikan (4) program gerak.py

Pada channel 0 dan 2 servo driver besar pulsa pada sisi high diatur dengan rentang 544-2095 Hz. Sedangkan pada channel 1 diatur pada rentang 544-2210 Hz. Tujuan pengaturan ini agar servo dapat mencapai jangkauan maksimum yaitu 180o. Setelah motor servo 1 bergerak maka dilanjutkan dengan proses pengambilan data heading dari tabel kompas pada database. Nilai data ini merupakan heading nilai sensor

kompas saat posisi robot lengan θ1 = 0o. Nilai ini didapatkan ketika menjalankan program kalibrasi kompas kalibrasi_kompas.py yang terdapat pada directory /home/pi/Desktop/kalibrasi. Berikut tampilan program kalibrasi_kompas.py ketika dijalankan.

Gambar 3.62. Tampilan program kalibrasi_kompas.py

Cara penggunaan program ini adalah menekan tombol >>> atau <<< hingga posisi laser robot pada bidang xy terdapat pada garis sumbu x (y = 0). Kemudian klik tombol simpan untuk melakukan pembacaan data raw sensor kompas dan pengolahan hingga mendapatkan nilai heading kompas yang kemudian disimpan pada database. Setelah mendapatkan nilai heading dari database, proses dilanjutkan dengan pembacaan data raw dari kompas untuk kemudiaan diolah hingga menjadi nilai heading kompas pada posisi terbaru. Proses ini diulang sebanyak lima kali untuk keakurasian sistem. Kemudian untuk mendapatkan nilai θ1 maka nilai heading tersebut dirata-ratakan dan dikurangi dengan nilai heading dari database. Karena pembacaan kompas agak bergeser akibat dekatnya posisi kompas dengan logam, dan motor servo maka nilai θ1 dimasukan ke dalam sebuah persamaan regeresi linier. Untuk nilai θ1 dibawah nilai -14o maka berikut persamaannya.

𝑑𝑒𝑟𝑎𝑗𝑎𝑡 1 = 1,131036 θ1+ 0,356996 (3.20)

Untuk nilai θ1 lebih besar dari -14o tetap dibiarkan, sehingga akan menghasilkan nilai derajat 1 yang tetap sama. Gambar 3.63 merupakan cuplikan program yang berfungsi untuk membaca dan mengolah data dari sensor kompas. Setelah mendapatkan nilai derajat 1 maka akan dilakukan pengecekan apakan nilai

o o

memenuhi kondisi tersebut maka akan dilakukan perhitungan selisih antara derajat 1 dengan angle 1 (nilai b1). Kemudian motor servo 1 digerakkan pada posisi sudut sebesar nilai a1 ditambah dengan nilai b1 dikali 2. Lalu proses mengulang kembali pada proses pengambilan data heading dari tabel kompas pada database. Bila telah memenuhi kondisi, program akan dilanjutkan dengan inisiasi sensor accelerometer pada link 2 terlebih dahulu. Penginisiasian ini dapat dilihat pada gambar 3.64.

def sensor1():

Gambar 3.63. Cuplikan (5) program gerak.py

def MPU_Init():

bus.write_byte_data(Device_Address, SMPLRT_DIV, 7) bus.write_byte_data(Device_Address, PWR_MGMT_1, 1) bus.write_byte_data(Device_Address, CONFIG, 0)

bus.write_byte_data(Device_Address, GYRO_CONFIG, 24) bus.write_byte_data(Device_Address, INT_ENABLE, 1)

Gambar 3.64. Cuplikan (6) program gerak.py

Setelah dilakukan penginisiasian, maka dilanjutkan dengan menggerakkan motor servo 2 sebesar a2. Kemudian, dilakukan pembacaan data raw dari accelerometer.

Proses ini diulang sebanyak lima kali untuk keakurasian sistem. Kemudian untuk mendapatkan nilai derajat 2 maka nilai sudut tersebut dirata-ratakan. Setelah mendapatkan nilai derajat 2 maka akan dilakukan pengecekan apakan nilai tersebut berada dalam rentang angle 2 – 0,5o hingga angle 2 + 0,5o. Jika belum memenuhi kondisi tersebut maka akan dilakukan perhitungan selisih antara angle 2 dengan derajat 2 (nilai b2). Kemudian motor servo 2 digerakkan pada posisi sudut sebesar nilai a2 dikurangi nilai b2. Lalu proses mengulang kembali pada proses pembacaan data raw dari sensor accelerometer pada link 2. Bila telah memenuhi kondisi, program akan dilanjutkan dengan inisiasi sensor accelerometer pada link 3 terlebih dahulu. Setelah dilakukan penginisiasian, maka dilanjutkan dengan menggerakkan motor servo 3 sebesar a3. Kemudian, dilakukan pembacaan data raw dari accelerometer. Pengolahan sudut untuk sensor ini akan sedikit berbeda yaitu penambahan 5o, dikarenakan adanya offset sebesar 5o antara kemiringan posisi sensor dengan garis link 3 (gambar 3.65). Hal ini sebelumnya telah disinggung pada sub-bab 3.2.

Gambar 3.65. Offset pada sensor MPU-6050 link 3 Garis Link 3 Garis Kemiringan Sensor

Selain ditambah dengan offset, nilai sudut yang telah didapatkan akan dikurangi dengan nilai derajat 2 yang telah didapatkan sebelumnya. Proses ini diulang sebanyak lima kali untuk keakurasian sistem. Kemudian untuk mendapatkan nilai derajat 3 maka nilai sudut tersebut dirata-ratakan. Setelah mendapatkan nilai derajat 3 maka akan dilakukan pengecekan apakan nilai tersebut berada dalam rentang angle 3 – 0,5o hingga angle 3 + 0,5o. Jika belum memenuhi kondisi tersebut maka akan dilakukan perhitungan selisih antara derajat 3 dengan angle 3 (nilai b3). Kemudian motor servo 2 digerakkan pada posisi sudut sebesar nilai a3 dikurangi nilai b3. Lalu proses mengulang kembali pada proses pembacaan data raw dari sensor accelerometer pada link 3. Bila telah memenuhi kondisi, program akan berhenti. Berikut cuplikan program gerak.py yang berfungsi untuk membaca dan mengolah data sensor accelerometer pada link 3.

def sensor3(derajat2):

Gambar 3.66. Cuplikan (7) program gerak.py

3.7.2.2. Penjelasan Pengolahan Data Raw Sensor Kompas dan Akselerometer

Dalam dokumen 3. PERENCANAAN & IMPLEMENTASI SISTEM (Halaman 56-65)

Dokumen terkait