×

Holomonic 3WD Omniwheel Robot

Langkah selanjutnya adalah melakukan instalasi software Android pada Smartphone, KlinikRobot menggunakan aplikasi yang dapat didownload di Play Store : BlueDuino (Arduino Joystick). Setelah instalasi selesai kita dapat coba hubungkan antara Smartphone dengan Bluetooth Module dan lihat hasil yang kita peroleh seperti apa?

Langkah terakhir adalah melakukan pemrograman pada Arduino untuk dapat mengendalikan Holomonic 3WD Robot dengan menggunakan Smartphone via Bluetooth. Berikut ini script yang digunakan :

#include <AFMotor.h>
#include <SoftwareSerial.h>
SoftwareSerial Samsung(A3, A2);
AF_DCMotor Motor3(2);
AF_DCMotor Motor2(3);
AF_DCMotor Motor1(4);
int status;
int stallPWM = 30;
int stepDelay = 7;
#define PI 3.14159265
float R = 0.5; // jari-jari base plate robot
int scaling_factor = 255;
void setup()
{
 //Serial.begin(9600); // start Arduino serial communication
 Samsung.begin(9600); // start Bluetooth HC-05/06 serial communication
 Motor1.setSpeed(255);
 Motor2.setSpeed(255);
 Motor3.setSpeed(255);
}
void loop()
{
 if (Samsung.available() > 0) {
   status = Samsung.read();
   Serial.println(status);
 }
 if (status == 'X') { // Semua motor mati
 calc_speed(0, 0, 0);
 }
 if (status == 'w') { // maju
 calc_speed(0, 1, 0);
 }
 if (status == 's') { // mundur
 calc_speed(0, -1, 0);
 }
 if (status == 'l') { // putar kiri
 calc_speed(0, 0, 1);
 }
 if (status == 'p') { // putar kanan
 calc_speed(0, 0, -1);
 }
 if (status == 'a') { // geser kiri
 calc_speed(-1, 0, 0);
 }
 if (status == 'd') { // geser kanan
 calc_speed(1, 0, 0);
 }
 if (status == 'b') { // diagonal jam 2
 calc_speed(1, 1, 0);
 }
 if (status == 't') { // diagonal jam 11
 calc_speed(-1, 1, 0);
 }
 if (status == 'v') { // diagonal jam 8
 calc_speed(-1, -1, 0);
 }
 if (status == 'c') { // diagonal jam 5
 calc_speed(1, -1, 0);
 }
}
   
void calc_speed(float x_dot, float y_dot, float theta_dot){
 // calculates motor speeds for 3 wheel omni drive robot
 float PWM1 = -R*theta_dot + x_dot ;
 float PWM2 = -R*theta_dot - 0.5*x_dot - sin(PI/3.0)*y_dot;
 float PWM3 = -R*theta_dot - 0.5*x_dot + sin(PI/3.0)*y_dot;
 int Dir1 = (PWM1 > 0) - (PWM1 < 0);   // returns -1 or 1
     if (Dir1 == -1) {
     Motor1.run(FORWARD);
     }
     else {
     Motor1.run(BACKWARD);
     }
 int Dir2 = (PWM2 > 0) - (PWM2 < 0);
     if (Dir2 == -1) {
     Motor2.run(FORWARD);
     }
     else {
     Motor2.run(BACKWARD);
     }
 int Dir3 = (PWM3 > 0) - (PWM3 < 0);
     if (Dir3 == 1) {
     Motor3.run(BACKWARD);
     }
     else {
     Motor3.run(FORWARD);
     }
 PWM1 = (int)abs(PWM1*scaling_factor); // scale in PWM range of [0, 255]
 PWM2 = (int)abs(PWM2*scaling_factor);
 PWM3 = (int)abs(PWM3*scaling_factor);
 Motor1.setSpeed(PWM1);
 Motor2.setSpeed(PWM2);
 Motor3.setSpeed(PWM3);
 
}

Semoga bermanfaat, selamat mencoba!

Produk ini sudah kami rakit dan siap untuk dijual, terdapat di MarketPlace KlinikRobot.

Pages: 1 2 3