Anda di halaman 1dari 22

LAPORAN TUGAS BESAR

SISTEM KENDALI DIGITAL

BALANCING ROBOT DENGAN KENDALI PID

Anggota :

1. Cahya Kusuma Ardhi (1102140109)


2. Mamat Rahmat (1102140010)
3. Luthfi Maulana Ishaq (1102140027)
4. Jeremiah Andreas Bargain S (1102140072)

Daftar Isi
Bab I Pendahuluan.

1.1 Latar Belakang ................................................................................................... 1


1.2 Alat Dan Bahan .................................................................................................. 1

Bab II Prinsip Kerja Alat

2.1 Balancing Robot Rida Dua Dan Pendulum ...................................................... 2


2.2 Pengendali PID .................................................................................................... 3
2.3 Kombinasi Accelerometer Dan Gyroscope ....................................................... 4
2.4 Kalman Filter ....................................................................................................... 5
2.5 Motor DC Dan Driver Motor ............................................................................. 6
2.6 Arduino Mega ...................................................................................................... 6
2.7 Kontrol.................................................................................................................. 6

Bab III Hasil Pengujian Sensor Dengan Kontrol

Hasil Pengujian Sensor Dengan Kontrol .......................................................... 7

Bab IV Program Dan Block Diagram

4.1 Program Robot .................................................................................................. 10


4.2 Block Digaram System ..................................................................................... 18
4.3 Hasil Tugas Besar............................................................................................... 19

Bab I Pendahuluan
1.Latar Belakang
Perkembangan teknologi robotika telah membuat kualitas kehidupan manusia
semakin tinggi. Saat ini perkembangan teknologi robotika telah mampu meningkatkan
kualitas maupun kuantitas berbagai industri. Teknologi robotika juga telah menjangkau sisi
hiburan dan pendidikan bagi manusia. Salah satu cara menambah tingkat kecerdasan sebuah
robot adalah dengan menambah sensor, metode kontrol bahkan memberikan kecerdasan
buatan pada robot tersebut. Salah satunya adalah balancing robot beroda dua.
Balancing robot (robot penyeimbang) beroda dua merupakan suatu robot yang
memiliki dua buah roda disisi kanan dan kirinya yang tidak akan seimbang apabila tanpa
adanya kontroler. Balancing robot ini merupakan pengembangan dari model pendulum
terbalik (inverted pendulum) yang diletakkan di atas kereta beroda. Menyeimbangkan robot
beroda dua memerlukan suatu metode kontrol yang baik dan handal untuk mempertahankan
posisi robot dalam keadaan tegak lurus terhadap permukaan bumi tanpa memerlukan
pengendali lain dari luar. Bahkan sekarang ini konsep balancing robot beroda dua telah
digunakan sebagai alat transportasi yang bernama segway.
Tugas Besar ini kelompok kami mendesain dan membangun balancing robot beroda
dua yang mampu menyeimbangkan dirinya yang tegak lurus terhadap permukaan bumi di
daerah bidang datar. Pada Tugas besar ini kami menggunakan mikrokontroler arduino, sensor
accelerometer dan gyroscope(MPU 6050) serta kontrol Proporsional Integral Derrivatif(PID)
sebagai metode pengendali. Kontrol Proporsional Integral digunakan untuk menentukan
besarnya kecepatan dan arah putar motor DC sebagai penggerak, berdasarkan sudut
kemiringan badan robot terhadap permukaan bidang datar. Sehingga balancing robot ini dapat
mempertahankan posisinya tegak lurus dengan seimbang terhadap permukaan bumi pada
bidang datar.

1.1 Alat dan bahan


1. Arduino mega
2. MPU 6050
3. Driver Motor L298
4. Kabel Jumper
5. Motor Dc
6. Baterai

Bab II Perinsip Kerja Alat


2.1 Balancing Robor roda dua dan pendulum
Balancing robot beroda dua merupakan suatu robot yang memiliki dua buah
roda disisi kanan dan kirinya yang tidak akan seimbang apabila tanpa adanya
kontroler. Balancing robot beroda dua ini merupakan pengembangan dari model
pendulum terbalik yang diletakkan diatas robot beroda

Gambar 1 Pendulum terbalik di atas kereta beroda


Saat balancing robot beroda dua condong ke depan ata u miring ke k anan pada
Gambar 2.2, maka tindak an yang perlu dilakukan adalah motor akan memutar N
roda searah j arum jam sehingga balancing robot beroda dua berjalan ke arah
depan. Gaya yang digunakan untuk menyeimban gkan dihasil kan dari put aran
roda. Putaran roda ini berasal dari torsi yang dihasilkan oleh motor.

