Karya Tulis Sebagai Salah Satu Syarat Memperoleh Gelar Sarjana Teknik
Program Studi SarjanaTeknik Elektro
Oleh :
IQBAL DESTIAN WANERA
NIM. 2017310014
Dosen pembimbing
FAKULTAS TEKNIK
INSTITUT TEKNOLOGI PADANG
2021
STUDI ANALISA VARIASI KECEPATAN ROTOR PADA SISTEM
PESAWAT HEXACOPTER DAN RELEVANSI TERHADAP GERAKAN
ROLL PITCH DAN YAW
ABSTRAK
viii
STUDI ANALISA VARIASI KECEPATAN ROTOR PADA SISTEM
PESAWAT HEXACOPTER DAN RELEVANSI TERHADAP GERAKAN
ROLL PITCH DAN YAW
ABSTRACT
HALAMAN JUDUL
ABSTRAK
ABSTRACT
LEMBAR PENGESAHAN
LEMBAR PERSETUJUAN
PERNYATAAN KEASLIAN ISI
KATA PENGANTAR.............................................................................................. i
DAFTAR ISI ............................................................................................................ iii
DAFTAR GAMBAR................................................................................................ vi
DAFTAR TABEL .................................................................................................... viii
BAB I PENDAHULUAN
1.1 Latar Belakang ..................................................................................................... 1
i
2.3.6 Propeller (Baling Baling)...............................................................................27
2.3.7 Baterai Lipo....................................................................................................27
2.3.7 Power Supply..................................................................................................29
2.4 Pengendalian PID(Propotional, Integral, Derivative)..............................................30
2.4.1 Kontrol PI.......................................................................................................31
2.4.2 Parameter Kontrol PI......................................................................................33
2.5 Metode Ziegler-Nichlos............................................................................................34
2.5.1 Metode Ziegler-Nichlos Respon Langkah......................................................34
2.5.2 Metode Ziegler-Nichlos Respon Frekuensi....................................................35
2.6 Rancangan Sitem Pengontrolan PID.........................................................................36
2.7 PWM (Pulse Width Modulation atau Modulasi Lebar Pulsa).................................37
2.7.1 Siklus Kerja PWM (PWM Duty Cycle)..........................................................38
2.7.2 Frekuensi PWM (PWM Frequency)...............................................................39
2.8 Logika Fuzzy............................................................................................................39
2.8.1 Basis Pengetahuan Fuzzy................................................................................40
2.8.2 Fuzzyfikasi......................................................................................................40
2.8.3 Proses Inferensi...............................................................................................40
2.8.4 Defuzzyfikasi..................................................................................................41
2.8.5 Sistem Kontrol Fuzzy-PID..............................................................................41
5.1 Kesimpulan...............................................................................................................58
5.2 Saran.........................................................................................................................58
DAFTAR PUSTAKA.....................................................................................................59
LAMPIRAN
DAFTAR GAMBAR
1
settling time 0.672 detik dan overshoot 0.132 % pada sistem pitch, settling time 0.21 detik
dan overshoot 2.13 % pada sistem yaw.
Dari kedua penelitian terdahulu ini terlihat bahwa mereka mengunakan metode yang
sama yaitu kendali PID. Pada prinsipnya prestasi sitem kendali ini masih dapat di
tingkatkan lagi untuk memperoleh sistem kendali hexacopter yang lebih handal.
Permasalahan yang dapat ditingkatkan pada penelitian tersebut adalah bagaimana
mendapatkan nilai konstanta Kp, Ki, dan Kd yang lebih optimal. Sehingga meningkatkan
prestasi sistem kendali hexacopter yang dapat dilihat, semakin kecilnya overshoot dan
settling time. Adapun metode yang dikemukakan pada penelitian ini menggunakan metode
Ziegler-Nichols untuk mendapatkan nilai konstanta Kp, Ki, dan Kd yang lebih optimal.
Metode ini sudah digunakan juga oleh Rahmat Fauzi (2018), tetapi hanya satu gerakan saja
(roll).
1.2 Rumusan Masalah
1. Bagaimana perencanaan model sistem kendali keseimbangan enam buah motor bldc
gerakan roll (kiri-kanan), pitch (maju-mundur) dan yaw (rotasi kiri-kanan) dengan
berbasis arduino?
2. Bagaimana mendapatkan kecepatan yang relevan terhadap gerakan roll, pitch dan yaw?
1.3 Batasan Masalah
Penelitian ini spesifik membahas tentang kecepatan pesawat UAV hexacopter, terhadap
gerakan roll, pitch dan yaw saja.
1.4 Tujuan
1. Untuk mendapatkan kecepatan masing-masing motor yang relevan terhadap kecepatan
roll, pitch dan yaw berbasis arduino.
1.5 Manfaat
Manfaat dari penulisan ini ialah:
1. Dapat mengetahui kecepatan masing-masing motor saat roll, pitch dan yaw.
2. Dapat mengetahui pengaruh kecepatan motor terhadap gerakan roll, pitch dan yaw.
BAB II
TINJAUAN PUSTAKA
Dapat disimpulkan bahwa kelebihan dari hexacopter yang dipilih untuk menjalankan
misi pengambilan data atmosfer antara lain: lamanya terbang, mampu terbang dengan
keadaan stabil dan bisa membawa payload yang cukup banyak. Dengan demikian
hexacopter dipilih dan mampu untuk menjalankan misi laboratorium terbang. Sehingga
hexacopter digunakan dalam melakukan misi perjelajahan dalam berbagai bidang ilmu
pengetahuan.
2.Pitching
Pada pergerakan roll, baling-baling yang diatur adalah kanan dan kiri untuk
menghasilkan manuver ke kanan dan ke kiri. Sedangkan pada pergerakan pitch
pengaturan kecepatan baling-baling dilakukan pada balingbaling depan dan belakang untuk
menghasilkan manuver ke depan dan ke belakang. Bila kecepatan baling-baling depan
ditingkatkan/ diturunkan dan kecepatan baling-baling belakang diturunkan/
ditingkatkan, maka akan terjadi manuver ke belakang/ ke depan. Sehingga dapat di
jadikan cara untuk pengapliksian hexacopter ketika melakukan manuver.[2]. Adapun arah
gerakannya dapat di lihat seperti gambar 2.2
Gambar 2.2 Gerakan Pitch pada Hexacopter
3.Yawing
Pergerakan yaw adalah pergerakan yang dilakukan untuk memutar posisi hexacopter
dengan inti tetap berada pada posisi yang sama. Pergerakan ini dicapai dengan
mengurangi kecepatan 2 baling-baling yang memiliki arah putar yang sama dan
meningkatkan perputaran 2 baling-baling yang memiliki arah putar yang berlawanan
dengan kedua baling-baling sebelumnya. Bila baling-baling kiri dan kanan kecepatanya
diturunkan bersamaan dengan dinaikannya kecepatan baling-baling depan dan belakang,
maka hexacopter berputar berlawanan arah jarum jam dengan inti sebagai poros.
Begitu pula sebaliknya[2]. Adapun arah gerakannya dapat di lihat pada gambar 2.3
Motor DC brushless terdiri dari 3 jenis motor berdasarkan banyaknya fasa, antara
lain motor DC brushless 1 fasa, 2 fasa, dan 3 fasa. Mengacu pada jenisnya, stator pada
motor DC brushless memiliki jumlah yang sama dengan belitannya. Motor DC brushless
yang sering digunakan adalah motor DC brushless 3 fasa. Dapat di lihat pada gambar 2.6
dan gambar 2.7
Skema cara kerja motor brushless DC, adalah sebagai berikut pada gambar 2.8
Dengan mengacu pada gambar 2.9 dan Tabel 2.2, kita sekarang dapat menentukan
switch (Q) mana saja yang aktif ketika phasa tertentu yang akan diberikan sinyal sehingga
arah putaran rotor dapat terlihat. Pada step 3 phasa yang aktif adalah V-W yang artinya
phasa V terhubung ke kutub positif melalui (Q3) dan phasa W terhubung ke netral ground
melalui (Q6) sedangkan phasa U tidak diberikan sinyal sehingga posisi vektor fluks stator
berada pada posisi tersebut. Lanjut ke step 4 phasa yang aktif adalah V-U yang artinya
phasa V tetap terhubung ke kutub positif melalui (Q3) dan phasa U terhubung ke netral
ground melalui (Q2) sedangkan phasa W tidak diberikan sinyal sehingga rotor terus
berputar kearah fluks stator pada step 4 pada gambar 2.10 dibawah ini.
Mengacu pada gambar 2.10 dan tabel 2.1, step 5 dan step 6 terlihat phasa lain lagi
yang diberikan sinyal. Pada step 5 phasa yang diaktifkan adalah phasa W-U yang artinya
phasa W terhubung ke kutub positif melal ui (Q5) dan phasa U terhubung ke netral ground
melalui (Q2) sedangkan phasa V tidak diberikan sinyal sehingga arah putaran rotor terus
mengikuti arah vector fluks stator yang dihasilkan. Pada step 6, terjadi proses yang sama
dengan step-step sebelumnya, phasa yang diaktifkan adalah W-V yang artinya phasa W
terhubung ke kutub positif melalui (Q5) dan phasa V terhubung ke netral ground melalui
(Q4) sedangkan phasa U tidak diberikan sinyal dan selanjutnya proses putaran kembali lagi
ke step 1. Itulah 6 langkah (step) putaran elektris motor BLDC untuk melakukan 1 putaran
penuh mekanis motor BLDC.
Adapun bentuk gelombang pulsa yang dihasilkan dengan perubahan pada setiap
putaran sudut ditunjukkan pada gambar 2.11.
Gambar 2.13 Blok Diagram sistem kontroler dan driver pada motor BLDC
Berdasarkan kemampuan control power supply, bisa dipilih rating tegangan pada
motor sesuai kebutuhan. Apabila motor yang digunakan memiliki rating tegangan sebesar
48 V atau kurang dari itu, biasanya digunakan untuk bidang otomotif atau bidang robotik.
Berdasarkan prinsip kerja dari motor brushless DC dan cara kerja pengisian koil pada
motor brushless DC, maka cara kerja dari motor brushless DC dapat dideskripsikan.Akan
tetapi, sebelum mendeskripsikan skema cara kerja dari motor brushless DC ini, kita harus
memperhatikan table perubahan komutasi motor berdasarkan nilai sensor hall.
Sedangkan motor yang digunakan memiliki rating tegangan sebesar 100 V,
biasanya motor tersebut digunakan di bidang industri. Dalam melakukan perancangan atau
pembuatan dari driver dan inverter sendiri, harus diperlukan pemilihan atau tipe dari
MOSFET (Metal Oxide Semiconductor Field Effect Transistor) yang tepat sesuai
kebutuhan dari motor yang akan dikendalikan. Pada kontroler juga programnya harus
disesuaikan dengan motor. Selain MOSFET, dibutuhkan juga optocoupler yang berperan
sebagai penghubung antara rangkaian daya dengan rangkaian kontrol, dan sebagai
pengaman yang akan melindungi mikrokontroler dan MOSFET.
2. Stator
Stator merupakan bagian yang diam atau bersifat statis pada motor, yang berfungsi
sebagai medan putar motor untuk memberikan gaya elektromagnetik pada rotor sehingga
motor dapat berputar . Dapat di lihat pada gambar 2.13
Karena berbanding lurus dengan faktor-faktor lain yang mempengaruhi torsi maka
kenaikan dan penurunan arus sangat berpengaruh pada besarnya torsi yang dihasilkan
motor brushless DC. Selain itu, untuk mencari torsi melalui perbandingan antara berat
dengan kecepatan, maka diperlukan konversi dari putaran menjadi kecepatan dengan
menggunakan persamaan berikut ini.
m/s = (π . d. Rpm) /60000 (m/s)… ( 2.6 )
Dimana :
m/s = Kecepatan ( m/s )
d = Diameter motor ( mm ) Rpm = Putaran Motor
Untuk mengetahui torsi motor diperlukan fluks magnet. Kemudian untuk
mengetahui fluks magnet pada suatu motor brushless DC bisa menggunakan persamaan
berikut.
Dimana :
Ф = Fluks Magnet (Wb)
F = Gaya gerak magnet (At (Ampere-turn) ) l = Panjang kumparan ( m )
μ = Permeabilitas dari bahan magnet ( Wb/At ) A = Luas penampang kumparan ( m2 )
Untuk bentuk EMF balik trapezoidal nya dapat di lihat pada gambar 2.14 dibawah ini.
Gambar 2.14 Bentuk EMF balik trapezoidal yang dihasilkan motor brushless DC
3.Rotor
Rotor merupakan bagian penting juga pada motor yang berfungsi untuk menggerakan
atau membuat motor berputar. Perputaran tersebut terjadi akibat adanya gaya
elektromagnetik yang dihasilkan oleh stator. Untuk mengetahui putaran pada motor, bisa
menggunakan persamaan berikut ini.
Rotor pada motor brushless DC berbeda dengan rotor pada motor DC konvensional.
Pada motor DC konvensional rotornya tersusun dari 1 buah elektromagnet yang berada
diantara brushes (sikat) yang terhubung pada 2 buah elektroda yang terangkai ke suplai
DC. Sedangkan pada motor brushless DC bagian rotornya tersusun dari 2 hingga 8 pasang
kutub magnet permanen berbentuk persegi panjang yang saling direkatkan menggunakan
semacam “epoxy” dan tidak memiliki sikat yang dapat dilihat pada gambar 2.15
4. Axle
Axle atau sumbu adalah batang yang berfungsi sebagai sumbu putar motor, terpusat
pada rotor dan dirangkai bersama rotor dapat dilihat pada gambar 2.16
2.3.4.2 Memory
ATmega328 ini memiliki 32 KB dengan 0,5 KB digunakan untuk loading file. Ia
juga memiliki 2 KB dari SRAM dan 1 KB dari EEPROM.
2.3.4.3 Input & Output
Masing-masing dari 14 pin digital pada Uno dapat digunakan sebagai input atau
output, menggunakan fungsi pinMode(), digitalWrite(), dan digitalRead(). Mereka
beroperasi di 5 volt. Setiap pin dapat memberikan atau menerima maksimum 40 mA dan
memiliki resistor pull-up internal dari 20-50 KΩ. Selain itu, beberapa pin memiliki fungsi
khusus:
1. Serial: 0 (RX) dan 1 (TX). Digunakan untuk menerima (RX) dan mengirimkan (TX)
data TTL serial. Pin ini terhubung ke pin yang sesuai dari chip ATmega8U2 USB-to-
Serial TTL.
2. Eksternal Interupsi: 2 dan 3. Pin ini dapat dikonfigurasi untuk memicu interupsi pada
nilai yang rendah, tepi naik atau jatuh, atau perubahan nilai. Lihat attachInterrupt ()
fungsi untuk rincian.
3. PWM: 3, 5, 6, 9, 10, dan 11. Menyediakan 8-bit output PWM dengan analogWrite ()
fungsi.
4. SPI: 10 (SS), 11 (mosi), 12 (MISO), 13 (SCK). Pin ini mendukung komunikasi SPI
menggunakan perpustakaan SPI.
5. LED: 13. Ada built-in LED terhubung ke pin digital 13. Ketika pin adalah nilai
TINGGI, LED menyala, ketika pin adalah RENDAH, itu off.
Uno memiliki 6 input analog, diberi label A0 melalui A5, masing-masing
menyediakan 10 bit resolusi yaitu 1024 nilai yang berbeda. Secara default sistem
mengukur dari tanah sampai 5 volt.
1. TWI: A4 atau SDA pin dan A5 atau SCL pin. Mendukung komunikasi TWI
2. Aref. Referensi tegangan untuk input analog. Digunakan dengan analogReference ().
3. Reset.
Lihat juga pemetaan antara pin Arduino dan ATmega328 port. Pemetaan untuk
ATmega8, 168 dan 328 adalah identik.
2.3.4.4 Komunikasi
Uno Arduino memiliki sejumlah fasilitas untuk berkomunikasi dengan komputer,
Arduino lain, atau mikrokontroler lain. ATmega328 ini menyediakan UART TTL (5V)
komunikasi serial, yang tersedia pada pin digital 0 (RX) dan 1 (TX). Sebuah ATmega16U2
pada saluran board ini komunikasi serial melalui USB dan muncul sebagai com port virtual
untuk perangkat lunak pada komputer. Firmware Arduino menggunakan USB driver
standar COM, dan tidak ada driver eksternal yang dibutuhkan. Namun, pada Windows,
file. Inf diperlukan. Perangkat lunak Arduino termasuk monitor serial yang memungkinkan
data sederhana yang akan dikirim ke board Arduino. RX dan TX LED di board akan
berkedip ketika data sedang dikirim melalui chip USB-to-serial dan koneksi USB ke
komputer. ATmega328 ini juga mendukung komunikasi I2C (TWI) dan SPI. Fungsi ini
digunakan untuk melakukan komunikasi inteface pada system.
2.3.4.5 Programming
Uno Arduino dapat diprogram dengan perangkat lunak Arduino.Pilih Arduino Uno
dari Tool lalu sesuaikan dengan mikrokontroler yang digunakan.Para ATmega328 pada
Uno Arduino memiliki bootloader yang memungkinkan Anda untuk meng-upload program
baru untuk itu tanpa menggunakan programmer hardware eksternal. Ini berkomunikasi
menggunakan protokol dari bahasa C.
Sistem dapat menggunakan perangkat lunak FLIP Atmel (Windows) atau
programmer DFU (Mac OS X dan Linux) untuk memuat firmware baru. Atau Anda dapat
menggunakan header ISP dengan programmer eksternal .
2.3.4.6 Perangkat Lunak (Arduino IDE)
IDE itu merupakan kependekan dari Integrated Developtment Enviroenment, atau
secara bahasa mudahnya merupakan lingkungan terintegrasi yang digunakan untuk
melakukan pengembangan. Disebut sebagai lingkungan karena melalui software inilah
Arduino dilakukan pemrograman untuk melakukan fungsi-fungsi yang dibenamkan
melalui sintaks pemrograman. Arduino menggunakan bahasa pemrograman sendiri yang
menyerupai bahasa C. Bahasa pemrograman Arduino (Sketch) sudah dilakukan perubahan
untuk memudahkan pemula dalam melakukan pemrograman dari bahasa aslinya. Sebelum
dijual ke pasaran, IC mikrokontroler Arduino telah ditanamkan suatu program bernama
Bootlader yang berfungsi sebagai penengah antara compiler Arduino dengan
mikrokontroler.
Program yang ditulis dengan menggunaan Arduino Software (IDE) disebut sebagai
sketch. Sketch ditulis dalam suatu editor teks dan disimpan dalam file dengan ekstensi .ino.
Teks editor pada Arduino Software memiliki fitur” seperti cutting/paste dan
seraching/replacing sehingga memudahkan kamu dalam menulis kode program.
Pada Software Arduino IDE, terdapat semacam message box berwarna hitam yang
berfungsi menampilkan status, seperti pesan error, compile, dan upload program. Di bagian
bawah paling kanan Sotware Arduino IDE, menunjukan board yang terkonfigurasi beserta
COM Ports yang digunakan. Lingkungan open-source Arduino memudahkan untuk
menulis kode dan meng-upload ke board Arduino. Ini berjalan pada Windows, Mac OS X,
dan Linux. Berdasarkan Pengolahan, avr-gcc, dan perangkat lunak sumber terbuka lainnya.
Bentuk tampilan sofaware Arduino dapat dilihat pada gambar 2.19
2.3.5. Baling-baling/Propeller
Baling-baling (propeller) adalah alat untuk menjalankan pesawat terbang. Baling-
baling ini memindahkan tenaga dengan mengkonversi gerakan rotasi menjadi daya dorong
untuk menggerakkan sebuah kendaraan seperti pesawat terbang, untuk melalui suatu massa
seperti udara, dengan memutar dua atau lebih bilah kembar dari sebuah poros utama.
Sebuah propeler berperan sebagai sayap berputar, dan memproduksi gaya yang
mengaplikasikan prinsip Bernoulli dan hukum gerak Newton, menghasilkan sebuah
perbedaan tekanan antara permukaan depan dan belakang. Baling-baling yang digunakan
pada quadcopter berdimensi 10 x 4,5 inch. Seperti pada gambar 2.21
Ada 3 macam control PID yaitu control PI, PD, dan PID. PI adalah kontrol yang
menggunakan komponen proportional dan integratif. PD adalah kontrol yang
menggunakan komponen proportional dan derivatif. Dan PID adalah kontrol yang
menggunakan komponen proportional, integratif, dan derivatif.
2.4.1 Kontrol PI
1.Kontrol Proportional
Kontroller merupakan sebuah penguat input sehingga hasil pada output tidak semakin
menjadi kecil pada sebuah sistem. Output proportional adalah hasil pekalian antara
konstata proposional dengan nilai error nya. Perubahan yang terjadi pada sinyal input akan
menyebabkan sistem secara langsung mengubah output sebesar konstata pengalinya.
Adapun blok diagram Kp dapat di lihat pada gambar 2.24
U(t) = Kp e(t)
Pada diagram blok controller integral, menunjukan hubungan antara nilai error dengan
output. Kontorller integral membantu menaikan respon sehingga menghasilkan output
yang diinginkan. Dapat dilihat pada gambar 2.27 dan 2.28
Gambar 2.33 Blok Diagram Kontrol Kecepatan Motor Bldc Dengan PID Kontroler
Parameter yang digunakan dalam mengontrol keseimbangan motor adalah sudut
kemiringanyang terbaca oleh sensor MPU6050(gyroscope) terhadap nilai desire state dari
masing-masing setpoint. Sedangkan parameter outputnya adalah pulsa PWM dengan lebar
tertentu yang akan digunakan untuk mengatur kecepatan putar pada motor bldc.
Selanjutnya untuk melakukan proses stabilisasi sistem, digunakan pengontrol
PID. Rumus umum dari pengontrol PID adalah sebagai berikut :
(𝑡) = 𝑥𝑑(𝑡) − 𝑥(𝑡), 𝑡
𝑢(𝑡) = 𝐾 𝑒(𝑡) + 𝐾 ∫ 𝑒(𝑇)𝑑𝑇 + 𝑑𝑒(𝑡) (2.8)
𝐾
𝑃 𝐼 0 𝐷 𝑑𝑡
Dimana u(t) adalah kontrol input dane(t)adalah perbedaan antara keadaan yang
diinginkan dan x_(d )(t) keadaan sekarang x(t). k_p, k_I dan K_dadalah parameter atau
kontanta untuk elemen proporsional, integratif dan derivatif dari control PID. Bentuk
umum dari rumus kontroler PD pada persamaan (2.8) adalah sebagai berikut:
𝑢(𝑘) =
𝐾 . +1 𝐾 ( − ) (2.9)
𝑒 𝑒 𝑒
𝑃 𝑘 𝐷 𝑘 𝑘−1
𝑇
Selanjutnya pada Persamaan (2.9) tersebut ditambahkan komponen Integratif untuk
mengoreksi steady state eror yang terjadi pada sistem sehingga dihasilkan kontroler PID
yang dirumuskan sebagai berikut :
1
𝑢(𝑘) = 𝐾 . 𝑒 + 𝐾 . ∑𝑘 ) (2.10)
𝑃 𝐾 𝐼 0 𝑒𝑘 + 𝐾𝐷(𝑒𝑘 − 𝑒𝑘−1 𝑇
Persamaan (2.10) tersebut kemudian diterapkan pada program yang akan dibuat
dengan rumus pada persamaan (2.11):
𝑈(𝑘) = 𝐾𝑝 ∗ 𝑒𝑟𝑟𝑜𝑟 + 𝐾𝑖 ∗ 𝑖𝑛𝑡𝑒𝑔𝑟𝑎𝑙𝐸𝑟𝑟𝑜𝑟 + 𝐾𝑑 ∗ (𝑒𝑟𝑟𝑜𝑟 − 𝑙𝑎𝑠𝑡_𝑒𝑟𝑟𝑜𝑟) ; ( 2.11)
dengan,
𝐸𝑟𝑟𝑜𝑟 = 𝑆𝑃 − 𝑃𝑉
𝑖𝑛𝑡𝑒𝑔𝑟𝑎𝑙𝐸𝑟𝑟𝑜𝑟 = 𝑙𝑎𝑠𝑡𝑖𝑛𝑡𝑒𝑔𝑟𝑎𝑙𝐸𝑟𝑟𝑜𝑟 + 𝑒𝑟𝑟𝑜𝑟 ∗ 𝑇𝑠 ; Dimana :
U(k) = Nilai plant PID berupa nilai PWM yang akan diolah menjadi
kecepatan motoruntuk mengatur ketinggian pintu air
Kp = Nilai Konstanta Proporsional
Ki = Nilai Konstanta Integratif
Kd = Nilai Konstanta Derivaitf
last_error = Nilai error terakhir yang dideteksi sistem (nilai error t-1)
last_integralError = Nilai integral error terakhir
SP = Set Point
PV = Process Variable
Ts = Time sampling sistem, digunakan 0,06s
Pada Bab IV ini akan di kemukakan data hasil pengukuran dari pembahasan tentang
hasil perancangan Alat Uji Kendali Gerakan Pitch, Roll, dan Yaw. maka dari itu dapat kita
lihat pada pembahasan hasil di bawah ini.
Data Pulsa PWM Minimum pada tabel 4.1 dapat dilihat pada gambar 4.1
Dari data pengukuran Tabel 4.1 dapat diketahui bahwa relasi atau hubungan antara
sinyal control yang diberikan oleh pengendali Arduino melalui instruksi remote control
untuk nilai minimumnya adalah 1000µs denyut pulsa positif yang setara dengan 5% nilai
PWM, dapat kita lihat hasil oscilloscope nya pada gambar 4.1. sebaliknya pada saat
instruksi remote control untuk nilai maximum adalah 2000µs denyut pulsa positif yang
setara dengan 10% nilai PWM, dapat kita lihat hasil oscilloscope nya pada gambar
4.2.Selanjutnya hasil pengkuran dengan Oscilloscope pada gambar 4.3 dapat menjelaskan
lebar pulsa positif pada saat remote Minimum dan remote maximum dimana periodanya
tetap berada pada 20mS.
4.1.2 Pengujian Kecepatan dan tegangan Motor BLDC
Pengujian tegangan pada motor BLDC dengan persentasi PWM dalam kondisi
normal dapat di lihat pada tabel 4.2
Tabel 4.2 data PWM dengan kecepatan dan tegangan
M1 M2 M3 M4 M5 M6
Pulsa %
PWM PWM
Rpm Volt Rpm Volt Rpm Volt Rpm Volt Rpm Volt Rpm Volt
0,94
1100 5% 522 0,13 519 0,13 906 0,22 526 0,13 839 0,2 3756
6%
1200 1262 0,31 1241 0,31 2223 0,55 1257 0,31 1476 0,37 4432 1,1
6,5%
1300 2537 0,63 2455 0,6 3988 0,99 1953 0,49 2592 0,65 5021 1,25
7%
1400 2935 0,73 2814 0,7 4283 1,07 2432 0,61 2870 0,72 5982 1,5
7,5%
1500 3431 0,75 3337 0,83 4706 1,17 3164 0,79 3043 0,76 6422 1,6
Dari tabel 4.2 ini dapat kita lihat selisih dan persamaan seperti yang telah di jelaskan
pada persamaan [2.2], disaat pulsa PWM 1100µs kecepatan Motor M1 mencapai 522 Rpm
dimana tegangannya di sama dengan 0,13 Volt, maka dari hasil 0,13 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 520,78 Rpm. Disini terdapat selisih
1,22 Rpm pada saat motor di berikan tegangan 0,13 volt. Percobaan ke dua untuk motor
M1 disaat pulsa PWM 1200µs kecepatan Motor M1 mencapai 1262 Rpm dimana
tegangannya sama dengan 0,31 Volt, maka dari hasil 0,31 Volt yang didapatkan dikalikan
dengan 4006 Kv pada Motor sama dengan 1241,86 Rpm. Disini terdapat selisih 20,14
Rpm pada saat Motor diberikan tegangan 0,31 Volt.
Percobaan ke tiga untuk motor M1 disaat pulsa PWM 1300µs kecepatan Motor M1
mencapai 2537 Rpm dimana tegangannya sama dengan 0,63 Volt, maka dari hasil 0,63
Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor sama dengan 2523,78 Rpm.
Disini terdapat selisih 13,22 Rpm pada saat Motor diberikan Tegangan 0,31 Volt.
Percobaan ke empat untuk motor M1 disaat pulsa PWM 1400µs kecepatan Motor M1
mencapai 2935 Rpm dimana tegangannya sama dengan 0,73 Volt, maka dari hasil 0,73
Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor dengan 2924,38 Rpm. Disini
terdapat selisih 10,62 Rpm pada saat Motor diberikan Tegangan 0,73 Volt. Percobaan ke
lima untuk motor M1 disaat pulsa PWM 1500µs kecepatan Motor M1 mencapai 3431 Rpm
dimana tegangannya sama dengan 0,85 Volt, maka dari hasil 0,85 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 3405,1 Rpm. Disini terdapat selisih
25,9 Rpm pada saat Motor diberikan Tegangan 0,85 Volt.
Disaat pulsa PWM 1100µs kecepatan Motor M2 mencapai 519 Rpm dimana tegangannya
di sama dengan 0,13 Volt, maka dari hasil 0,13 Volt yang didapatkan dikalikan dengan
4006 Kv pada Motor sama dengan 520,78 Rpm. Disini terdapat selisih 1,78 Rpm pada saat
motor di berikan tegangan 0,13 volt. Percobaan ke dua untuk motor M2 disaat pulsa PWM
1200µs kecepatan Motor M2 mencapai 1241 Rpm dimana tegangannya sama dengan 0,31
Volt, maka dari hasil 0,31 Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor
sama dengan 1241,86 Rpm. Disini terdapat selisih 0,86 Rpm pada saat Motor diberikan
tegangan 0,31 Volt. Percobaan ke tiga untuk motor M2 disaat pulsa PWM 1300µs
kecepatan Motor M2 mencapai 2455 Rpm dimana tegangannya sama dengan 0,61 Volt,
maka dari hasil 0,63 Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor sama
dengan 2443,66 Rpm. Disini terdapat selisih 11,34 Rpm pada saat Motor diberikan
Tegangan 0,61 Volt.
Percobaan ke empat untuk motor M2 disaat pulsa PWM 1400µs kecepatan Motor
M2 mencapai 2814 Rpm dimana tegangannya sama dengan 0,7 Volt, maka dari hasil 0,7
Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor dengan 2804,2 Rpm. Disini
terdapat selisih 9,8 Rpm pada saat Motor diberikan Tegangan 0,7 Volt. Percobaan ke lima
untuk motor M2 disaat pulsa PWM 1500µs kecepatan Motor M2 mencapai 3337 Rpm
dimana tegangannya sama dengan 0,83 Volt, maka dari hasil 0,83 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 3324,98 Rpm. Disini terdapat selisih
12,02 Rpm pada saat Motor diberikan Tegangan 0,83 Volt.
Disaat pulsa PWM 1100µs kecepatan Motor M3 mencapai 906 Rpm dimana
tegangannya di sama dengan 0,22 Volt, maka dari hasil 0,22 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 881,32 Rpm. Disini terdapat selisih
23,68 Rpm pada saat motor di berikan tegangan 0,22 volt. Percobaan ke dua untuk motor
M3 disaat pulsa PWM 1200µs kecepatan Motor M3 mencapai 2223 Rpm dimana
tegangannya sama dengan 0,55 Volt, maka dari hasil 0,55 Volt yang didapatkan dikalikan
dengan 4006 Kv pada Motor sama dengan 2203,3 Rpm. Disini terdapat selisih 19,7 Rpm
pada saat Motor diberikan tegangan 0,55 Volt. Percobaan ke tiga untuk motor M3 disaat
pulsa PWM 1300µs kecepatan Motor M3 mencapai 3988 Rpm dimana tegangannya sama
dengan 0,99 Volt, maka dari hasil 0,99 Volt yang didapatkan dikalikan dengan 4006 Kv
pada Motor sama dengan 3965,94 Rpm. Disini terdapat selisih 22,06 Rpm pada saat Motor
diberikan Tegangan 0,99Volt.
Percobaan ke empat untuk motor M3 disaat pulsa PWM 1400µs kecepatan Motor
M3 mencapai 4283 Rpm dimana tegangannya sama dengan 1,07 Volt, maka dari hasil 1,07
Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor dengan 4286,42 Rpm. Disini
terdapat selisih 3,42 Rpm pada saat Motor diberikan Tegangan 1,07 Volt.Percobaan ke
lima untuk motor M3 disaat pulsa PWM 1500µs kecepatan Motor M3 mencapai 4706 Rpm
dimana tegangannya sama dengan 1,17 Volt, maka dari hasil 1,17 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 4687,02 Rpm. Disini terdapat selisih
18,98 Rpm pada saat Motor diberikan Tegangan 1,17 Volt.
Disaat pulsa PWM 1100µs kecepatan Motor M4 mencapai 526 Rpm dimana
tegangannya di sama dengan 0,13 Volt, maka dari hasil 0,13 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 520,78 Rpm. Disini terdapat selisih
5,22 Rpm pada saat motor di berikan tegangan 0,13 volt. Percobaan ke dua untuk motor
M4 disaat pulsa PWM 1200µs kecepatan Motor M4 mencapai 1257 Rpm dimana
tegangannya sama dengan 0,31 Volt, maka dari hasil 0,31 Volt yang didapatkan dikalikan
dengan 4006 Kv pada Motor sama dengan 1241,86 Rpm. Disini terdapat selisih 15,14
Rpm pada saat Motor diberikan tegangan 0,31 Volt. Percobaan ke tiga untuk motor M4
disaat pulsa PWM 1300µs kecepatan Motor M4 mencapai 1953 Rpm dimana tegangannya
sama dengan 0,49 Volt, maka dari hasil 0,49 Volt yang didapatkan dikalikan dengan 4006
Kv pada Motor sama dengan 1962,94 Rpm. Disini terdapat selisih 9,94 Rpm pada saat
Motor diberikan Tegangan 0,49 Volt.
Percobaan ke empat untuk motor M4 disaat pulsa PWM 1400µs kecepatan Motor
M4 mencapai 2432 Rpm dimana tegangannya sama dengan 0,61 Volt, maka dari hasil 0,61
Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor dengan 2443,66 Rpm. Disini
terdapat selisih 11,66 Rpm pada saat Motor diberikan Tegangan 0,61 Volt. Percobaan ke
lima untuk motor M4 disaat pulsa PWM 1500µs kecepatan Motor M4 mencapai 3164 Rpm
dimana tegangannya sama dengan 0,79 Volt, maka dari hasil 0,79 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 3164,74 Rpm. Disini terdapat selisih
0,74 Rpm pada saat Motor diberikan Tegangan 0,79 Volt.
Disaat pulsa PWM 1100µs kecepatan Motor M5 mencapai 839 Rpm dimana
tegangannya di sama dengan 0,2 Volt, maka dari hasil 0,2 Volt yang didapatkan dikalikan
dengan 4006 Kv pada Motor sama dengan 801,2 Rpm. Disini terdapat selisih 37,8 Rpm
pada saat motor di berikan tegangan 0,2 volt. Percobaan ke dua untuk motor M5 disaat
pulsa PWM 1200µs kecepatan Motor M5 mencapai 1476 Rpm dimana tegangannya sama
dengan 0,37 Volt, maka dari hasil 0,37 Volt yang didapatkan dikalikan dengan 4006 Kv
pada Motor sama dengan 1482,22 Rpm. Disini terdapat selisih 6,22 Rpm pada saat Motor
diberikan tegangan 0,37 Volt. Percobaan ke tiga untuk motor M5 disaat pulsa PWM
1300µs kecepatan Motor M5 mencapai 2592 Rpm dimana tegangannya sama dengan 0,65
Volt, maka dari hasil 0,65 Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor
sama dengan 2603,9 Rpm. Disini terdapat selisih 11,9 Rpm pada saat Motor diberikan
Tegangan 0,65 Volt.
Percobaan ke empat untuk motor M5 disaat pulsa PWM 1400µs kecepatan Motor
M5 mencapai 2870 Rpm dimana tegangannya sama dengan 0,72 Volt, maka dari hasil 0,72
Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor dengan 2884,32 Rpm. Disini
terdapat selisih 14,32 Rpm pada saat Motor diberikan Tegangan 0,72 Volt. Percobaan ke
lima untuk motor M5 disaat pulsa PWM 1500µs kecepatan Motor M5 mencapai 3043 Rpm
dimana tegangannya sama dengan 0,76 Volt, maka dari hasil 0,76 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 3044,56 Rpm. Disini terdapat selisih
1,56 Rpm pada saat Motor diberikan Tegangan 0,76 Volt.
Disaat pulsa PWM 1100µs kecepatan Motor M6 mencapai 3756 Rpm dimana
tegangannya di sama dengan 0,94 Volt, maka dari hasil 0,94 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 3765,64 Rpm. Disini terdapat selisih
9,64 Rpm pada saat motor di berikan tegangan 0,94 volt. Percobaan ke dua untuk motor
M6 disaat pulsa PWM 1200µs kecepatan Motor M6 mencapai 4432 Rpm dimana
tegangannya sama dengan 1,1 Volt, maka dari hasil 1,1 Volt yang didapatkan dikalikan
dengan 4006 Kv pada Motor sama dengan 4406,6 Rpm. Disini terdapat selisih 25,4 Rpm
pada saat Motor diberikan tegangan 1,1 Volt. Percobaan ke tiga untuk motor M6 disaat
pulsa PWM 1300µs kecepatan Motor M6 mencapai 5021 Rpm dimana tegangannya sama
dengan 1,25 Volt, maka dari hasil 1,25 Volt yang didapatkan dikalikan dengan 4006 Kv
pada Motor sama dengan 5007,5 Rpm. Disini terdapat selisih 13,5 Rpm pada saat Motor
diberikan Tegangan 1,25 Volt.
Percobaan ke empat untuk motor M6 disaat pulsa PWM 1400µs kecepatan Motor
M6 mencapai 5982 Rpm dimana tegangannya sama dengan 1,5 Volt, maka dari hasil 1,5
Volt yang didapatkan dikalikan dengan 4006 Kv pada Motor dengan 6009 Rpm. Disini
terdapat selisih 27 Rpm pada saat Motor diberikan Tegangan 1,5 Volt. Percobaan ke lima
untuk motor M6 disaat pulsa PWM 1500µs kecepatan Motor M6 mencapai 6422 Rpm
dimana tegangannya sama dengan 1,6 Volt, maka dari hasil 1,6 Volt yang didapatkan
dikalikan dengan 4006 Kv pada Motor sama dengan 6409,6 Rpm. Disini terdapat selisih
12,4 Rpm pada saat Motor diberikan Tegangan 1,6 Volt.
4.1.3 Pengujian kecepatan Motor BLDC dan kemiringan sudut
Hasil Pengujian kecepatan Motor BLDC didalam kondisi Gerakan Pitch, Roll, Yaw
dan kemiringan Sudut di ketiga Gerakan Tersebut, Pengambilan data dilakukan dengan
pengamatan / penglihatan mata untuk mengetahui kondisi hexacopter. Kecepatan dan
kemiringan Sudut Pitch, Roll, dan Yaw dapat dilihat pada tabel 4.3, 4.4, 4.5.
Gerakan Pitch adalah gerakan yang dihasilkan karena perbedaan putaran motor .
Ketika motor 2 , 4 & 5 putarannya lebih cepat dibandingkan dengan motor 1, 3 & 6 maka
yang terjadi adalah Pitch Up begitu pula sebaliknya ketika motor 2 , 5 & 6 lebih cepat
putarannya dibandingkan putaran motor 1 , 3 & 4 dan maka yang terjadi adalah Pitch
Down. Dapat di lihat pada tabel di 4.3
Tabel 4.3 Gerakan Pitch Up dan Pitch Down
Sudut Gerak M1 M2 M3 M4 M5 M6
0 Seimbang 704 Rpm 712 Rpm 706 Rpm 711 Rpm 714 Rpm 715 Rpm
0
250 605 Rpm 1306 Rpm 608 Rpm 1798 Rpm 1172 Rpm 598 Rpm
(pelan) (cepatl) (pelan) (cepat) (cepatl) (pelan)
Pitch Up
500 586 Rpm 1576 Rpm 604 Rpm 2223 Rpm 1146 Rpm 553 Rpm
(pelan) (cepat) (pelan) (cepat) (cepat) (pelan)
-250 606 Rpm 1243 Rpm 612 Rpm 605 Rpm 1170 Rpm 1750 Rpm
(pelan) (cepat) (pelan) (pelan) (cepat) (cepat)
-500 Pitch Down 596 Rpm 1431Rpm 611 Rpm 597 Rpm 1160 Rpm 2264 Rpm
(pelan) (cepat) (pelan) (pelan) (cepat) (cepat)
Dari hasil pengukuran tabel 4.3 maka Gerakan Pitch Up dan Pitch Down dapat
dilihat bahwa tabel 4.3 ini sesuai r Pengambilan data untuk Gerakan Pitch Up dan Pitch
Down kita menetapkan untuk hexacopter pada saat 700 Rpm untuk keadaan seimbang, jika
salah satu motor melebihi 700 Rpm dinyatakan dalam gerakannya Cepat dan sebaliknya
pada saat kecepatan kurang dari 700 Rpm dinyatakan Pelan. Dari tabel 4.3 kita dapatkan
grafik kecepatan pada Gerakan Pitch Up dan PichDown seperti gambar 4.4
1500 M6
1000
500
0 2550-25-50
Gambar 4.4 Grafik Kecepatan Gerakan Pitch Up dan Pitch Down
Gerakan Roll adalah gerakan yang dihasilkan karena perbedaan putaran pasangan
motor 1, 2 & 3 serta motor 4, 5 & 6. Ketika motor 1, 2 & 3 putarannya lebih cepat
dibandingkan dengan motor 4, 5 & 6 maka yang terjadi adalah Roll Up, begitu pula
sebaliknya ketika motor 4, 5 & 6 lebih cepat putarannya dibandingkan putaran motor 1, 2
& 3 maka yang terjadi adalah Roll Down. Dapat dilihat pada tabel 4.4
Tabel 4.4 Gerakan Roll Up dan Roll Down
Sudut Gerak M1 M2 M3 M4 M5 M6
00 Seimbang 719 Rpm 711 Rpm 707 Rpm 712 Rpm 708 Rpm 712Rpm
250 1253 Rpm 1222Rpm 1231 Rpm 602 Rpm 799 Rpm 558 Rpm
(cepat) (cepat) (cepat) (pelan) (pelan) (pelan)
Roll Up
500 1375 Rpm 1485 Rpm 1463 Rpm 596 Rpm 672 Rpm 557 Rpm
(cepat) (cepat) (cepat) (pelan) (pelan) (pelan)
-250 602 Rpm 598 Rpm 615 Rpm 1220 Rpm 1600 Rpm 1362 Rpm
(pelan) (pelan) (pelan) (cepat) (cepat) (cepat)
Roll Down
-500 1414 Rpm 1424Rpm 1423Rpm 2836 Rpm 1583 Rpm 1692 Rpm
(pelan) (pelan) (pelan) (cepat) (cepat) (cepat)
Dari hasil pengukuran tabel 4.4 maka Gerakan Roll Up dan Roll Down dapat dilihat bahwa
tabel 4.4 ini sesuai dengan dinamika Gerakan hexacopter. Pengambilan data untuk
Gerakan Roll Up dan Roll Down kita menetapkan untuk hexacopter pada saat 700 Rpm
untuk keadaan seimbang, jika salah satu motor melebihi 700 Rpm dinyatakan dalam
gerakannya Cepat dan sebaliknya pada saat kecepatan kurang dari 700 Rpm dinyatakan
Pelan.
Dari tabel 4.4 kita dapatkan grafik kecepatan pada Gerakan Roll Up dan Roll Down seperti
gambar 4.5
M6
400
200
0
25 50 -25 -50
Dari hasil pengukuran tabel 4.5 maka Gerakan Yaw Ccw dan Yaw Cw dapat dilihat
bahwa tabel 4.5 ini sesuai dengan dinamika hexacopter. Pengambilan data untuk Gerakan
Yaw Ccw dan Yaw Cw kita menetapkan untuk hexacopter pada saat 1500 Rpm untuk
keadaan seimbang, jika salah satu motor melebihi 1500 Rpm dinyatakan dalam gerakannya
Cepat dan sebaliknya pada saat kecepatan kurang dari 1500 Rpm dinyatakan Pelan.
Dari tabel 4.5 kita dapatkan grafik kecepatan pada Gerakan Yaw Ccw dan Yaw Cw
seperti gambar 4.6
2500
2000 M1
M2 M 3 M4 M5
Rpm
1500 M6
1000
500
0
25 50 -25 50
5.1 Kesimpulan
Kecepatan masing-masing motor yang relevan terhadap gerakan roll, pitch dan yaw
berbasis Arduino. Perbandingan kecepatan terhadap gerakan roll up yang relevan adalah
motor 1 (1375 Rpm) , 2 (1485 Rpm) dan 3 (1463 Rpm) cepat dan motor 4 ( 596 Rpm) , 5
(672 Rpm) dan 6 (557)pelan pada sudut 50°. Untuk gerakan roll down yang relevan adalah
motor 1 (603 Rpm) , 2 (559 Rpm) dan 3(604 Rpm) pelan dan motor 4 (1475 Rpm) , 5
(1583 Rpm) dan 6 (1692 Rpm) cepat pada sudut -50°. Untuk gerakan pitch up yang
relevan adalah Motor 2 (1576 Rpm) , 4 (2223 Rpm) dan 5 (1146 Rpm) cepat dan motor 1
(586 Rpm) , 3 (604 Rpm) dan 6 (553 Rpm) pelan pada sudut 50°. Untuk gerakan pitch
down yang relevan adalah motor 2 (1431 Rpm) , 5 (1160 Rpm) dan 6 (2264 Rpm) cepat
dan motor 1 (596 Rpm) , 3 (611 Rpm) dan 4 (597 Rpm) pelan pada sudut 50°. Untuk
gerakan yaw ccw motor 3 (2421 Rpm) dan 6 (2521 Rpm) cepat, motor 1 (607 Rpm) dan
4 (604 Rpm) pelan dan motor 2 (942 Rpm) dan 5 (934 Rpm) stabil pada sudut 50°.
Sedangkan untuk gerakan yaw cw motor 3 (601 Rpm) dan 6 (623 Rpm) pelan , motor 1
(2324 Rpm) dan 4 (2314 Rpm) cepat dan motor 2 (856 Rpm) dan 5 (862 Rpm) stabil
pada sudut -50°.
5.2 Saran
1. Untuk penelitian selanjutnya sebaiknya di lakukan dengan pengontrolan tuning otomatis.
2. Untuk penelitian selanjutnya di tambahakan gaya angkat beban pada hexacopter
DAFTAR PUSTAKA
[1] Else Orlanda Merti Wijaya (2017). Perancangan Sistem Keseimbangan Ball And
Beam Dengan Menggunakan Pengendali Pid Berbasis Arduino Uno. Jurnal Teknik
ItS, 8(1), 53–61.
[5] L. C. Dale, S. Darma, and P. Prawito, “Rancang Bangun Dan Kendali Semi-
Otomatis Hexacopter Dengan Algoritma Genetik a*,” vol. V, pp. SNF2016-CIP-
131-SNF2016-CIP-136, 2016.
[8] Subrata, R. H., Tarumasely, R., S, C. D., Elektro, J. T., Industri, F. T., Trisakti, U.,
Kiai, J., No, T., & Barat, J. (2017). PERANCANGAN PENGENDALI PID. 14, 1–16.
[9] Arsya, NR., Suryoatmojo, H. dan Anam, S., 2016. Desain Kontrol Kecepatan Motor
Brushless DC Berbasis Power Factor Correction (PFC) Menggunakan Single
Ended Primary Inductance Converter (SEPIC),
[10] Wicaksono, H., Yusuf, Y. G., & Yodinata, A. (2010). Altitude Lock Design for
QuadCopter Using Sonar Based on Fuzzy Controller. 2–7.
LAMPIRAN
Listing program
#include <Wire.h>
#include <Servo.h>
Servo f_right_prop;
Servo f_left_prop;
Servo c_right_prop;
Servo c_left_prop;
Servo b_right_prop;
Servo b_left_prop;
float Acceleration_angle[2];
float Gyro_angle[2];
float Total_angle[2];
float elapsedTime, time, timePrev;
int i;
float rad_to_deg = 180 / 3.141592654;
/////////////////PID CONSTANTS/////////////////
double kp = 0.1;
double ki = 0.2;
double kd = 0.85;
void setup() {
delay(7000);
}
void loop() {
timePrev = time; // the previous time is stored before the actual time read
time = millis(); // actual time read
elapsedTime = (time - timePrev) / 1000;
Wire.beginTransmission(0x68);
Wire.write(0x3B); //Ask for the 0x3B register- correspond to AcX
Wire.endTransmission(false);
Wire.requestFrom(0x68, 6, true);
Acc_rawX = Wire.read() << 8 | Wire.read(); //each value needs two registres
Acc_rawY = Wire.read() << 8 | Wire.read();
Acc_rawZ = Wire.read() << 8 | Wire.read();
Wire.beginTransmission(0x68);
Wire.write(0x43); //Gyro data first adress
Wire.endTransmission(false);
Wire.requestFrom(0x68, 6, true); //Just 4 registers
Serial.print("sudut = ");
Serial.println(Total_angle[1]);
error = Total_angle[1] - desired_angle;
pid_p = kp * error;
if (-3 < error < 3)
{
pid_i = pid_i + (ki * error);
}
pid_d = kd * ((error - previous_error) / elapsedTime);
PID = pid_p + pid_i + pid_d;
if (PID < -1000)
{
PID = -1000;
}
if (PID > 1000)
{
PID = 1000;
}
pwmf_right = throttle - PID;
pwmf_left = throttle - PID;
pwmc_right = throttle - PID;
pwmc_left = throttle - PID;
pwmb_right = throttle - PID;
pwmb_left = throttle - PID;
///
if (pwmf_right< 1100)//M6
{
pwmf_right = 1100;
}
if (pwmf_right> 1100)
{
pwmf_right = 1100;
}
///
if (pwmf_left< 1100)//M1
{
pwmf_left = 1100;
}
if (pwmf_left> 1100)
{
pwmf_left = 1100;
}
///
if (pwmc_right< 1100)//M5
{
pwmc_right = 1100;
}
if (pwmc_right> 1100)
{
pwmc_right = 1100;
}
///
if (pwmc_left< 1100)//M2
{
pwmc_left = 1100;
}
if (pwmc_left> 1100)
{
pwmc_left = 1100;
}
///
if (pwmb_right< 1100)//M4
{
pwmb_right = 1100;
}
if (pwmb_right> 1100)
{
pwmb_right = 1100;
}
///
if (pwmb_left< 1100)//M3
{
pwmb_left = 1100;
}
if (pwmb_left> 1100)
{
pwmb_left = 1100;
}
f_right_prop.writeMicroseconds(pwmf_right);
f_left_prop.writeMicroseconds(pwmf_left);
c_right_prop.writeMicroseconds(pwmc_right);
c_left_prop.writeMicroseconds(pwmc_left);
b_right_prop.writeMicroseconds(pwmb_right);
b_left_prop.writeMicroseconds(pwmb_left);