Memprogram Famosa Studio Robotik Kit

Tampilan Famosa Studio Robotik Kit

Ok, setelah sibuk dengan serunya merakit Famosa Studio Robotik Kit (FSRB), posting kali ini akan memperlihatkan program yang dipergunakan pada kit robotik tersebut. Oh ya, detil cara merakit FSRB bisa dilihat di sini: Part 1, Part 2 dan Part 3 :)

Sedikit penjelasan, FSRB adalah robot yang digerakkan dengan mikrokontroller, yaitu Arduino Uno/Arduino Leonardo, dengan tambahan Motor Shield 1A dan menggunakan sensor jarak Ultrasonic HC-SR04 sebagai ‘indra penglihatan’. Motor yang digunakan adalah 2 buah standard servo yang sudah dimodifikasi agar dapat berputar 360 derajat. Sebuah micro servo digunakan untuk menggerakkan sensor jarak ke kanan dan ke kiri.

Program yang dipakai pada FSRB diadaptasi dari program yang dibuat oleh George Frick dan dipublikasikan di sini. Ada beberapa perubahan yang dilakukan terhadap program tersebut untuk menyesuaikan dengan hardware yang kita pergunakan.

Secara garis besar, program tersebut terbagi atas beberapa bagian, sebagai berikut:

  1. Bagian deklarasi variabel
  2. Bagian setup, hanya dijalankan sekali
  3. Bagian loop, inilah program utamanya:
    • menggerakan servo dari sensor ke kanan dan ke kiri
    • membaca jarak antara robot dengan benda di sekelilingnya
    • mencatat kondisi gerak (maju, mundur, kanan, kiri)
    • menggerakkan roda
  4. Bagian fungsi untuk menggerakkan roda sesuai kondisi yang terbaca
  5. Bagian fungsi untuk mengatur gerakan motor (motor kanan & kiri), bergerak maju atau mundur
  6. Bagian fungsi untuk menghitung jarak yang terbaca oleh sensor

Update: Sensor Jarak Ultrasonic HC-SR04 pada program ini memakai library NewPing untuk mendapatkan perhitungan jarak yang lebih akurat. Library NewPing ini dapat di-download pada link ini. Copy folder NewPing dari dalam file zip yang telah di-download dan copy-kan ke dalam folder libary Arduino IDE anda.

Ok, program detil-nya dapat dilihat di bawah ini.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
/*
 * Program utk Famosa Studio Robotik Kit ini diadaptasi dari
 * program yang dibuat oleh
 * George Frick (george.frick@gmail.com)
 * dan dipublikasikan di sini:
 * http://georgefrick.blogspot.com/2010/02/arduino-robot-2-wandering-tank.html
 *
 * Famosa Studio Robotik Kit adalah produk robotik dari Toko Online Famosa Studio.
 * Dilengkapi Arduino Uno, Motor Shield 1A, Standard Servo, Micro Servo dan Ultrasonic HC-SR04.
 *
 */

#include <Servo.h>  

// Two motors, a servo, and an IR range sensor.
Servo sensorServo, centerServo;
const int irPin = A0; // analog pin 0

// Timing. I don't like using delay.
unsigned long tCnt = 0;
unsigned long tStart = 0;
unsigned long tDelta = 0;
unsigned long tTurn = 0;
unsigned long tTurnDur = 400;  //turn duration

int state;                  // Current Robot State
int lastState;              // Previous Robot State
int servoPos;               // Position to send servo
int centerPos;              // Center position to send servo
int servoDirection;         // Direction servo is turning
int lastDetectionAngle;     // Position of servo at last IR detect.
int sensorValue = 0;        // sensor value
const int minDistance = 20; // minimum distance 20 cm

// Constants for state of robot wheel
const int STATE_FORWARD = 1;
const int STATE_TURN_RIGHT = 2;
const int STATE_BACKWARD = 3;
const int STATE_TURN_LEFT = 4;  

// Constants for Servo.
const int DIR_LEFT = 0;
const int DIR_RIGHT = 1;
const int MIN_DEGREE = 40;
const int MAX_DEGREE = 140;  

// 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

// Using Ultrasonic Range Sensor HC-SR04
#include <NewPing.h>

