Anda di halaman 1dari 11

BAB IV

PEMBAHASAN

4.1 Pengujian Alat


Pada saat pengujian alat yang digunakan adalah digital joystick PS2, tidak
seperti analog joystick yang harus mengatur sumbu X dan Y , digital joystick lebih
sedikit sederhana dalam pengaturannya menggunakan program.

Gambar 4.1 Pengiriman Data Joystick PS2

Pada percobaan kami menggunakan :


= Maju = Stop

= Mundur

= Belok Kanan

= Belok Kiri

32
33

 Tabel Percobaan
NO DIGITAL JOYSTICK KONDISI ROBOT
Robot maju kedepan, akan terus
1 maju hingga tombol yang lain di
tekan
Robot mundur, akan terus mundur
2
hingga tombol selanjutnya ditekan

Robot belok ke kanan, akan terus


3 belok sampai berputar jika tidak
ditekan tombol “maju”

Robot belok ke kiri, akan terus belok


4 ke kiri sampai berputar jika tidak
ditekan tombol “maju”
Tombol ditekan, robot otomatis akan
5
berhenti

4.3 Pengujian Program


#include <AFMotor.h>
#include <PS2X_lib.h> //for v1.6

PS2X ps2x; // create PS2 Controller Class

//right now, the library does NOT support hot pluggable controllers, meaning
//you must always either restart your Arduino after you conect the controller,
//or call config_gamepad(pins) again after connecting the controller.
int error = 0;
byte type = 0;
byte vibrate = 0;
34

int led=7;
int le=0;

AF_DCMotor motor1(3,MOTOR12_8KHZ); //Declare right and left motors


AF_DCMotor motor2(4,MOTOR34_8KHZ);