Gambar 2 Balancing robot beroda dua menyeimbangkan diri


Untuk menurunkan persamaan dinamis dari sistem ini, kita
mendefinisikan koordinat. Dalam sistem ini, kita mengasumsikan bahwa robot
bergerak secara horizontal tanpa tergelincir antara tanah dan roda.
x posisi horisontal dari pusat roda relatif terhadap asal didefinisikan
xc posisi horisontal dari COM dari bagian tubuh yang relatif terhadap asal
didefinisikan
zc posisi vertikal dari COM dari bagian tubuh dari tanah
sudut rotasi searah jarum jam dari roda dari sumbu horisontal di t = 0
sudut rotasi searah jarum jam dari bagian tubuh dari posisi tegak parameter lain
yang digunakan dalam gambar ini adalah sebagai berikut.
m massa bagian tubuh (500 g)
mw massa bagian roda (7,2 g)
R radius roda (32 mm)
L panjang antara COM dan pusat roda
0 torsi diterapkan (4 kg)

me inersia dari bagian tubuh

Me w inersia dari bagian roda (779,2 g mm 2)


Gambar 3: Skema menyeimbangkan robot dengan parameter yang
relevan

2.2.Pengandali PID

Pengendali PID adalah suatu sistem pengendali yang merupakan gabungan


antara pengendali proporsional,integral dan turunan (derivative). Dalam waktu
kontinyu,sinyal keluaran pengendali PID dapat dirumuskan sebagai berikut.

T
de(t)
u( t) = K P e(t) + Ki e(t)
dt dt
0 + Kd
atau
1 t de(t)
+ T
e(t) dt d dt
u(t) = KP e(t) + T
i0
denga n:
sinyal keluaran pengendali
u(t) = PID
konstanta
K
P = proporsion al
Ti = waktu integral
T
d = waktu turunan
konstanta
K
i = integral
konstanta
Kd = turunan
sinyal kesalahan = re ferensi
e(t) = output

Jadi, fungsi alih pe ngendali PID (dalam domain s) dap at dinyatakan sebagai
berikut.

Gc ( s ) = K p + Ksi + K d s
Masukan E(s) Ki U(s)
+ - Kp + S + Kds

Y(s)
Gambar 4 Diagram blok pengendali PID.
2.3Kombinasi Accelerometer dan Gyroscope

Dengan menggunakan kombinasi accelerometer dan gyroscope pada suatu


sistem maka accelerometer dapat memberikan pengukuran sudut saat sistem berada
pada kondisi diam. Sedangkan pada saat sistem berotasi accelerometer tidak bisa
bekerja secara maksimal karena Balancing Robot Beroda Dua 43 memiliki respon
yang lambat. Kelemahan inilah yang dapat diatasi oleh gyroscope karena gyroscope
dapat membaca kecepatan sudut yang dinamis. Namun gyroscope juga memiliki
kelemahan yaitu proses perpindahan kecepatan sudut dalam jangka waktu yang
panjang menjadi tidak akurat karena ada efek bias yang dihasilkan oleh gyroscope
Contoh aplikatif kombinasi accelerometer dan gyroscope yaitu pada perangkat
iPhone yang mengkombinasikan 2 sensor tersebut. Hal tersebut sangat membuat
nyaman para pengguna dalam hal pendeteksian sensitivitas gerakan. Dari kombinasi
accelerometer dan gyroscope didapatkan 6 sumbu pendeteksian yaitu 3 sumbu rotasi
(x,y,z) dan 3 sumbu linier (atas-bawah, kanan-kiri, depan-belakang). Output dari
kombinasi sensor ini berupa gambar yang sangat detail dan halus gerakannya
dibandingkan dengan smartphone yang hanya menggunakan accelerometer saja.
Salah satu IC kombinasi accelerometer dan gyroscope adalah IC MPU
6050.MPU 6050 merupakan kombinasi sesnsor antara accelerometer dan gyroscope
meskipun pada dasarnya ada sensor temperaturnya.Akses sensor ini menggunakan
fitur I2c microcontroller. Bentuk fisik dari IC MPU 6050 dapat dilihat pada Gambar
5

Gambar 5.MPU 6050

Adapun fitur-fitur MPU 6050 ini antara lain:


1. Sensitifitas Accelerometer yang dapat dipilih mulai 2/4/8 samapai 16 g
2. Sensitifitas Gyrocope yang dapat dipilih mulai 250/500/1000 sampai 2000
degrees/s
3. Range 16 bit untuk kedua sensor
4. Sensitivitas percepatan linier dari Gyroscope 0,1 derajat/s Data rate output
hingga 1000Hz, dilengkapi digital lowpassfilter dan memiliki frekuensi
sudut maksimum 256Hz.

2.4 Kalman Filter


Accelerometer dapat memberikan pengukuran sudut kemiringan yang akurat
ketika sistem sedang diam (statis). Bila sistem sedang bergerak, accelerometer tidak
hanya dipengaruhi oleh gravitasi bumi tetapi dipengaruhi juga oleh pergerakan badan
robot, sehingga dapat mengganggu pembacaan kemiringan sudut dan memiliki noise.
Gyroscope dapat membaca data dari kecepatan sudut yang dinamis. Setelah integrasi
data dari waktu ke waktu, perpindahan sudut atau sudut kemiringan dapat dihitung.
Tetapi sudut ini akan menjadi tidak akurat dalam jangka panjang karena efek bias
yang dihasilkan oleh gyroscope.

Oleh
karena itu
dibutuhkan sebuah
filter digital yang
dapat
menghilangkan
efek dari kekurangan sensor-sensor
tersebut. Salah satunya adalah dengan menggunakan kalman
filter.

2.5 Motor DC dan driver motor


Dengan target torsi 0.171Nm dan sasaran kecepatan 200rpm, tingkat daya (P) dari motor
dihitung sebagai berikut:
0.0171400
P=tw= 2pi=0.759 w
60 (1)

Ini adalah tingkat kekuatan yang kita butuhkan tanpa mempertimbangkan efisiensi
rantai transmisi listrik, yaitu, gearbox. Biasanya, gearbox planet atau memacu gearbox akan
memiliki efisiensi 80% untuk 1-2 tahap, yang berarti rasio gigi adalah sekitar 10: 1
Tingkat kekuatan modifikasi dari motor diperoleh dengan akuntansi untuk efisiensi gearbox
ke dalam perhitungan.

P 0.759
Pm= = =0.948 w
80 0.8 (2)

2.6 Arduino mega


Arduino mega berfungsi sebagai kontroller digital untuk robot dengan menerapkan
konsep kontroller PID. Arduino mega ini menerima feedback berupa sedut kemiringan robot
dan kecepatan putar robot yang nantinya akan dikombinasikan agar menghasilkan keluaran
yang tepat. Arduino mega dihubungkan dengan driver motor melalui pin pwm yaitu pin 3 pin
9 untuk motor A dan pin 10 pin 11 untuk motor B.
2.7 Kontrol
2.7.1 Perhitungan fungsi transfer sistem

Untuk mendapatkan fungsi transfer dari persamaan sistem linier, pertama-tama


kita harus mengambil transformasi Laplace dari persamaan sistem dengan asumsi
kondisi awal nol. Transformasi Laplace yang dihasilkan ditunjukkan di bawah ini.

Ingat bahwa fungsi transfer mewakili hubungan antara satu input dan satu
keluaran sekaligus. Untuk menemukan fungsi transfer pertama kami untuk output
Phi (s) dan masukan U (s) kita perlu menghilangkan X (s) dari persamaan di atas.
Selesaikan persamaan pertama untuk X (s).

Kemudian gantikan persamaan diatas dengan persamaan kedua.

Lalu mengatur ulang fungsi transfer.

dimana

Dari fungsi transfer di atas dapat dilihat bahwa ada sebuah tiang dan titik nol
pada titik asal. Ini bisa dibatalkan dan fungsi transfer menjadi berikut.
Kedua, fungsi transfer dengan posisi keranjang $ X (s) $ sebagai output dapat
diturunkan dengan cara yang sama untuk sampai pada berikut.
Bab III Hasil pengujian sensor dengan kontrol
Pada Tugas besar ini dilakukan pengujian data respon robot tanpa kontroler dan
menggunakan kontroler PID. Pengujian robot dengan kontroler PID dengan parameter nilai
Kp diubah, nilai Ki dan Kd tetap. Pengujian robot juga dilakukan dengan parameter nilai Ki
diubah, nilai Kp dan Kd tetap. Pengujian robot lainnya juga dengan parameter nilai Kd
diubah, nilai Kp dan Ki tetap. Pengujian juga dilakukan dengan memberikan gangguan
kepada robot.

Gambar 6. Pengujian Tanpa Kontroler

Ketika robot tidak menggunakan kontroler PID ( tanpa kontroler ) hanya