#define TRIGGER_PIN  2  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     3  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 300 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

/*
 * Initializes everything. Is run once.
 */

void setup() {
  Serial.begin(9600);           // set up Serial library at 9600 bps
  sensorServo.attach(9);  // attaches the servo on pin 9
  centerServo.attach(10);  // attaches the servo on pin 10
  tStart = millis();
  lastState = state = STATE_FORWARD;
  servoPos = 90;
  centerPos = 90;
  servoDirection = DIR_RIGHT;
  sensorServo.write(servoPos);
  //state = 0; // Uncomment to have robot not move wheel.
}  

/*
 * Runs continuously.
 * 1. Update Servo.
 * 2. Check IR range sensor.
 * 3. Move Robot
 */
 

void loop() {
  tDelta = millis() - tStart;
  tCnt += tDelta;
  tStart += tDelta;  

  // Tell the servo to move 2 degrees every 25 ticks.
  if( tCnt > 25 ) {
    tCnt = 0;
    if( servoDirection == DIR_LEFT ) {
      servoPos -= 2;
    } else if( servoDirection == DIR_RIGHT) {
      servoPos += 2;
    }  

    // Servo position will be beyond desired angles, turn around.
    if( servoPos >= MAX_DEGREE ) {
      servoDirection = DIR_LEFT;
    } else if( servoPos <= MIN_DEGREE ) {
      servoDirection = DIR_RIGHT;
    }
    sensorServo.write(servoPos);
    centerServo.write(centerPos);
  }  

  // Allows disabling of tracks by setting state to 0.
  if(state == 0) {
    moveRobot();
    return;
  }  

  // sensorValue = read_gp2d12_range(irPin); //uncomment this line if using Sharp GP2D12
  int sensorValue = sonar.ping_cm(); // Send out the ping, get the results in centimeters.
  delay(25);
  if (sensorValue <= minDistance && sensorValue > 0) {
    lastDetectionAngle = servoPos;
    state = STATE_BACKWARD;
  } else {
    if( state == STATE_BACKWARD ) {
      if( lastDetectionAngle > 105 ) { // right
        state = STATE_TURN_LEFT;
        tTurn = tTurnDur;
      } else if( lastDetectionAngle < 75 ) { // left
        state = STATE_TURN_RIGHT;
        tTurn = tTurnDur;
      } else { // center
        state = STATE_TURN_RIGHT; // for now, turn right by default.
        tTurn = tTurnDur;
      }
    } else if ( state == STATE_TURN_RIGHT || state == STATE_TURN_LEFT ) {
      if (tTurn > tDelta) {
        tTurn -= tDelta;
      }
      if( tTurn <= 10 || tTurn < tDelta ) {
        state = STATE_FORWARD;
      }
    } else {
      state = STATE_FORWARD;
    }
  }  

  moveRobot();
}  

/*
 * Uses the state of the robot to move wheels accordingly
 */

void moveRobot() {  

  // The motors seemed to respond better if they receive a stop before a switch in direction.
  if( state != lastState ) {
    RMotor(0,false); //stopped
    LMotor(0,false); //stopped
  }  

  switch( state ) {
    default:
      return; // helps test, state 0 = dont move.
    case STATE_FORWARD: {
      RMotor(RIGHTSPEED,true); // turn it on going forward
      LMotor(LEFTSPEED,true);  // turn it on going forward
      break;
    }
    case STATE_BACKWARD: {
      RMotor(RIGHTSPEED,false); // turn it on going backward
      LMotor(LEFTSPEED,false);  // turn it on going backward
      break;
    }
    case STATE_TURN_RIGHT: {
      RMotor(RIGHTSPEED,false); // turn it on going right
      LMotor(LEFTSPEED,true);   // turn it on going right
      break;
    }
    case STATE_TURN_LEFT: {
      RMotor(RIGHTSPEED,true); // turn it on going left
      LMotor(LEFTSPEED,false); // turn it on going left
      break;
    }
  }  

  lastState = state;
}  

// 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);
  }
}

// Sharp GP2D12 read distance function
// Uncomment the code below if using Sharp GP2D12 for range sensor
/*float read_gp2d12_range(byte pin)
{
  int tmp;

  tmp = analogRead(pin);
  if (tmp < 3)
    return -1; // invalid value
  return (6787.0 /((float)tmp - 3.0)) - 4.0; // output in cm
} */


