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.
Post Comment
You must be logged in to post a comment.