menggunakan PWM, maka robot sulit mencapai keseimbangan. Hal ini dapat dilihat pada
gambar 4. Pengujian mempertahankan titik keseimbangan, robot beroda dua dilakukan
sebanyak 3 kali. Robot hanya mampu bertahan sekitar 2 detik, kemudian robot tidak
mencapai keseimbangannya sehingga jatuh. Tanpa kontroler robot tidak dapat mencapai titik
kesetimbangan 0o. sehingga dibutuhkan suatu kontroler yang bisa menyeimbangkan robot.

Gambar 7. Pengujian Robot Nilai Kp10.0 Ki9.8 Kd2.0


Gambar 8. Pengujian Robot Nilai Kp8.0 Ki9.8 Kd2.0

Gambar 9. Pengujian Robot Nilai Kp7.0 Ki9.8 Kd2.0


Pengujian dengan menggunakan kontroler PID dengan parameter nilai Kp diubah 10,
8 dan 7, nilai Ki tetap pada 9.8 dan nilai Kd tetap pada 2.0, yang hasilnya dapat dilihat pada
gambar 5, 6 dan 7. Ketika Kp bernilai 10 overshoot yang terjadi meningkat dibanding Kp
dengan nilai 8.0 dan 7.0. Hal ini dikarenakan nilai Mp pada Kp = 10, bernilai 18,526%. Nilai
Kp paling ideal dari pengujian ini adalah 8.0.

Gambar 10. Pengujian Robot Nilai Kp8.0 Ki7.8 Kd2.0

Gambar 11. Pengujian Robot nilai Kp8.0 Ki6.0 Kd2.0


Pengujian dilakukan dengan merubah parameter nilai Ki, sedangkan nilai Kp dan Kd
tetap. Dari gambar 9 dan 10 dapat dilihat ketika Ki bernilai 7.8 overshoot yang terjadi kecil
dan error mendekati nol. Jika dibanding dengan Ki bernilai 6.0 error yang terjadi masih lebih
besar dan berisolasi. Nilai Ki yang paling ideal adalah 7.8.

Gambar 12. Pengujian Robot Nilai Kp8.0 Ki7.8 Kd0.5


Pengujian dilakukan dengan merubah parameter nilai Kd, sedangkan nilai Kp dan Ki
tetap. Dari gambar 11 dapat dilihat bahwa overshoot masih ada dan error steady state lebih
besar jika dibanding dengan gambar 8. Sehingga didapatkan nilai Ki dengan nilai paling ideal
sebesar 2.0. Hasil pada Ki dengan nilai 2.0 ini nilai overshoot lebih kecil dan pergerakan
robot dalam mencapai kesetimbangan lebih halus.

Gambar 13. Pengujian Robot Nilai Kp8.0 Ki7.8 Kd2.0 Ketika Diberi
Gangguan

Pengujian dilakukan dengan memberikan gangguan ketika parameter nilai kontroler


PID mencapai ideal. Gambar 12 dapat dilihat bahwa ketika diberikan gangguan yaitu pada
detik ke-15 maka robot berosilasi pada detik ke-15 hingga detik ke-20. Namun setelah itu
robot kembali mencapai kesetimbangan.
Bab IV Program Dan Block Digram System

4.1 Program Robot

#include <Wire.h>
#include <Kalman.h>
Kalman kalmanX; // Create the Kalman instance
/* IMU Data */
int16_t accX, accY, accZ;
int16_t tempRaw;
int16_t gyroX, gyroY, gyroZ;
float accXangle;//, accYangle; // Angle calculate using the accelerometer
float gyroXangle;//, gyroYangle; // Angle calculate using the gyro
float kalAngleX;//, kalAngleY; // Calculate the angle using a Kalman filter
unsigned long timer;
uint8_t i2cData[14]; // Buffer for I2C data
float CurrentAngle;
// Motor controller pins
const int AIN1 = 5; // (pwm) pin 3 connected to pin AIN1
const int AIN2 = 6; // (pwm) pin 9 connected to pin AIN2
const int BIN1 = 10; // (pwm) pin 10 connected to pin BIN1
const int BIN2 = 11; // (pwm) pin 11 connected to pin BIN2
int speed;