void setup(){
Serial.begin(57600);
pinMode(led,OUTPUT);

error = ps2x.config_gamepad(13,11,10,12, true, true); //setup pins and settings:


GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error

if(error == 0){
Serial.println("Found Controller, configured successful");
Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press
harder;");
Serial.println("holding L1 or R1 will print out the analog stick values.");
Serial.println("Go to www.billporter.info for updates and to report bugs.");
}

else if(error == 1)
Serial.println("No controller found, check wiring, see readme.txt to enable debug.
visit www.billporter.info for troubleshooting tips");
else if(error == 2)
Serial.println("Controller found but not accepting commands. see readme.txt to
enable debug. Visit www.billporter.info for troubleshooting tips");
else if(error == 3)
Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
35

//Serial.print(ps2x.Analog(1), HEX);

type = ps2x.readType();
switch(type) {
case 0:
Serial.println("Unknown Controller type");
break;
case 1:
Serial.println("DualShock Controller Found");
break;
Serial.println("GuitarHero Controller Found");
break;
}
}

void loop(){
/* You must Read Gamepad to get new values
Read GamePad and set vibration values
ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
if you don't enable the rumble, use ps2x.read_gamepad(); with no values

you should call this at least once a second


*/
if(error == 1) //skip loop if no controller found
return;
if(type == 2){ //Guitar Hero Controller
ps2x.read_gamepad(); //read controller
if(ps2x.ButtonPressed(GREEN_FRET))
Serial.println("Green Fret Pressed");
36

if(ps2x.ButtonPressed(RED_FRET))
Serial.println("Red Fret Pressed");
if(ps2x.ButtonPressed(YELLOW_FRET))
Serial.println("Yellow Fret Pressed");
if(ps2x.ButtonPressed(BLUE_FRET))
Serial.println("Blue Fret Pressed");
if(ps2x.ButtonPressed(ORANGE_FRET))
Serial.println("Orange Fret Pressed");

if(ps2x.ButtonPressed(STAR_POWER))
Serial.println("Star Power Command");

if(ps2x.Button(UP_STRUM)) //will be TRUE as long as button is pressed


Serial.println("Up Strum");
if(ps2x.Button(DOWN_STRUM))
Serial.println("DOWN Strum");

if(ps2x.Button(PSB_START)) //will be TRUE as long as button is pressed


Serial.println("Start is being held");
if(ps2x.Button(PSB_SELECT))
Serial.println("Select is being held");

if(ps2x.Button(ORANGE_FRET)) // print stick value IF TRUE


{
Serial.print("Wammy Bar Position:");
Serial.println(ps2x.Analog(WHAMMY_BAR), DEC);
}
}
else { //DualShock Controller
37

ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin


at 'vibrate' speed
if(ps2x.Button(PSB_START)) //will be TRUE as long as button is pressed
Serial.println("Start is being held");
if(ps2x.Button(PSB_SELECT))
Serial.println("Select is being held");

if(ps2x.Button(PSB_PAD_UP)) { //will be TRUE as long as button is pressed


Serial.print("Up held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
motor1.setSpeed(255);
motor2.setSpeed(255);
motor1.run(BACKWARD);
motor2.run(FORWARD);
}
if(ps2x.Button(PSB_PAD_RIGHT)){
Serial.print("Right held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
le=1;
motor1.setSpeed(255);
motor2.setSpeed(255);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
if(ps2x.Button(PSB_PAD_LEFT)){
Serial.print("LEFT held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
motor1.setSpeed(255);
motor2.setSpeed(255);
38

motor1.run(BACKWARD);
motor2.run(BACKWARD);
}
if(ps2x.Button(PSB_PAD_DOWN)){
Serial.print("DOWN held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
motor1.setSpeed(255);
motor2.setSpeed(255);
motor1.run(FORWARD);
motor2.run(BACKWARD);
}
vibrate = ps2x.Analog(PSAB_BLUE); //this will set the large motor vibrate
speed based on //how hard you press the blue (X) button
if (ps2x.NewButtonState()) //will be TRUE if any button changes state (on to
off, or off to on)
{
if(ps2x.Button(PSB_L3))
Serial.println("L3 pressed");
if(ps2x.Button(PSB_R3))
Serial.println("R3 pressed");
if(ps2x.Button(PSB_L2))
Serial.println("L2 pressed");
if(ps2x.Button(PSB_R2))
Serial.println("R2 pressed");
if(ps2x.Button(PSB_GREEN))
Serial.println("Triangle pressed");
}
if(ps2x.ButtonPressed(PSB_RED)) //will be TRUE if button was JUST pressed
Serial.println("Circle just pressed");
39

if(ps2x.ButtonReleased(PSB_PINK)) //will be TRUE if button was JUST released


Serial.println("Square just released");
if(ps2x.Button(PSB_BLUE)) //will be TRUE if button was JUST pressed OR
released
{ Serial.println("X just changed");
le=1;}
if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) // print stick values if either is
TRUE
{
Serial.print("Stick Values:");
Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options:
LX, RY, RX
Serial.print(",");
Serial.print(ps2x.Analog(PSS_LX), DEC);
Serial.print(",");
Serial.print(ps2x.Analog(PSS_RY), DEC);
Serial.print(",");
Serial.println(ps2x.Analog(PSS_RX), DEC);
}
if(le==1){
digitalWrite(led,HIGH);
le=0;
}
else{
digitalWrite(led,LOW);
}
}
delay(50);
}
40

4.4 Analisa
Robot beroda berbasis Arduino dengan Sistem Kendali Joystik Ps2 Wireless
ini bekerja menggunakan modul joystick PS2 yang dikendalikan secara manual.
Operator akan menekan tombol-tombol pada joystick dan akan diterjemahkan oleh
mikrokontroler arduino. Untuk mengawali komunikasi dengan joystick PS2 yaitu
pada byte 1 Arduino mengirimkan data bit 0x01 sebagai start up selanjutnya pada
byte 2 arduino mengirimkan data bit 0x42 dan secara bersamaan joystick PS2
mengirimkan bit 0x41, pada byte kedua ini joystick mengirimkan nomor ID dan tipe
joystick. Kemudian pada byte 3 joystick mengirimkan bit 0x5A yang bearti Arduino
siap menerima perintah dari joystick berupa bit-bit yang berbeda yang
mengindikasikan tombol-tombol joystick mana yang ditekan. Selanjutnya Arduino
akan membaca data perintah tersebut dan memberikan sinyal ke output motor DC
berdasarkan tombol perintah joystick mana yang akan dikirimkan.
Arduino melakukan inisialisasi komunikasi joystick dengan saling
mengirimkan bit-bit data melalui komunikasi Serial Pheriperal Interface (SPI) yaitu
pada pin MISO, MOSI,SCK,dan SS. Pada pin MISO (Master Input Slave Output)
yang berfungsi sebagai jalur data dari master dan masuk kedalam slave, pin MOSI
(Master Output Slave Input) yang berfungsi sebagai jalur data keluar dari slave dan
masuk kedalam master, pin SCK (Serial Clock) berfungsi sebgaai clock dan
SS(Select Slave) berfungsi mengaktifkan slave. Dalam hal ini Arduino berfungsi
sebagai Master yaitu pengatur jalannya komunikasi data da joystick PS2 sebagai
Slave yaitu perangkat yang diajak berkomunikasi.
Penggunaan motor DC diaplikasikan sebagai penggerak roda robot , agar
dapat maju , mundur , belok ke kanan dan ke kiri sesuai yang diperintahkan oleh
operator dengan menekan tombol joystick yang diinginkan. Pada program terdapat
“ps2x.read_gamepad();” yang merupakan program intinya , program tersebut berarti
bahwa PS2 membaca kontroler.
41

4.5 Hasil Percobaan

Gambar 4.2 Hasil Percobaan Pada Arduino CC

Gambar 4.3 Hasil Percobaan Pada Arduino CC


42

Gambar 4. 4 Hasil Akhir Robot

Gambar 4.5 Hasil Akhir Robot

Anda mungkin juga menyukai