Belajar Arduino untuk Mengerakan Roda Mecanum

Belajar Arduino untuk Mengerakan Roda Mecanum - Hallo sahabat Arduino Libs - Ayo Belajar Arduino !, Pada Artikel yang anda baca kali ini dengan judul Belajar Arduino untuk Mengerakan Roda Mecanum, kami telah mempersiapkan artikel ini dengan baik untuk anda baca dan ambil informasi didalamnya. mudah-mudahan isi postingan Artikel Arduino, Artikel arduino driver, Artikel arduino mecanum, Artikel arduino uno, Artikel belajar arduino, Artikel driver mecanum, Artikel roda mecanum, Artikel shield adafruit, Artikel tutorial arduino, yang kami tulis ini dapat anda pahami. baiklah, selamat membaca.

Judul : Belajar Arduino untuk Mengerakan Roda Mecanum
link : Belajar Arduino untuk Mengerakan Roda Mecanum

Baca juga


Belajar Arduino untuk Mengerakan Roda Mecanum

Hallo-Hallo, bagaimana kabarnya sobat AWI'ers, Kali ini kami akan membahas tentang Roda mecanum dan bagaimana cara menggerakkannya dengan menggunakan Arduino. Berikut pokok pembahasan tentang topik hari ini
  • Apa Itu Mecanum
  • Bahan-bahan apa saja yang di butuhkan
  • Bagaimana cara pemrogramannya
Oke langsung saja

Mecanum
Mecanum atau Mecanum wheel menurut om Wikipedia "The Mecanum wheel is one design for a wheel which can move a vehicle in any direction". Kalau versi Indonesianya kurang lebih sebagai berikut : Salah satu jenis roda yang di desain bisa bergerak ke segalah arah. "SEGALA ARAH" yap, sobat sobat bisa menggerakkan maju, mundur, geser kiri, geser kanan tanpa merubah sudut posisi Mobile Robot yang menggunakan roda tipe ini.

Contohnya seperti ini