// PID
const float Kp = 8;//13
const float Ki = 7.8;
const float Kd = 2.0;//10
float pTerm, iTerm, dTerm, integrated_error, last_error, error;
const float K = 1.9 * 1.12;
#define GUARD_GAIN 10.0
#define runEvery(t) for (static typeof(t) _lasttime;(typeof(t))((typeof(t))millis() - _lasttime) >
(t);_lasttime += (t))
void setup() {
pinMode(AIN1, OUTPUT); // set pins to output
pinMode(AIN2, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
Serial.begin(9600);
Wire.begin();
i2cData[0] = 7; // Set the sample rate to 1000Hz - 8kHz/(7+1) = 1000Hz
i2cData[1] = 0x00; // Disable FSYNC and set 260 Hz Acc filtering, 256 Hz Gyro filtering, 8
KHz sampling
i2cData[2] = 0x00; // Set Gyro Full Scale Range to 250deg/s
i2cData[3] = 0x00; // Set Accelerometer Full Scale Range to 2g
while (i2cWrite(0x19, i2cData, 4, false)); // Write to all four registers at once
while (i2cWrite(0x6B, 0x01, true)); // PLL with X axis gyroscope reference and disable
sleep mode
while (i2cRead(0x75, i2cData, 1));
if (i2cData[0] != 0x68) { // Read "WHO_AM_I" register
Serial.print(F("Error reading sensor"));
while (1);
}
delay(100); // Wait for sensor to stabilize

/* Set kalman and gyro starting angle */


while (i2cRead(0x3B, i2cData, 6));
accX = ((i2cData[0] << 8) | i2cData[1]);
accY = ((i2cData[2] << 8) | i2cData[3]);
accZ = ((i2cData[4] << 8) | i2cData[5]);
accXangle = (atan2(accY, accZ) + PI) * RAD_TO_DEG;
kalmanX.setAngle(accXangle); // Set starting angle
gyroXangle = accXangle;
timer = micros();
}
void loop() {
runEvery(25) // run code @ 40 Hz
{
dof();
Pid();
Motors();
/* if (CurrentAngle <= 180.2 && CurrentAngle >= 179.8)
{
stop();
}
else{
if (CurrentAngle < 230 && CurrentAngle > 130)
{
Pid();
Motors();
}
else
{
stop();
}
}*/
}

}
void Motors() {
if (speed > 0)
{
//forward
//speed = map(speed,0,-60,0,60);
analogWrite(AIN1, 0);
analogWrite(AIN2, speed);
analogWrite(BIN1, 0);
analogWrite(BIN2, speed);

//analogWrite(AIN1, speed);
//analogWrite(AIN2, 0);
//analogWrite(BIN1, speed);
//analogWrite(BIN2, 0);
}
else
{
// backward
speed = map(speed, 0, -60, 0, 60);
//analogWrite(AIN1, 0);
//analogWrite(AIN2, speed);
//analogWrite(BIN1, 0);
//analogWrite(BIN2, speed);*/
analogWrite(AIN1, speed);
analogWrite(AIN2, 0);
analogWrite(BIN1, speed);
analogWrite(BIN2, 0);
}
}
void stop()
{
analogWrite(AIN1, 0);
analogWrite(AIN2, 0);
analogWrite(BIN1, 0);
analogWrite(BIN2, 0);
}

void Pid() {
error = 180 - CurrentAngle; // 180 = level
pTerm = Kp * error;
integrated_error += error;
iTerm = Ki * constrain(integrated_error, -GUARD_GAIN, GUARD_GAIN);
dTerm = Kd * (error - last_error);
last_error = error;
// speed = constrain(K*(pTerm + iTerm + dTerm), -150, 150);
speed = constrain(K * (pTerm + iTerm + dTerm), -180, 180);

void dof()
{
while (i2cRead(0x3B, i2cData, 14));
accX = ((i2cData[0] << 8) | i2cData[1]);
accY = ((i2cData[2] << 8) | i2cData[3]);
accZ = ((i2cData[4] << 8) | i2cData[5]);
tempRaw = ((i2cData[6] << 8) | i2cData[7]);
gyroX = ((i2cData[8] << 8) | i2cData[9]);
gyroY = ((i2cData[10] << 8) | i2cData[11]);
gyroZ = ((i2cData[12] << 8) | i2cData[13]);
accXangle = (atan2(accY, accZ) + PI) * RAD_TO_DEG;
double gyroXrate = (double)gyroX / 131.0;
CurrentAngle = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros() - timer) /
1000000);
Serial.println(CurrentAngle);
Serial.print("\t");
timer = micros();
}

4.2 Digram Block System

4.4 Diagram blok kontrol PID

4.5 Hasil Tugas Besar


4.6 Kalman filter hasil simulink dan simulasi
Simulasi daya

Simulasi velocity dan estimasi posisi


4.7hasil simulasi PID tune Simulink