×

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