Pergerakan roda mecanum (gbr dari http://www.chiefdelphi.com/forums/showthread.php?p=1432211)
Bentuk mecanum, salah satunya seperti ini
Bahan-bahan apa saja yang di butuhkan
Bahan-bahan yang diperlukan untuk percobaan kali ini adalah
  • Arduino UNO
  • Arduino Adafruit Motor Shield
  • 2 Roda mecanum Right
  • 2 Roda Mecanum Left
  • 4 buah motor DC (high torsi)
  • 4 shaft motor to mecanum
  • 4 bracket L
  • Batere lippo 3 cell
  • Kabel Secukupnya

Pada projek kali ini menggunakan driver Adafruit Motor Shield karena shield ini mempunyai 4 output driver motor, sehingga pas untuk menggerakkan 4 roda.



Cara Pemrograman
  • siapkan arduino software terlebih dahulu
  • pastikan sudah terdeksi com portnya arduino
  • pilih board arduino uno pada software
  • pilih com yang sesuai dengan driver arduino yang sudah terinstall
  • tulis program seperti berikut ini
// Simple Adafruit Motor Shield sketch
// -----------------------------------
// edit by : sekolahrobot.com

// Arduino pins for the shift register
#define MOTORLATCH 12
#define MOTORCLK 4
#define MOTORENABLE 7
#define MOTORDATA 8

// 8-bit bus after the 74HC595 shift register
// (not Arduino pins)
// These are used to set the direction of the bridge driver.
#define MOTOR1_A 2
#define MOTOR1_B 3
#define MOTOR2_A 1
#define MOTOR2_B 4
#define MOTOR3_A 5
#define MOTOR3_B 7
#define MOTOR4_A 0
#define MOTOR4_B 6

// Arduino pins for the PWM signals.
#define MOTOR1_PWM 11
#define MOTOR2_PWM 3
#define MOTOR3_PWM 6
#define MOTOR4_PWM 5
#define SERVO1_PWM 10
#define SERVO2_PWM 9

// Codes for the motor function.
#define FORWARD 1
#define BACKWARD 2
#define BRAKE 3
#define RELEASE 4


void setup()
{
}


void loop()
{
  maju();
  delay(1000);
  mundur();
  delay(1000);
  geserkiri();
  delay(1000);
  geserkanan();
  delay(1000);
 
}
void maju()
{
   motore(1,200);
   motore(2,200);
   motore(3,200);
   motore(4,200);
}
void mundur()
{
   motore(1,-200);
   motore(2,-200);
   motore(3,-200);
   motore(4,-200);
}

void geserkanan()
{
   motore(1,200);
   motore(2,-200);
   motore(3,200);
   motore(4,-200);
 
}

void geserkiri()
{
   motore(1,-200);
   motore(2,200);
   motore(3,-200);
   motore(4,200);
 
}


// Initializing Library Driver
// ------------
// There is no initialization function.
//
// The shiftWrite() has an automatic initializing.
// The PWM outputs are floating during startup,
// that's okay for the Adafruit Motor Shield, it stays off.
// Using analogWrite() without pinMode() is valid.
//


// ---------------------------------
// motor
//
// Select the motor (1-4), the command,
// and the speed (0-255).
// The commands are: FORWARD, BACKWARD, BRAKE, RELEASE.
//
void motor(int nMotor, int command, int speed)
{
  int motorA, motorB;

  if (nMotor >= 1 && nMotor <= 4)
  { 
    switch (nMotor)
    {
    case 1:
      motorA   = MOTOR1_A;
      motorB   = MOTOR1_B;
      break;
    case 2:
      motorA   = MOTOR2_A;
      motorB   = MOTOR2_B;
      break;
    case 3:
      motorA   = MOTOR3_A;
      motorB   = MOTOR3_B;
      break;
    case 4:
      motorA   = MOTOR4_A;
      motorB   = MOTOR4_B;
      break;
    default:
      break;
    }

    switch (command)
    {
    case FORWARD:
      motor_output (motorA, HIGH, speed);
      motor_output (motorB, LOW, -1);     // -1: no PWM set
      break;
    case BACKWARD:
      motor_output (motorA, LOW, speed);
      motor_output (motorB, HIGH, -1);    // -1: no PWM set
      break;
    case BRAKE:
      // The AdaFruit library didn't implement a brake.
      // The L293D motor driver ic doesn't have a good
      // brake anyway.
      // It uses transistors inside, and not mosfets.
      // Some use a software break, by using a short
      // reverse voltage.
      // This brake will try to brake, by enabling
      // the output and by pulling both outputs to ground.
      // But it isn't a good break.
      motor_output (motorA, LOW, 255); // 255: fully on.
      motor_output (motorB, LOW, -1);  // -1: no PWM set
      break;
    case RELEASE:
      motor_output (motorA, LOW, 0);  // 0: output floating.
      motor_output (motorB, LOW, -1); // -1: no PWM set
      break;
    default:
      break;
    }
  }
}

void motore(int xMotor, int kecepatan)
{
  if(kecepatan >= 0 && kecepatan <= 255)
  {
      motor(xMotor, FORWARD, kecepatan);
  }
  if(kecepatan >= -255 && kecepatan <= -1)
  {
      kecepatan = map(kecepatan, -255, -1, 255, 1);
      motor(xMotor, BACKWARD, kecepatan);   
  }
}

// ---------------------------------
// motor_output
//
// The function motor_ouput uses the motor driver to
// drive normal outputs like lights, relays, solenoids,
// DC motors (but not in reverse).
//
// It is also used as an internal helper function
// for the motor() function.
//
// The high_low variable should be set 'HIGH'
// to drive lights, etc.
// It can be set 'LOW', to switch it off,
// but also a 'speed' of 0 will switch it off.
//
// The 'speed' sets the PWM for 0...255, and is for
// both pins of the motor output.
//   For example, if motor 3 side 'A' is used to for a
//   dimmed light at 50% (speed is 128), also the
//   motor 3 side 'B' output will be dimmed for 50%.
// Set to 0 for completelty off (high impedance).
// Set to 255 for fully on.
// Special settings for the PWM speed:
//    Set to -1 for not setting the PWM at all.
//
void motor_output (int output, int high_low, int speed)
{
  int motorPWM;

  switch (output)
  {
  case MOTOR1_A:
  case MOTOR1_B:
    motorPWM = MOTOR1_PWM;
    break;
  case MOTOR2_A:
  case MOTOR2_B:
    motorPWM = MOTOR2_PWM;
    break;
  case MOTOR3_A:
  case MOTOR3_B:
    motorPWM = MOTOR3_PWM;
    break;
  case MOTOR4_A:
  case MOTOR4_B:
    motorPWM = MOTOR4_PWM;
    break;
  default:
    // Use speed as error flag, -3333 = invalid output.
    speed = -3333;
    break;
  }

  if (speed != -3333)
  {
    // Set the direction with the shift register
    // on the MotorShield, even if the speed = -1.
    // In that case the direction will be set, but
    // not the PWM.
    shiftWrite(output, high_low);

    // set PWM only if it is valid
    if (speed >= 0 && speed <= 255)   
    {
      analogWrite(motorPWM, speed);
    }
  }
}


// ---------------------------------
// shiftWrite
//
// The parameters are just like digitalWrite().
//
// The output is the pin 0...7 (the pin behind
// the shift register).
// The second parameter is HIGH or LOW.
//
// There is no initialization function.
// Initialization is automatically done at the first
// time it is used.
//
void shiftWrite(int output, int high_low)
{
  static int latch_copy;
  static int shift_register_initialized = false;

  // Do the initialization on the fly,
  // at the first time it is used.
  if (!shift_register_initialized)
  {
    // Set pins for shift register to output
    pinMode(MOTORLATCH, OUTPUT);
    pinMode(MOTORENABLE, OUTPUT);
    pinMode(MOTORDATA, OUTPUT);
    pinMode(MOTORCLK, OUTPUT);

    // Set pins for shift register to default value (low);
    digitalWrite(MOTORDATA, LOW);
    digitalWrite(MOTORLATCH, LOW);
    digitalWrite(MOTORCLK, LOW);
    // Enable the shift register, set Enable pin Low.
    digitalWrite(MOTORENABLE, LOW);

    // start with all outputs (of the shift register) low
    latch_copy = 0;

    shift_register_initialized = true;
  }

  // The defines HIGH and LOW are 1 and 0.
  // So this is valid.
  bitWrite(latch_copy, output, high_low);

  // Use the default Arduino 'shiftOut()' function to
  // shift the bits with the MOTORCLK as clock pulse.
  // The 74HC595 shiftregister wants the MSB first.
  // After that, generate a latch pulse with MOTORLATCH.
  shiftOut(MOTORDATA, MOTORCLK, MSBFIRST, latch_copy);
  delayMicroseconds(5);    // For safety, not really needed.
  digitalWrite(MOTORLATCH, HIGH);
  delayMicroseconds(5);    // For safety, not really needed.
  digitalWrite(MOTORLATCH, LOW);
}

Test Robot


Demikianlah Artikel Belajar Arduino untuk Mengerakan Roda Mecanum

Sekianlah artikel Belajar Arduino untuk Mengerakan Roda Mecanum kali ini, mudah-mudahan bisa memberi manfaat untuk anda semua. baiklah, sampai jumpa di postingan artikel lainnya.

Anda sekarang membaca artikel Belajar Arduino untuk Mengerakan Roda Mecanum dengan alamat link https://arduinolibs.blogspot.com/2015/03/belajar-arduino-untuk-mengerakan-roda.html

0 Response to "Belajar Arduino untuk Mengerakan Roda Mecanum"

Post a Comment