/* EOF */

Tampilan program pada software Arduino

Anda dapat menggunakan program tersebut untuk robot yang memiliki kemiripan hardware. Atau bila hardware yang digunakan berbeda, buat beberapa penyesuaian untuk hardware-hardware tersebut pada program di atas.

Selamat bereksperimen dengan Arduino untuk membuat robot!

Print Friendly

23 Responses to Memprogram Famosa Studio Robotik Kit

  1. razi says:

    mas kalau menggunakan 2A Motor Shield ada perubahan code gak dari source di atas?
    karena saya baru punya 2A Motor Shield, dan masih mencicil untuk komponen lainnya..
    makasih

    • Zerfani Yulias says:

      Mas Razi, kode program tidak perlu dirubah kalau menggunakan Motor Shield yang 2A. Karena hardware-nya punya fitur yang sama, beda di daya maksimumnya saja.

  2. razi says:

    wah makasih om buat buat penjelasannya tinggal nabung sisihin uang jajan nih 😀

  3. Ahmad Supandi says:

    setelah googlein ketemu jg source codenya, wah tapi saya menggunakan sensor ping))) bukan Sharp GP2D12, kira untuk penggunaan sensor ultrasonic codingnya gimana tuh mas?
    mungkin bisa sedikit di jelaskan..
    trims mas
    sukses selalu buat famosastudio

    • Zerfani Yulias says:

      Mas Ahmad Supandi, untuk bisa menggunakan Sensor Ping, tinggal mengganti sedikit program yang menghitung jarak obstacle. Kode program untuk Ping saya adaptasi dari link ini: Arduino Tutorial – Ping. Kira-kira kode program lengkapnya seperti dibawah ini:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
      100
      101
      102
      103
      104
      105
      106
      107
      108
      109
      110
      111
      112
      113
      114
      115
      116
      117
      118
      119
      120
      121
      122
      123
      124
      125
      126
      127
      128
      129
      130
      131
      132
      133
      134
      135
      136
      137
      138
      139
      140
      141
      142
      143
      144
      145
      146
      147
      148
      149
      150
      151
      152
      153
      154
      155
      156
      157
      158
      159
      160
      161
      162
      163
      164
      165
      166
      167
      168
      169
      170
      171
      172
      173
      174
      175
      176
      177
      178
      179
      180
      181
      182
      183
      184
      185
      186
      187
      188
      189
      190
      191
      192
      193
      194
      195
      196
      197
      198
      199
      200
      201
      202
      203
      204
      205
      206
      207
      208
      209
      210
      211
      212
      213
      214
      215
      216
      217
      218
      219
      220
      221
      222
      223
      224
      225
      226
      227
      228
      229
      230
      231
      232
      233
      234
      235
      236
      237
      238
      239
      240
      241
      242
      243
      244
      245
      246
      247
      248
      249
      250
      251
      252
      253
      254
      255
      256
      257
      258
      /*
       * Program utk Famosa Studio Robotik Kit ini diadaptasi dari
       * program yang dibuat oleh
       * George Frick (george.frick@gmail.com)
       * dan dipublikasikan di sini:
       * http://georgefrick.blogspot.com/2010/02/arduino-robot-2-wandering-tank.html
       *
       * Famosa Studio Robotik Kit adalah produk robotik dari Toko Online Famosa Studio.
       * Dilengkapi Arduino Uno, Motor Shield 1A, Standard Servo, Micro Servo dan Sharp GP2D12.
       *
       */
      #include <Servo.h>  

      // Two motors, a servo, and an IR range sensor.
      Servo sensorServo, centerServo;
      const int irPin = A0; // analog pin 0
      const int pingPin = 7; // pin for Ping Sensor

      // Timing. I don't like using delay.
      unsigned long tCnt = 0;
      unsigned long tStart = 0;
      unsigned long tDelta = 0;
      unsigned long tTurn = 0;
      unsigned long tTurnDur = 400;  //turn duration

      int state;                  // Current Robot State
      int lastState;              // Previous Robot State
      int servoPos;               // Position to send servo
      int centerPos;              // Center position to send servo
      int servoDirection;         // Direction servo is turning
      int lastDetectionAngle;     // Position of servo at last IR detect.
      int sensorValue = 0;        // sensor value
      const int minDistance = 20; // minimum distance 20 cm

      // Constants for state of robot wheel
      const int STATE_FORWARD = 1;
      const int STATE_TURN_RIGHT = 2;
      const int STATE_BACKWARD = 3;
      const int STATE_TURN_LEFT = 4;  

      // Constants for Servo.
      const int DIR_LEFT = 0;
      const int DIR_RIGHT = 1;
      const int MIN_DEGREE = 40;
      const int MAX_DEGREE = 140;  

      // 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() {
        Serial.begin(9600);           // set up Serial library at 9600 bps
        sensorServo.attach(9);  // attaches the servo on pin 9
        centerServo.attach(10);  // attaches the servo on pin 10
        tStart = millis();
        lastState = state = STATE_FORWARD;
        servoPos = 90;
        centerPos = 90;
        servoDirection = DIR_RIGHT;
        sensorServo.write(servoPos);
        //state = 0; // Uncomment to have robot not move wheel.
      }  

      /*
       * Runs continuously.
       * 1. Update Servo.
       * 2. Check IR range sensor.
       * 3. Move Robot
       */  

      void loop() {
        tDelta = millis() - tStart;
        tCnt += tDelta;
        tStart += tDelta;  

        // Tell the servo to move 2 degrees every 25 ticks.
        if( tCnt > 25 ) {
          tCnt = 0;
          if( servoDirection == DIR_LEFT ) {
            servoPos -= 2;
          } else if( servoDirection == DIR_RIGHT) {
            servoPos += 2;
          }  

          // Servo position will be beyond desired angles, turn around.
          if( servoPos >= MAX_DEGREE ) {
            servoDirection = DIR_LEFT;
          } else if( servoPos <= MIN_DEGREE ) {
            servoDirection = DIR_RIGHT;
          }
          sensorServo.write(servoPos);
          centerServo.write(centerPos);
        }  

        // Allows disabling of tracks by setting state to 0.
        if(state == 0) {
          moveRobot();
          return;
        }  

        //sensorValue = read_gp2d12_range(irPin);
        sensorValue = read_ping_range();
        delay(25);
        if (sensorValue <= minDistance && sensorValue > 0) {
          lastDetectionAngle = servoPos;
          state = STATE_BACKWARD;
        } else {
          if( state == STATE_BACKWARD ) {
            if( lastDetectionAngle > 105 ) { // right
              state = STATE_TURN_LEFT;
              tTurn = tTurnDur;
            } else if( lastDetectionAngle < 75 ) { // left
              state = STATE_TURN_RIGHT;
              tTurn = tTurnDur;
            } else { // center
              state = STATE_TURN_RIGHT; // for now, turn right by default.
              tTurn = tTurnDur;
            }
          } else if ( state == STATE_TURN_RIGHT || state == STATE_TURN_LEFT ) {
            if (tTurn > tDelta) {
              tTurn -= tDelta;
            }
            if( tTurn <= 10 || tTurn < tDelta ) {
              state = STATE_FORWARD;
            }
          } else {
            state = STATE_FORWARD;
          }
        }  

        moveRobot();
      }  

      /*
       * Uses the state of the robot to move wheels accordingly
       */
      void moveRobot() {  

        // The motors seemed to respond better if they receive a stop before a switch in direction.
        if( state != lastState ) {
          RMotor(0,false); //stopped
          LMotor(0,false); //stopped
        }  

        switch( state ) {
          default:
            return; // helps test, state 0 = dont move.
          case STATE_FORWARD: {
            RMotor(RIGHTSPEED,true); // turn it on going forward
            LMotor(LEFTSPEED,true);  // turn it on going forward
            break;
          }
          case STATE_BACKWARD: {
            RMotor(RIGHTSPEED,false); // turn it on going backward
            LMotor(LEFTSPEED,false);  // turn it on going backward
            break;
          }
          case STATE_TURN_RIGHT: {
            RMotor(RIGHTSPEED,false); // turn it on going right
            LMotor(LEFTSPEED,true);   // turn it on going right
            break;
          }
          case STATE_TURN_LEFT: {
            RMotor(RIGHTSPEED,true); // turn it on going left
            LMotor(LEFTSPEED,false); // turn it on going left
            break;
          }
        }  

        lastState = state;
      }  

      // 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);
        }
      }

      // START - Code for Ping Sensor
      // Ping Sensor read distance function
      int read_ping_range()
      {
        // establish variables for duration of the ping,
        // and the distance result in inches and centimeters:
        long duration, inches, cm;

        // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
        // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
        pinMode(pingPin, OUTPUT);
        digitalWrite(pingPin, LOW);
        delayMicroseconds(2);
        digitalWrite(pingPin, HIGH);
        delayMicroseconds(5);
        digitalWrite(pingPin, LOW);

        // The same pin is used to read the signal from the PING))): a HIGH
        // pulse whose duration is the time (in microseconds) from the sending
        // of the ping to the reception of its echo off of an object.
        pinMode(pingPin, INPUT);
        duration = pulseIn(pingPin, HIGH);

        // convert the time into a distance
        inches = microsecondsToInches(duration);
        cm = microsecondsToCentimeters(duration);
       
        return cm; //return range in cm
       
        //Serial.print(inches);
        //Serial.print("in, ");
        //Serial.print(cm);
        //Serial.print("cm");
        //Serial.println();
       
      }

      long microsecondsToInches(long microseconds)
      {
        // According to Parallax's datasheet for the PING))), there are
        // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
        // second).  This gives the distance travelled by the ping, outbound
        // and return, so we divide by 2 to get the distance of the obstacle.
        // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
        return microseconds / 74 / 2;
      }

      long microsecondsToCentimeters(long microseconds)
      {
        // The speed of sound is 340 m/s or 29 microseconds per centimeter.
        // The ping travels out and back, so to find the distance of the
        // object we take half of the distance travelled.
        return microseconds / 29 / 2;
      }
      // END - Code for Ping Sensor

      /* EOF */

      Silahkan dicoba. BTW, saya kebetulan tidak punya sensor Ping, jadi kode program diatas belum saya test dengan actual hardwarenya. Tapi harusnya sih sudah bisa berfungsi. Kalau Mas Ahmad Supandi sudah mencoba dan menemukan perlunya perbaikan, silahkan disampaikan, nanti saya revisi.
      Silahkan mencoba!

      Amiinn, semoga sukses juga untuk Mas Ahmad Supandi :)

      • cupu says:

        om source ini bisa di pake untuk sensor ini gak om? http://www.seeedstudio.com/depot/ultra-sonic-range-measurement-module-p-626.html?cPath=144_149

        aku coba kayanya bisa sih, kalo ada halangan roda bakal mundur,
        cuma yang aku bingung ini mobil kok gak mau maju yah >,< hanya salah satu roda aja yg maju, udh di bolak balik pemasangan +/- motor tapi sama aja tuh..

        @mas supandi
        gmn mas sudah berhasil kah? di share donk kalo ada revisi dari code om zerfani
        thanks

        • Zerfani Yulias says:

          Mas Baidhowi, mohon maaf belum sempat coba kode yang di seeedstudio. Nanti deh saya coba dan informasikan hasilnya.

          • cupu says:

            iah gpp om, kemarin sudah coba bljr buat codingannya sendiri walaupun masih nyontek source dari om 😀 dan alhamdulillah jalan, tapi ada yg masih bingung nih om,

            saya mau buat dengan kondisi seperti ini,
            jika ada benda di depan, kanan, dan kiri, makan mobil akan mutar 180 drajat,
            nah gmn tuh cara buat agar roda kiri bergerak maju 90drajat dan roba kanan mundur 90drajat
            pengen gugle cm bingung keywordnya >,<

            makasih om bwt pencerahannya
            salam,,

          • Zerfani Yulias says:

            Mas Baidhowi, untuk Sensor Ultrasonik dari SeeedStudio bisa memakai program yang sama dengan yang untuk Ping.

            Untuk berputar 90 derajat atau derajat putaran yang lain, lebih mudah kalau rodanya sudah pakai Wheel Encoder. Apa itu Wheel Encoder, bisa dilihat penjelasannya di link ini. Secara singkat, Wheel Encoder ini memungkinkan roda untuk bergerak dengan jarak atau kecepatan yang terukur. Jadi bisa membuat prosedur yang memungkinkan robot berputar 90 derajat sesuai kebutuhan kita. Di link tadi ada contoh programnya.

            Kalau tidak punya wheel encoder, ya mesti trial & error. Mencoba beberapa variable, salah satunya mungkin dengan mencoba menggunakan beberapa nilai delay yang dipasang pada saat robot berbelok, dicari delay yang pas sehingga robot berputar 90 derajat misalnya. Lamanya delay ini tergantung pada program yang sudah dibuat dan hardware yang digunakan. Bisa jadi servo yang saya gunakan, mempunyai kecepatan yang berbeda dengan servo yang digunakan Mas Baidhowi, sehingga nilai delaynya tidak akan sama.

            Silahkan mencoba!

  4. cupu says:

    wess manteb om..
    ternyata tinggal mainin delaynya aja ^^
    makasih yo om bwt pencerahannya 😀

  5. heru says:

    mas zerfani, saya punya RFID RDM630, ATmega8535 dan Motor micro servo, mohon pencerahannya, karena motor micro servonya gak bisa putar seperti yang saya inginkan, (90 dan -90 derajat), dan RFID gak bisa detek kartu RFID tag, mohon bantuannya, terima kasih

    • Admin says:

      Ok, kebetulan saya hanya familiar dengan Arduino, jadi contoh-contoh yang saya berikan biasanya untuk aplikasi pada Arduino.

      Cara menggunakan RFID RDM630 dengan Arduino, dapat dilihat di sini.
      Untuk menggerakkan servo, bisa dilihat pada tutorial ini.

      Mudah-mudahan bisa membantu.

  6. Perdana S says:

    Bang admin, setelah saya mengupload kode program yang dipublish dihalaman blog ini. Perangkat arduino saya malah mundur terus dan reaksinya sangat lambat. Padahal tidak ada rintangan/hambatan didepannya tapi robotnya mundur terus…

    kira-kira permasalahannya dimana bang?

    setelah kode program saya otak-atik, saya menemukan kalau sensor ultrasoniknya tidak berfungsi karena adanya pemanggilan prosedur moveRobot() dalam loop kode program.

    mohon bantuannya bang…

  7. teja says:

    pak, gmn cara agar mikro servo bergerak hnya 90 derajat aja dari posisi awal horn lalu kembali ke posisi semula/normal?
    terima kasih

  8. iwan says:

    mas,kalau source code sensor jarak Ultrasonic HC-SR04 yg pake atmega8535 bagaimana ya??

  9. fadhli says:

    untuk coding robot kit diatas kok waktu saya program ulang servo SG90 lambat ya pak??kira coding yang perlu saya rubah dibagian yang mana,mohon pencerahannya.

  10. chibald says:

    pak,bisa minta tolong ,,,?saya ingin membuat robot compas.gmana caranya,dan bahan2 yang diperlukan?

    • Zerfani Yulias says:

      1. Bahan-bahan untuk membuat robot
      2. Sensor kompas atau magnetometer, bisa pakai yang ini.
      3. Buat algoritma sehingga robot akan bergerak sesuai arah kompas yang diinginkan.

  11. lando basana says:

    bang admin kalo saya mengganti motor shield apa saya harus merubah programnya?

    • Zerfani Yulias says:

      Kalau konfigurasi pin dari shield yang baru itu berbeda dengan shield yang kita pakai, tentu anda harus melakukan penyesuaian agar program ini juga bisa dipakai dengan shield tersebut.

  12. sains says:

    Mas saya mau konsultasi mas,saya baru mulai pakai arduino uno r3,untuk menggerak rodanya di lebih sarankan motor dc apa motor servo standar mas ? Di arduino itu rangkaian mmakai skematik tdk yah mas untuk rakitnya,mohon pencerahan mas untuk konsultasinya :)

  13. yogi says:

    gan kalo untuk sensornya gk pake sevo bisa gk?

Leave a Reply

Your email address will not be published. Required fields are marked *