Memprogram 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:
- Bagian deklarasi variabel
- Bagian setup, hanya dijalankan sekali
- 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
- Bagian fungsi untuk menggerakkan roda sesuai kondisi yang terbaca
- Bagian fungsi untuk mengatur gerakan motor (motor kanan & kiri), bergerak maju atau mundur
- 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 ([email protected])
* 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 */
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!
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
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.
wah makasih om buat buat penjelasannya tinggal nabung sisihin uang jajan nih π
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
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:
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 ([email protected])
* 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 π
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
Mas Baidhowi, mohon maaf belum sempat coba kode yang di seeedstudio. Nanti deh saya coba dan informasikan hasilnya.
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,,
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!
wess manteb om..
ternyata tinggal mainin delaynya aja ^^
makasih yo om bwt pencerahannya π
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
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.
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…
pak, gmn cara agar mikro servo bergerak hnya 90 derajat aja dari posisi awal horn lalu kembali ke posisi semula/normal?
terima kasih
mas,kalau source code sensor jarak Ultrasonic HC-SR04 yg pake atmega8535 bagaimana ya??
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.
Yang dirubah kode yang mana? Baris berapa? Diganti dengan kode apa?
pak,bisa minta tolong ,,,?saya ingin membuat robot compas.gmana caranya,dan bahan2 yang diperlukan?
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.
bang admin kalo saya mengganti motor shield apa saya harus merubah programnya?
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.
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 π
gan kalo untuk sensornya gk pake sevo bisa gk?