JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS GADJAH MADA YOGYAKARTA 2010
2
I. LATAR BELAKANG Di dalam industri, sering dijumpai peralatan peralatan yang berat dan berbahaya bagi manusia. Untuk itu diperlukan alat untuk mengendalikan peralatan tersebut dari jarak jauh sebagai pertimbangan keselamatan kerja karyawan. Salah satu jenis penggerak peralatan berat yang sering digunakan adalah motor DC. Salah satu contohnya berfungsi menggerakkan alat pengangkut seperti conveyor untuk mengangkut bahan bahan industri yang berbentuk padat. Proses pengendalian alat alat berat akan lebih aman apabila dilakukan dari jarak jauh. Oleh karena itu, perlu adanya suatu alat yang mampu mengatur pergerakan alat alat berat melalui motor DC dari jarak tertentu. Pada penelitian kali ini dibuat sebuah prototype alat pengendali motor dc jarak jauh menggunakan komputer.
II. TUJUAN - Mendesain sebuah interface yang mampu mengkomunikasikan motor DC dengan manusia dalam jarak tertentu secara mudah. - Mendesain sebuah sistem pengendali motor DC yang mengintegrasikan peralatan elektronik dengan komputer sehingga memudahkan untuk sistem monitoring dan pengendalian.
III. METODE KERJA Secara umum dan sederhana sistem ini terdiri dari perangkat berikut : Komputer Komunikasi SerialSistem Mikrokontroler Driver Motor Motor DC
3
Perangkat PC akan dihubungkan dengan Sistem mikrokontroler melalui komunikasi serial RS232. Komunikasi ini memungkinkan perangkat PC untuk melakukan perintah tertentu terhadap mikrokontroler dan menerima output perintah dari mikroprosesor. Dengan bahasa lain output dari komputer akan menjadi input dari mikrokontroler. Kemudian input tersebut akan diproses sesuai dengan program yang sudah dimasukkan pada mikrokontroler tersebut. Output dari mikrokontroler selain di tampilkan pada layar computer juga digunakan untuk mengatur driver motor DC yang berfungsi sebagai kontrol kecepatan maupun arah gerak dari motor DC.
IV. PERANCANGAN a. Hyper-Terminal Agar komputer dapat berkomunikasi dengan mikrokontroler melalui komunikasi serial RS 232, digunakan hyper terminal. Biasanya fasilitas ini sudah tersedia pada komputer dengan sistem operasi windows XP. Untuk menggunakan fasilitas ini dilakukan dengan langkah langkah sebagai berikut. Start Programs Accessories Communications HyperTerminal Kemudian akan muncul jendela sebagai berikut.
Lalu setting pada hyper terminal disesuaikan dengan setting pada sistem mikrokontroler, yaitu dengan menyesuaikan setting bits per second, data bits, stop bits, dan flow control.
4
Dan jendela komunikasi antara pengguna dengan mikrokontroler ditampilkan pada jendela berikut.
b. Komunikasi serial RS 232 Bagian ini difungsikan untuk komunikasi antara sistem mikrokontroler dengan personal computer lewat saluran serial pada CPU PC. Untuk dapat berkomunikasi digunakan IC pendukung yang juga sebagai penghubung, yakni MAX232. MAX232 ini 5
terhubung dengan bagian Tx/Rx mikrokontroler ATMega8535. Rangkaian yang digunakan serta kabel serial RS 232 seperti tampak pada gambar berikut.
Gambar : Rangkaian IC serial MAX232
c. Pemrograman Mikrokontroler Program yang akan dibuat adalah sebuah program dimana mikrokontroler dapat melakukan komunikasi dengan komputer yaitu saling mengirim dan menerima data. Data yang diterima mikrokontroler dari komputer akan digunakan sebagai instruksi untuk melakukan pengendalian kecepatan motor. Adapun konfigurasi tombol yang diinginkan untuk mengatur kecepatan motor dc adalah sebagai berikut: konfigurasi tombol to mbol perintah 1 motor berhenti 2 PWM motor 50 3 PWM motor 100 4 PWM motor 150 5 PWM motor 200 6 PWM motor 250 7 PWM motor - 10 8 PWM motor + 10 9 PWM motor - 1 0 PWM motor + 1 - arah putar motor kiri = arah putar motor kanan
Perlu diketahui bahwa jika kita mengirim data dari komputer ke mikrokontroler melalui keyboard maka data yang diterima mikrokontroler akan berupa kode ASCII dari 6
tombol yang bersangkutan. Misal jika menekan tombol 1 maka data yang diterima mikrokontroler adalah biner 01010001 atau hexadecimal 31 dan seterusnya yang dapat dilihat di table ASCII. Kemudian untuk mengendalikan kecepatan motor digunakan pwm dimana pada mikrokontroler dapat dibangkitkan pulsa pwm melalui fitur timer/counter. Dalam ATMega8535 sendiri terdapat 3 buah timer yaitu timer0, timer1, dan timer2. Namun pada pembuatan alat ini hanya digunakan timer1 tepatnya ocr1a yang terdapat pada pin D.5. Untuk lebih jelasnya table ASCII dan penjelasan listing program lengkap dapat dilihat di lampiran.
d. Perangkat Keras Lainnya Sistem minimal ATMega 8535
Gambar : Rangkaian system minimal ATMega8535
Konfigurasi pin pada ATMega8535 Berikut keterangan untuk tiap pin-pin yang ada dalam ATMega8535: 1. Power, VCC dan GND (Ground) 2. PORTA (PORTA 0-7 ), merupakan IO dua arah dan berfungsi khusus sebagai pin masukan ADC. 7
3. PORTB (PORTB 0-7 ), merupakan pin IO dua arah dan fungsi khusus sebagai pin Timer/Counter, komparator analog dan SPI. 4. PORTC (PORTC 0-7 ), merupakan pin IO dua arah dan fungsi khusus. 5. PORTD (PORTD 0-7 ), merupakan pin IO dua arah dan fungsi khusus. 6. RESET adalah pin untuk me-reset mikrokontroler. 7. XTAL1 dan XTAL2 adalah pin untuk eksternal clock. 8. AVCC adalah pin masukan untuk tegangan ADC. 9. AREF adalah pin masukan untuk tegangan referensi eksternal ADC. Pada perancangan alat ini digunakan beberapa Pin sebagai input dan output yaitu: Pin D0 : digunakan untuk komunikasi serial sebagai penerima atau output ke komputer Pin D1 : digunakan untuk komunikasi serial sebagai pengirim atau input dari komputer Pin D5 : digunakan sebagai pengatur PWM Pin D6,D7 : digunakan sebagai pengatur arah dari mototr DC melalui driver motor.
e. Driver motor DC Driver motor sangat dibutuhkan karena keluaran yang dihasilkan mikroprosesor belum mampu untuk menggerakkan kedua motor yang ada. Tegangan keluaran mikroprosesor adalah sebesar 5V dan tegangan ini tidak cukup untuk memutar motor. Driver motor akan membuat tegangan tersebut sesuai dengan yang dibutuhkan oleh motor DC dalam prototype ini digunakan tegangan sebesar 9 V. Driver motor menggunakan IC L293D yang mampu mengatur dua motor namun dalam alat ini hanya digunakan untuk satu motor. untuk menyesuaikan. IC L293D membutuhkan 2 Vcc yaitu Vcc1 dan Vcc 2 . Vcc 1 berfungsi sebagai supply tegangan untuk mengaktifkan IC sedangkan Vcc 2 digunakan untuk supply motor. Pada prototype ini regulator Vcc2 menggunakan IC7809 yang mengubah tegangan sumber 12V menjadi senilai 9V, sedangkan regulator Vcc1 menggunakan IC 7805 yang mengubah 12 V menjadi 5V. Berikut konfigurasi pin IC L293D yang digunakan sebagai driver motor:
8
Vcc1 sebesar 5V Vcc2 merupakan tegangan yang akan digunakan untuk memutar motor dalam hal ini digunakan 9V A merupakan input dari mikro Y merupakan Output ke motor Input 1A dan 2A akan keluar pada port 1Y dan 2Y, port ini terhubung dengan motor kiri karena B5 dan B7 mengatur maju dan mundur motor kiri. Input 3A dan 4A akan keluar pada port 3Y dan 4Y yang terhubung langsung dengan motor kanan dan terhubung dengan port B4 dan B6. Atau secara umum pin-pin ini digunakan untuk mengatur arah putaran motor apakah maju atau mundur. 1,2 EN dan 3,4 EN merupakan masukan PWM - D4 tersambung dengan 3,4 EN - D5 tersambung dengan 1,2 EN Tegangan pada Pin ini bervariasi dari 0 sampai 9 volt. Tergantung pengaturan PWM. Jika di set maksimum maka tegangan yang keluar pada pin output adalah 9 volt sehingga motor berputar maksimum dan sebaliknya. Sehingga dikatakan bahwa PWM digunakan untuk mengatur kecepatan.
f. Metode PWM Metode Pulse Width Modulation (PWM) adalah metode yang cukup efektif untuk mengendalikan kecepatan motor DC. PWM ini bekerja dengan cara membuat gelombang persegi yang memiliki perbandingan pulsa high terhadap pulsa low yang telah tertentu, biasanya diskalakan dari 0 hingga 100%. Gelombang persegi ini memiliki frekuensi tetap, namun lebar pulsa high dan low dalam 1 periode yang akan diatur. Perbandingan pulsa high terhadap low ini akan menentukan jumlah daya yang diberikan ke motor DC. 9
V. HASIL PENGUJIAN Pertama rangkaian mikrokontroller, RS232, driver motor, motor dc, dan catu daya dihubungkan satu sama lain menjadi:
Kemudian setelah dihubungkan ke komputer lalu membuka hyper-terminal dengan seeting seperti telah dijelaskan di atas. Setelah jendela hyper-terminal dibuka akan muncul tampilan awal seperti: 10
Sesuai dengan program yang dibuat, maka untuk memulai tekan tombol space. Ketika tombol space ditekan akan muncul tampilan seperti:
Dari tampilan terlihat bahwa keadaan motor masih diam dengan arah putar motor searah jarum jam. 11
Kemudian jika ditekan tombol-tombol untuk menggerakkan motor tampilan pada hyper-terminal akan terus meng-update posisi PWM dan arah putar motor.
Dan pada kondisi ini motor sudah berputar sesuai dengan pwm dan arah putar motor yang kita tentukan. 12
Kemudian jika telah selesai tekan tombol k maka motor akan berhenti dan konfigurasi tombol-tombol sudah tidak berfungsi dan akan muncul tampilan:
VI. KESIMPULAN
1. Alat yang dibuat dapat bekerja sesuai dengan yang diharapkan. Komputer dan sistem mikrokontroler telah dapat saling mengirim dan menerima data. 13
2. Melalui komputer sistem pengendali motor DC dapat mengubah kecepatan serta arah putar motor DC dan memberikan informasi mengenai keadaan PWM kecepatannya saat itu. 3. Informasi yang terpantau oleh pengguna adalah keadaan PWM kecepatannya saat itu. Namun, sistem ini dapat dikembangkan lagi agar dapat memantau kecepatan rpm motor DC.
14
VII. LAMPIRAN
Tabel ASCII
15
Listing Program mikrokontroller :
#include <mega8535.h>//menggunakan mikrokontroler ATMega8535 #include <delay.h>//Menyertakan fungsi delay #include <stdio.h>//menyertakan library standar stdio.h (printf,scanf,dll)
//Mendefinisikan konstanta #define maju 0b01110111 #define mundur 0b10111011 #define pwm_motor OCR1A
void intro(void) //Fungsi untuk tampilan awal { putchar(13); printf("\n"); printf("Program kendali kecepatan dan arah putaran motor DC sederhana dengan cara mengubah PWM"); putchar(13); printf("\n"); printf("\n"); printf(" Dibuat oleh : Merizky Alfan Adhi / 31780"); putchar(13); printf("\n"); printf(" Hidayat Azza Lazuardi / 31924"); putchar(13); printf("\n"); printf(" Ja'far Junaidi / 32032"); putchar(13); printf("\n"); printf("\n"); printf(" Untuk mulai mengendalikan motor tekan tombol space"); putchar(13); printf("\n"); printf("\n"); printf(" Untuk Selesai tekan tombol k (KELUAR)"); }
16
//Fungsi tampilan menu void muncul(void) { putchar(13); printf("\n"); printf("\n"); printf("program kendali motor,, "); printf("masukkan PWM motor yg diinginkan :"); putchar(13); printf("\n"); printf("\n"); printf("tombol 1: motor berhenti"); putchar(13); printf("\n"); printf("tombol 2: PWM motor 50"); putchar(13); printf("\n"); printf("tombol 3: PWM motor 100"); putchar(13); printf("\n"); printf("tombol 4: PWM motor 150"); putchar(13); printf("\n"); printf("tombol 5: PWM motor 200"); putchar(13); printf("\n"); printf("tombol 6: PWM motor 250"); putchar(13); printf("\n"); printf("tombol 7: PWM motor -10"); putchar(13); printf("\n"); printf("tombol 8: PWM motor +10"); putchar(13); printf("\n"); printf("tombol 9: PWM motor -1"); putchar(13); printf("\n"); printf("tombol 0: PWM motor +1"); putchar(13); printf("\n"); printf("tombol -: arah putar motor kiri"); putchar(13); printf("\n"); printf("tombol =: arah putar motor kanan"); putchar(13); 17
printf("\n"); printf("\n"); printf("NB: -PWM maksimal 255"); putchar(13); printf("\n"); printf("\n"); printf(" -untuk menampilkan kembali konfigurasi tombol tekan space"); putchar(13); printf("\n"); printf("\n"); printf(" -Untuk Selesai tekan tombol k (KELUAR)"); putchar(13); printf("\n"); }
//Fungsi tampilan penutup void ending(void) { putchar(13); printf("\n"); printf("................................Alhamdulillah..... Rampung........................."); putchar(13); printf("\n"); printf("\n"); printf(" - untuk mulai kembali tekan tombol b (BACK)"); putchar(13); printf("\n"); printf(" - untuk selesai tidak perlu menekan apa-apa, selanjutnya terserah anda...."); putchar(13); printf("\n"); printf("\n"); printf(".......................................matur nuwun................................."); putchar(13); printf("\n"); }
void main(void)//Fungsi Utama { //Inisialisasi PORTD sebagai output PORTD=0x00; DDRD=0xFC;
// Inisialisasi komunikasi serial // dengan parameter 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud rate: 9600 (Double Speed Mode) UCSRA=0x02; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x67;
intro(); motor_kiri=0; a=0; b=0; status=0x31;
while(1) {
while (UCSRA.7) //apakah ada data baru yang belum dibaca { ee_data=UDR;//perubahan input dari keyboard disimpan di ee_data }
if (ee_data==0x31 && a==1 && status!=ee_data)//saat tombol 1 ditekan { pwm_motor=0; PORTD=ee_arah; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x31; } 19
if (ee_data==0x32 && a==1 && status!=ee_data) //saat tombol 2 ditekan { pwm_motor=50; PORTD=ee_arah; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13);printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x32; }
if (ee_data==0x33 && a==1 && status!=ee_data) //saat tombol 3 ditekan { pwm_motor=100; PORTD=ee_arah; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x33; }
if (ee_data==0x34 && a==1 && status!=ee_data) //saat tombol 4 ditekan { pwm_motor=150; PORTD=ee_arah; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); 20
printf("\n"); ee_data=0x70; status=0x34; }
if (ee_data==0x35 && a==1 && status!=ee_data) //saat tombol 5 ditekan { pwm_motor=200; PORTD=ee_arah; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x35; }
if (ee_data==0x36 && a==1 && status!=ee_data) //saat tombol 6 ditekan { pwm_motor=250; PORTD=ee_arah; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x36; }
if (ee_data==0x37 && a==1) //saat tombol 7 ditekan { if (pwm_motor>=10) { pwm_motor=pwm_motor-10; PORTD=ee_arah; ee_pwm=pwm_motor; 21
putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x37; c=1; } else if(c==1) { pwm_motor=0; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x37; c=2; } }
if (ee_data==0x38 && a==1) //saat tombol 8 ditekan { if (pwm_motor<=245) { pwm_motor=pwm_motor+10; PORTD=ee_arah; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; 22
status=0x38; c=1; } else if(c==1) { pwm_motor=255; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x38; c=2; } }
if (ee_data==0x39 && a==1) //saat tombol 9 ditekan { if (pwm_motor!=0) { pwm_motor=pwm_motor-1; PORTD=ee_arah; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x39; c=1; } else if(c==1) { pwm_motor=0; ee_pwm=pwm_motor; putchar(13); printf("\n"); 23
printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x39; c=2; } }
if (ee_data==0x30 && a==1) //saat tombol 0 ditekan { if (pwm_motor!=255) { pwm_motor=pwm_motor+1; PORTD=ee_arah; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x30; c=1; } else if(c==1) { pwm_motor=255; ee_pwm=pwm_motor; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x30; c=2; 24
} }
if (ee_data==0x2D && a==1 && status!=ee_data) //saat tombol - ditekan { ee_arah=maju; PORTD=ee_arah; ee_putar=0x3C; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x2D; }
if (ee_data==0x3D && a==1 && status!=ee_data) //saat tombol = ditekan { ee_arah=mundur; PORTD=ee_arah; ee_putar=0x3E; putchar(13); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); ee_data=0x70; status=0x3D; }
if (ee_data==0x20 && b==0) //saat tombol space ditekan { muncul(); putchar(13); printf("\n"); printf("\n"); printf("PWM motor saat ini %d",ee_pwm); putchar(13); printf("\n"); 25
printf("Arah Putaran Motor saat ini %c",ee_putar); putchar(13); printf("\n"); a=1; ee_data=0x70; }
if (ee_data==0x6B) //saat tombol k ditekan { pwm_motor=0; ee_pwm=pwm_motor; ending(); a=0; b=1; ee_data=0x70; }
if (ee_data==0x62) //saat tombol b ditekan { intro(); a=0; b=0; ee_data=0x70; }