1. 1 Board Arduino Uno/DFRduino
2. 1 Motor driver 1A sebagai penggerak motor dc 6V
3. 2 Motor DC 6 V
4. 1 Stick Ps2 wireless beserta receivernya
5. 2 Roda Motor DC
6. 1 Baterai 9V
7. 1 Clip baterai 9V
8. 1 Jack Dc 3.5mm
9. 4 Baterai AA
10. Male in Header secukupnya
11. Female Pin Header
12. Kabel
13. Doa
Nah setelah mempersiapkan bahan-bahannya sekarang kita mulai merakit robot tapi sebelum merakit robot tersebut ada baiknya anda mengerti cara kerja daripada stick PS tersebut untuk itu perhatikan pada gambar berikut :
Sumbu Koordinat X dan Y |
Pada gambar diatas merupakan cara kerja dari analog stick yang terdiri dari 2 sumbu X dan Y pada sumbu Y terdapat nilai minimum 0, 128 sebagai nilai tengah dan 255 sebagai nilai maksimal sehingga apabila dalam posisi netral maka stick analog bernilai 128, 128 yang mana penerapannya pada motor robot yang akan kita buat pada posisi ini robot akan diam ( tidak bergerak ) sedangkan untuk membuat motor maju maka koordinat X < dari 128 dan untuk bergerak mundur nilai koordinat X > dari 128 sedang untuk bergerak ke kiri maka nilai koordinat Y < 128 dan untuk berbelok kekanan nilai koordinat Y > dari 128 untuk lebih jelas perhatikan pada gambar yang diarsir dengan warna.
Berdasarkan gambar diatas dapat diartikan seperti berikut :
- Motor bergerak maju apabila stick berada pada koordinat berwarna Merah
- Motor bergerak mundur apabila stick berada pada koordinat berwarna Kuning
- Motor berbelok ke kanan apabila stick berada pada koordinat berwarna Biru
- Motor berbelok ke kiri apabila stick berada pada koordinat berwarna Hijau
- Motor Berhenti apabila stick berada pada koordinat berwarna Putih
- Untuk maju maka : Y < 64 dan X di antara 64 dan 192
- Untuk mundur maka: Y > 192 dan X di antara 64 dan 192
- Untuk kanan maka : X > 192 dan Y di antara 64 dan 192
- Untuk kiri maka : X < 64 dan Y di antara 64 dan 192
- Maju: ((ps2x.Analog(PSS_RY) < 64) && ((ps2x.Analog(PSS_RX) >= 64) && (ps2x.Analog(PSS_RX) <= 192)))
- Mundur: ((ps2x.Analog(PSS_RY) < 64) && ((ps2x.Analog(PSS_RX) >= 64) && (ps2x.Analog(PSS_RX) <= 192)))
- Kanan:((ps2x.Analog(PSS_RX) < 64) && ((ps2x.Analog(PSS_RY) >= 64) && (ps2x.Analog(PSS_RY) <= 192)))
- Kiri:((ps2x.Analog(PSS_RX) < 64) && ((ps2x.Analog(PSS_RY) >= 64) && (ps2x.Analog(PSS_RY) <= 192)))
Skema receiver stick Ps2 Wireless |
- Pin Data
- Pin Command
- Pin Vibration Motor Power
- Pin Ground
- Pin Power 3.3V
- Pin Attention
- Pin Clock
- Pin Unknown
- Pin Acknowledge
- Pin 1 (Data) –> Pin Digital 12 Arduino
- Pin 2 (Command) –> Pin Digital 11 Arduino
- Pin 4 (Ground) –> Pin Ground Arduino
- Pin 5 (Power 3.3V) –> Pin 3.3V Arduino
- Pin 6 (Attention) –> Pin Digital 10 Arduino
- Pin 7 (Clock) –> Pin Digital 13 Arduino
Black Housing / female header pin |
Pin header Male |
Jumper kabel DIY |
Wireless Pins & Arduino Pins |
Anda dapat menambahkan led bila anda mau seperti robot yang saya buat ada dua led yang terpasang pada body robot satu di depan dan satu dibelakang ,...nah setelah semua pin terhubung maka kita tinggal membuat kode program yang kurang lebihnya seperti dibawah ini :
#include <PS2X_lib.h> //PS2X Library
int led1 = 4; //Penambahan Led 1
int led2 = 7; //Penambahan Led 2
//PS2X - Start
PS2X ps2x; // create PS2 Controller Class
int error = 0;
byte type = 0;
byte vibrate = 0;
//PS2X - End
// Constants for robot wheel.
const int RIGHTSPEED = 255; //right motor speed
const int LEFTSPEED = 255; //left motor speed
int motorR = 5; //right motor
int dirmotorR = 4; //motor direction
int motorL = 6; //left motor
int dirmotorL = 7; //motor direction
/*
* Initializes everything. Is run once.
*/
void setup() {
pinMode(led1, OUTPUT); // Tambahan Led1
pinMode(led2, OUTPUT); // Tambahan Led2
//PS2X - Start
Serial.begin(57600);
//Serial.begin(9600); // set up Serial library at 9600 bps
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. ");
}
//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;
case 2:
Serial.println("GuitarHero Controller Found");
break;
}
//PS2X - End
}
/*
* Runs continuously.
* 1. Update Servo.
* 2. Check IR range sensor.
* 3. Move Robot
*/
void loop() {
//PS2X - Start
if(error == 1) //skip loop if no controller found
return;
if(type == 2) //Guitar Hero Controller
return; //not used
else { //DualShock Controller
ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed
//if right analog stick is moved on Y axis forward-backward, or X axis right-left turn
if((ps2x.Analog(PSS_RY) < 64) && ((ps2x.Analog(PSS_RX) >= 64) && (ps2x.Analog(PSS_RX) <= 192)))
{
//move forward
digitalWrite(led1, HIGH);
Serial.println("FORWARD");
RMotor(RIGHTSPEED,true); // turn it on going forward
LMotor(LEFTSPEED,true); // turn it on going forward
digitalWrite(led1, LOW);
}
else if((ps2x.Analog(PSS_RY) > 192) && ((ps2x.Analog(PSS_RX) >= 64) && (ps2x.Analog(PSS_RX) <= 192)))
{
//move backward
digitalWrite(led2, HIGH);
Serial.println("BACKWARD");
RMotor(RIGHTSPEED,false); // turn it on going backward
LMotor(LEFTSPEED,false); // turn it on going backward
digitalWrite(led2, LOW);
}
else if((ps2x.Analog(PSS_RX) < 64) && ((ps2x.Analog(PSS_RY) >= 64) && (ps2x.Analog(PSS_RY) <= 192)))
{
//move left
Serial.println("LEFT");
RMotor(RIGHTSPEED,true); // turn it on going left
LMotor(LEFTSPEED,false); // turn it on going left
}
else if((ps2x.Analog(PSS_RX) > 192) && ((ps2x.Analog(PSS_RY) >= 64) && (ps2x.Analog(PSS_RY) <= 192)))
{
//move right
Serial.println("RIGHT");
RMotor(RIGHTSPEED,false); // turn it on going right
LMotor(LEFTSPEED,true); // turn it on going right
}
//using button up, down, right and left for movement
else if(ps2x.Button(PSB_PAD_UP))
{
Serial.print("Up held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
//move forward
Serial.println("FORWARD");
RMotor(RIGHTSPEED,true); // turn it on going forward
LMotor(LEFTSPEED,true); // turn it on going forward
}
else if(ps2x.Button(PSB_PAD_RIGHT))
{
Serial.print("Right held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
//move right
Serial.println("RIGHT");
RMotor(RIGHTSPEED,false); // turn it on going right
LMotor(LEFTSPEED,true); // turn it on going right
}
else if(ps2x.Button(PSB_PAD_LEFT))
{
Serial.print("LEFT held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
//move left
Serial.println("LEFT");
RMotor(RIGHTSPEED,true); // turn it on going left
LMotor(LEFTSPEED,false); // turn it on going left
}
else if(ps2x.Button(PSB_PAD_DOWN))
{
Serial.print("DOWN held this hard: ");
Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
//move backward
Serial.println("BACKWARD");
RMotor(RIGHTSPEED,false); // turn it on going backward
LMotor(LEFTSPEED,false); // turn it on going backward
}
else
{
//stopped
Serial.println("Robot Stopped!");
RMotor(0,false); //stopped
LMotor(0,false); //stopped
}
}
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);
//PS2X - End
}
// right motor
void RMotor(int pwmspeed, boolean forward) {
analogWrite(motorR, pwmspeed);
if (forward) {
digitalWrite(dirmotorR, HIGH);
}
else {
digitalWrite(dirmotorR, LOW);
}
}
//left motor
void LMotor(int pwmspeed, boolean forward) {
analogWrite(motorL, pwmspeed);
if (forward) {
digitalWrite(dirmotorL, HIGH);
}
else {
digitalWrite(dirmotorL, LOW);
}
}
Sebelum membuat kode program tersebut anda harus menginstal library yang dapat di download dari http://www.billporter.info/playstation-2-controller-arduino-library-v1-0/ setelah anda mendownload install library tersebut pada directory arduino anda tutorial ini dibuat berdasarkan pada FSR famosastudio.com .
Ok sampai disini tutorial saya selamat mencoba..........
gan minta library PS2 donk
BalasHapusSilahkan kesini gan http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1-0/ maaf balasnya lama
Hapusgan jika saya mengganti Motor driver 1A menjadi IC L932D, bisa tolong jelaskan di bagian mana saya harus mengganti programnya?
Hapusgan kalo saya menggunakan IC L293D sebagai pengganti Motor driver 1A , bisa tolong jelaskan di bagian mana saya harus mengganti programnya? terimakasih gan :)
HapusDriver motor l293d itu merupakan driver motor 1A gan, sebenarnya penggantian kode programnya tinggal agan ganti aja pin mana yang mau agan inputkan ke arduino kalau saya dari driver motor 1a nya saya inputkan ke pwn pin 5 arduino sedangkan motor kiri saya inputkan ke pin pwm 6 arduino sedangkan untuk direction kanan pin 4 arduino sedangkan kiri pin 7 arduino semoga ini dapat membantu agan.
BalasHapusGan, Sehabis Di Download Library-v1-0, Trus Di Apain Lagi Gan ??
BalasHapusSetelah di download bisa di gunakan dengan arduino IDE pak
Hapuskalau komponennya itu belinya dimana?
BalasHapusterima kasih
Boleh beli di saya boleh juga di tempat lain
Hapus