18. Pembelajaran Hacking Mobil R/C pada Arduino

18. Pembelajaran Hacking Mobil R/C pada Arduino

Pembelajaran ini mengupas cara mengubah mobil yang dikendalikan oleh remote control (R/C) agar bisa dikontrol oleh Arduino. Dengan cara seperti ini, dimungkinkan untuk menambahkan fitur-fitur tertentu, seperti sensor ultrasonik agar tidak menabrak objek yang ada di depannya atau di belakangnya. Bab ini mengupas cara mengubah mobil yang dikendalikan oleh remote control (R/C) agar bisa dikontrol oleh Arduino. Dengan cara seperti ini, dimungkinkan untuk menambahkan fitur-fitur tertentu, seperti sensor ultrasonik agar tidak menabrak objek yang ada di depannya atau di belakangnya.

18.1 Persiapan Awal

Untuk mempraktikkan proyek ini, sebuah mobil R/C yang masih berfungsi, termasuk bagian R/C, perlu dipersiapkan. Gambar 18.1 memperlihatkan contoh dua mobil R/C yang dapat digunakan untuk mewujudkan proyek ini.

Gambar 18.1 Contoh mobil dengan remote control

Hal pertama yang perlu dilakukan adalah membongkar mobil tersebut dan kemudian memisahkan bagian yang tidak diperlukan. Contoh di Gambar 18.2 memperlihatkan keadaan setelah mobil dibongkar dan bagianbagian yang tidak diperlukan dipisahkan. Bagian terkiri adalah bagian yang akan digunakan untuk proyek ini, sedangkan yang lain tidak diperlukan.

Description Setelah bagian yang tidak diperlukan disingkirkan, mobil perlu diuji dengan menggunakan R/C. Harus dipastikan bahwa mobil masih bisa dikontrol oleh R/C.

Sekarang, marilah kita perhatikan bagian penerima R/C yang berfungsi sebagai pengendali motor. Secara prinsip, mobil R/C memiliki dua motor DC. Motor di bagian depan berfungsi untuk mengatur mobil agar bisa dibelokkan ke kiri atau ke kanan. Motor di belakang berguna untuk menggerakkan mobil ke depan atau ke belakang. Nah, kedua motor tersebut dikendalikan oleh empat pin, dengan nilai pin dalam keadaan HIGH atau LOW, ditentukan oleh keadaan tombol pengatur gerakan di RIC. Gambar 18.3 memperlihatkan pin-pin yang mengatur kedua motor. Dalam hal ini,

  • F (Forward) digunakan untuk menggerakkan mobil ke depan;
  • B (Backward) digunakan untuk menggerakkan mobil ke belakang;
  • R (Right) F (Forward) digunakan untuk membelokkan mobil ke kanan;
  • L (Left) digunakan untuk membelokkan mobil ke kiri.

Gambar 18.3 Bagian penerima R/C yang mengendalikan motor mobil R/C

Untuk keperluan percobaan, keempat kabel yang terhubung ke pin-pin tersebut perlu dilepas terlebih dahulu. Untuk memudahkan penyambungan di belakang, keempat pin dipasang kawat pendek sehingga kelak dapat dihubungkan dengan menggunakan colokan kabel berjenis female. Tentu saja, solder diperlukan untuk melakukan hal ini. Namun, sebelum pelepasan kabel dilakukan, catatlah kabel-kabel yang terhubung ke pin masing-masing karena akan digunakan pada penghubungan kabel-kabel tersebut ke pin Arduino. Untuk mempermudah, tempelkan stiker pada kabel dan tuliskan F, B, L, atau R pada stiker-stiker tersebut.

Selanjutnya, rangkaian seperti terlihat di Gambar 18.4 perlu disusun. Contoh real penyusunan rangkalan di mobil diperlihatkan di Gambar 18.5.

Gambar 18.5 Susunan mobil R/C yang telQh dilengkapi pengendali

Untuk keperluan pengendalian motor terkait dengan pin F, B, L, dan R di pengendali asat (Gambar 18.3), empat relai dipakai. Penggunaan relai dimaksudkan untuk menekan biaya dibandingkan kalau menggunakan motor driver seperti L298N. Namun, jika Anda memilki motor driver, Anda bisa menggantikan relai dengannya.

Pada percobaan yang digunakan, mobil menggunakan baterai Axl,SV atau 6V. Oleh karena tegangan yang boleh masuk ke pin digital hanya 5V, maka pembagi tegangan diperlukan. Konsep pembagi tegangan diperlihatkan di Gambar 18.6. Berdasarkan gambar tersebut, Vour diperoleh dengan rumus :

Vout = VIN x R2 / (RI + R2)

Dengan menggunakan RI = 4,7K, R2 = 22K, dan VIN = 6 maka Vout = 4.94V

Gambar 18.6 Pembagi Tegangan

18.2 Pengunggahan Sketch

Untuk kepentingan pengendalian mobil R/C, Arduino perlu dihubungan ke PC. Kemudaian unggahkan skrip berikut ke papan Arduino:

Sketch: mobilrc

// ——————————————–

// Pengendalian Mobil R/C

// menggunakan Arduino

// ——————————————–

const int PIN_RC L=2;

const int PIN_RC R=3;

const int PIN_RC B=4;

const int PIN_RC F=5;

const int PIN_MOTOR_L= 6;

const int PIN_MOTOR R=7;

const int PIN_MOTOR_ B=8;

const int PIN_MOTOR_F= 9;

void setup()

{

pinMode(PIN_RC L, INPUT);

pinMode (PIN_RC R, INPUT);

pinMode(PIN_RC B, INPUT);

pinMode(PIN_RC F, INPUT);

pinMode(PIN_MOTOR_L, OUTPUT);

pinMode (PIN_MOTOR_R, OUTPUT) ;

pinMode (PIN_MOTOR_B, OUTPUT);

pinMode (PIN_MOTOR_F, OUTPUT) ;

digitalWrite(PIN_MOTOR_L,LOW);

digitalWrite(PIN_MOTOR_R, LOW);

digitalWrite(PIN_MOTOR_E, LOW);

digitalWrite(PIN_MOTOR_B, LOW);

Serial.begin(9600);

}

void loop()

{

// Cek R/C kiri

int nilai_rc_1= digitalRead(PIN_RC_L);

if (nilai rc_1 ==HIGH)

digitalWrite(PIN_MOTOR_L, HIGH);

else

digitalWrite(PIN_MOTOR_L, LOW);

// Cek R/C kanan

int nilai_rc_r= digitalRead(PIN_RC_R);

if (nilai rc r == HIGH)

digitalWrite(PIN_MOTOR_R, HIGH);

else

digitalWrite(PIN_MOTOR_R, LOW);

// Cek R/C ke belakang

int nilai_rc_b= digitalRead(PIN_RC_B);

if (nilai_rc_b == HIGH)

digitalWrite(PIN_MOTOR_B, HIGH);

else

digitalWrite(PIN_MOTOR_B, LOW);

// Cek R/C ke depan

int nilai_rc_f = digitalRead(PIN_RC_F);

if (nilai rc f== HIGH)

digitalWrite(PIN_MOTOR_F, HIGH);

else

digitalWrite(PIN_MOTOR_F,LOW);

Serial.print(“LRBF:”);

Serial.print(nilai_rc_1);

Serial.print(nilai_rc_r);

Serial.print(nilai_rc_b);

Serial.println(nilai_rc_f);

}

Logika di balik di sketch di atas adalah membaca nilai setiap pin penerima R/C dan mengirimkan nilai tersebut ke pin keluaran yang bersangkutan, yang terhubung ke relai. Sebagai contoh, nilai di pin L pada penerima R/C dibaca melalui:

int nilai_rc_l = digital Read (PIN_RC_L) ;

Kemungkinan nilai yang tersimpan di nil ai rc 1 adalah HIGH atau LOW. Nilai ini dikirimkan ke pin PIN MOTOR_L, yang mengatur relai yang terhubung ke motor untuk membelokkan mobil ke kiri, melalui kode:

if (nilai rc_1 ==HIGH)

digitalWrite(PIN_MOTOR_L, HIGH);

else

digitalWrite(PIN_MOTOR_L, LOW);

Kode di atas sebenarnya dapat diringkas menjadi:

digitalWrite(PIN_MOTOR_L, nilai_rc_l);

Akan tetapi, kode sengaja ditulis dengan bentuk if-else supaya perubahan pada tahap pengembangan yang akan dibahas nanti tidak terlalu banyak berubah.

Sketch di atas dilengkapi dengan pemantauan nilai yang dihasilkan oleh pengontrol F, B, L, dan R. Oleh karena itu, nilai-nilai yang dihasilkan di pin PIN_RC F, PIN RC B, PIN RC_L, dan PIN_RC_B dapat dilacak dengan Serial Monitor. Hal ini bermanfaat untuk pencarian kesalahan sekiranya motor tidak bekerja mengikuti R/C.

Sebelum, kontrol dengan R/C dilakukan, atur mobil sehingga bagian roda tidak menyentuh landasan dengan cara memasang penopang di antara kedua pasang roda. Tujuannya supaya mobil tidak bergerak kalau motor belakang berputar. Kemudian, kontrol dengan R/C. Jika rangkaian Anda benar, kedua motor dapat dikendalikan melalui R/C.

18.3 Percobaan Pengontrolan Mobil

Agar mobil dapat bergerak secara leluasa, Arduino perlu dipasok dengan sumber tegangan DC dari baterai. Anda bisa menggunakan baterai alkaline 9V khusus untuk memasok Arduino. Jadi, ada dua sumber tegangan yang dilibatkan. Pertama untuk Arduino dan kedua untuk motor. Tegangan untuk motor berupa 6V.

Setelah Arduino dipasok oleh baterai 9V, mobil dapat dicoba di landasan yang sebenarnya. Anda akan me lihat bahwa mobil dapat dikontrol sepenuhnya melalui R/C dan Arduino.

18.4 Pengembangan Lebih Lanjut

Target selanjutnya adalah menambahkan sensor ultrasonik. Sensor ini bermanfaat untuk mengontrol mobil agar tidak menabrak objek yang ada di depannya. Contoh perwujudannya diperlihatkan di Gambar 18.7. penambahan yang dilakukan adalah seperti yang ditunjukkan di Gambar 18.8. Perlu diketahui, detail pembahasan tentang sensor ultrasonik dapat dilihat di Bab 7.

Gambar 18.7 Mobil R/C dilengkapi dengan sensor ultrasonic

Gambar 18.8 Rangkaian tambahan untuk sensor ultrasonic

Sketch yang melibatkan sensor ultrasonik seperti berikut:

Sketch: mobilrc2

// ——————————————–

// Pengendalian Mobil R/C

// menggunakan Arduino

// dan dilengkapi sensor ultrasonic

// ——————————————–

const int PIN_RC L=2;

const int PIN_RC R=3;

const int PIN_RC B=4;

const int PIN_RC F=5;

const int PIN_MOTOR L=6;

const int PIN_MOTOR R=7;

const int PIN_MOTOR B=8;

const int PIN_MOTOR F=9;

const int PIN_TRIG=10;

const int PIN_ECHO=11;,

const int JARAK=20;

void setup()

{

pinMode(PIN_RC_L, INPUT);

pinMode(PIN_RC_R, INPUT);

pinMode(PIN_RC_B, INPUT);

pinMode(PIN_RC_F, INPUT);

pinMode(PIN_MOTOR_L, OUTPUT) ;

pinMode (PIN_MOTOR_R, OUTPUT);

pinMode (PIN_MOTOR_B, OUTPUT) ;

pinMode(PIN_MOTOR_F, OUTPUT);

pinMode(PIN_TRIG, OUTPUT);

pinMode (PIN_ECHO, INPUT);

Serial.begin(9600);

}

void loop()

{

// Berikan isyarat HIGH pada pin trig 10 mikrodetik

digitalWrite(PIN TRIG, HIGH);

delayMicroseconds (10) ; // Tunda 10 mikrodetik

digitalWrite(PIN TRIG, LOW);

// Baca hasilnya di pin echo

d0uble selang = pulseIn(PIN ECHO, HIGH);

// Hitung jarak yang diperoleh

d0uble jarak = 0.0343 * ( selang /2);

Serial.print(“Jarak: “);

Serial.print(jarak);

Serial.println();

// Cek R/C kiri

int nilai rc_1 = digitalRead(PIN_RC_I);

if ((nilai_rc_1 == HIGH) &&(jarak != 0))

digitalWrite(PIN_MOTOR_L,HIGH);

else

digitalWrite (PIN_MOTOR_L,LOW);

// Cek R/C kanan

int nilai_rc_r = digitalRead(PIN_RC_R);

if ((nilai_rc_r == HIGH) &&((jarak == 0) // (jarak

digitalWrite(PIN_MOTOR_R, HIGH);

else

digitalWrite(PIN_MOTOR_R, LOW);

// Cek R/C ke belakang

int nilai rc b = digitalRead(PIN_RC_B);

if ((nilai_rc_b == HIGH) &&((jarak == 0) // (jarak > J

digitalWrite(PIN_MOTOR_B, HIGH);

else

digitalWrite(PIN_MOTOR_B, LOW);

// Cek R/C ke depan

int nilai_rc_f = digitalRead(PIN_RC_F);

if ((nilai_rō_f == HIGH) && ((jarak == 0) 1/ (jarak > JARAK)

digitalWrite(PIN_MOTOR_F, HIGH);

else

digitalWrite (PIN_MOTOR_F,LOW);

Serial.print(“LRBF:”);

Serial.print(nilai_rc_1);

Serial.print(nilai_rc_r);

Serial.print(nilai_rc_b);

Serial.println(nilai_rc_f);

}

Kode yang ditambahkan terhadap sketch mobilrc sehingga menjadi mobilrc2 dijelaskan berikut ini. Pertamatama, dilakukan pendefinisian konstanta seperti berikut:

const int PIN_TRIG=10;

const int PIN_ECHO=11;,

const int JARAK=20;

Dua definisi konstanta yang pertama berhubungan dengan pin yang digunakan untuk pin Trig dan pin Echo di sensor ultrasonik. Definisi konstanta ketiga menyatakan jarak untuk menghentikan mobil ketika di depannya terdapat objek yang menghalangi mobil. Nilai 20 menyatakan jarak dalam 20 cm.

Di setup ( ) , kode berikut digunakan untuk menentukan mode pin:

pinMode(PIN_TRIG, OUTPUT);

pinMode (PIN_ECHO, INPUT);

Pin yang terhubung ke Trig sebagai pin keluaran, sedangkan pin Yang terhubung ke Echo sebagai Pin masukan.

Di loop ( ) , pemberian isyarat ke pin Trig selama 10 mikrodetik untuk memulai pengukuran jarak dilakukan melalui:

digitalWrite(PIN TRIG, HIGH);

delayMicroseconds (10) ; // Tunda 10 mikrodetik

digitalWrite(PIN TRIG, LOW);

Setelah itu, kode berikut dipakai untuk mendapatkan selang waktu hingga isyarat yang dikirim Oleh Trig diterima kembali oleh Echo:

d0uble selang = pulseln (PIN_ECHO, HIGH) ;

Lalu, jarak diperoleh dengan cara menghitung seperti berikut:

d0uble jarak = 0343 * ( selang / 2) ;

Semua baris yang mengandung if diubah dengan memperhitungkan faktor jarak. Sebagai contoh:

if ((nilai_rō_f == HIGH) && ((jarak == 0) 1/ (jarak > JARAK)

Secara prinsip, nilai pin keluaran yang terhubung ke relai hanya akan diisi dengan HIGH sekiranya nilai pin bersangkutan pada penerima R/C memang bernilai HIGH dan ungkapan berikut harus terpenuhi:

(ja rak 0) (jarak > JARAK)

Perlu diketahui, jarak akan bernilai nol sekiranya tidak ada objek di depan sensor atau objek terlalu jauh. Adapun jarak > JARAK digunakan untuk menyatakan bahwa jarak yang diperoleh masih melebihi jarak Yang digunakan untuk menghentikan motor. Jika jarak yang dihitung bernilai kurang dari atau sama dengan JARAK, ungkapan tersebut akan bernilai false dan jarak 0 pasti juga bernilai false. Hal ini akan membuat relai bersangkutan dalam keadaan LOW sehingga membuat motor tidak bergerak. Gambar 18.9 memberikan ilustrasi mengenai kapan mobil tetap bergerak ketika terdapat objek di depannya.

Hacking Mobil R/C

ini mengupas cara mengubah mobil yang dikendalikan oleh remote control (R/C) agar bisa dikontrol oleh Arduino. Dengan cara seperti ini, dimungkinkan untuk menambahkan fitur-fitur tertentu, seperti sensor ultrasonik agar tidak menabrak objek yang ada di depannya atau di belakangnya. Bab ini mengupas cara mengubah mobil yang dikendalikan oleh remote control (R/C) agar bisa dikontrol oleh Arduino. Dengan cara seperti ini, dimungkinkan untuk menambahkan fitur-fitur tertentu, seperti sensor ultrasonik agar tidak menabrak objek yang ada di depannya atau di belakangnya.

18.1 Persiapan Awal

Untuk mempraktikkan proyek ini, sebuah mobil R/C yang masih berfungsi, termasuk bagian R/C, perlu dipersiapkan. Gambar 18.1 memperlihatkan contoh dua mobil R/C yang dapat digunakan untuk mewujudkan proyek ini.

Gambar 18.1 Contoh mobil dengan remote control

Hal pertama yang perlu dilakukan adalah membongkar mobil tersebut dan kemudian memisahkan bagian yang tidak diperlukan. Contoh di Gambar 18.2 memperlihatkan keadaan setelah mobil dibongkar dan bagianbagian yang tidak diperlukan dipisahkan. Bagian terkiri adalah bagian yang akan digunakan untuk proyek ini, sedangkan yang lain tidak diperlukan.

Description Setelah bagian yang tidak diperlukan disingkirkan, mobil perlu diuji dengan menggunakan R/C. Harus dipastikan bahwa mobil masih bisa dikontrol oleh R/C.

Sekarang, marilah kita perhatikan bagian penerima R/C yang berfungsi sebagai pengendali motor. Secara prinsip, mobil R/C memiliki dua motor DC. Motor di bagian depan berfungsi untuk mengatur mobil agar bisa dibelokkan ke kiri atau ke kanan. Motor di belakang berguna untuk menggerakkan mobil ke depan atau ke belakang. Nah, kedua motor tersebut dikendalikan oleh empat pin, dengan nilai pin dalam keadaan HIGH atau LOW, ditentukan oleh keadaan tombol pengatur gerakan di RIC. Gambar 18.3 memperlihatkan pin-pin yang mengatur kedua motor. Dalam hal ini,

  • F (Forward) digunakan untuk menggerakkan mobil ke depan;
  • B (Backward) digunakan untuk menggerakkan mobil ke belakang;
  • R (Right) F (Forward) digunakan untuk membelokkan mobil ke kanan;
  • L (Left) digunakan untuk membelokkan mobil ke kiri.

Gambar 18.3 Bagian penerima R/C yang mengendalikan motor mobil R/C

Untuk keperluan percobaan, keempat kabel yang terhubung ke pin-pin tersebut perlu dilepas terlebih dahulu. Untuk memudahkan penyambungan di belakang, keempat pin dipasang kawat pendek sehingga kelak dapat dihubungkan dengan menggunakan colokan kabel berjenis female. Tentu saja, solder diperlukan untuk melakukan hal ini. Namun, sebelum pelepasan kabel dilakukan, catatlah kabel-kabel yang terhubung ke pin masing-masing karena akan digunakan pada penghubungan kabel-kabel tersebut ke pin Arduino. Untuk mempermudah, tempelkan stiker pada kabel dan tuliskan F, B, L, atau R pada stiker-stiker tersebut.

Selanjutnya, rangkaian seperti terlihat di Gambar 18.4 perlu disusun. Contoh real penyusunan rangkalan di mobil diperlihatkan di Gambar 18.5.

Gambar 18.5 Susunan mobil R/C yang telQh dilengkapi pengendali

Untuk keperluan pengendalian motor terkait dengan pin F, B, L, dan R di pengendali asat (Gambar 18.3), empat relai dipakai. Penggunaan relai dimaksudkan untuk menekan biaya dibandingkan kalau menggunakan motor driver seperti L298N. Namun, jika Anda memilki motor driver, Anda bisa menggantikan relai dengannya.

Pada percobaan yang digunakan, mobil menggunakan baterai Axl,SV atau 6V. Oleh karena tegangan yang boleh masuk ke pin digital hanya 5V, maka pembagi tegangan diperlukan. Konsep pembagi tegangan diperlihatkan di Gambar 18.6. Berdasarkan gambar tersebut, Vour diperoleh dengan rumus :

Vout = VIN x R2 / (RI + R2)

Dengan menggunakan RI = 4,7K, R2 = 22K, dan VIN = 6 maka Vout = 4.94V

Gambar 18.6 Pembagi Tegangan

18.2 Pengunggahan Sketch

Untuk kepentingan pengendalian mobil R/C, Arduino perlu dihubungan ke PC. Kemudian unggahkan skrip berikut ke papan Arduino:

Sketch: mobilrc

// ——————————————–

// Pengendalian Mobil R/C

// menggunakan Arduino

// ——————————————–

const int PIN_RC L=2;

const int PIN_RC R=3;

const int PIN_RC B=4;

const int PIN_RC F=5;

const int PIN_MOTOR_L= 6;

const int PIN_MOTOR R=7;

const int PIN_MOTOR_ B=8;

const int PIN_MOTOR_F= 9;

void setup()

{

pinMode(PIN_RC L, INPUT);

pinMode (PIN_RC R, INPUT);

pinMode(PIN_RC B, INPUT);

pinMode(PIN_RC F, INPUT);

pinMode(PIN_MOTOR_L, OUTPUT);

pinMode (PIN_MOTOR_R, OUTPUT) ;

pinMode (PIN_MOTOR_B, OUTPUT);

pinMode (PIN_MOTOR_F, OUTPUT) ;

digitalWrite(PIN_MOTOR_L,LOW);

digitalWrite(PIN_MOTOR_R, LOW);

digitalWrite(PIN_MOTOR_E, LOW);

digitalWrite(PIN_MOTOR_B, LOW);

Serial.begin(9600);

}

void loop()

{

// Cek R/C kiri

int nilai_rc_1= digitalRead(PIN_RC_L);

if (nilai rc_1 ==HIGH)

digitalWrite(PIN_MOTOR_L, HIGH);

else

digitalWrite(PIN_MOTOR_L, LOW);

// Cek R/C kanan

int nilai_rc_r= digitalRead(PIN_RC_R);

if (nilai rc r == HIGH)

digitalWrite(PIN_MOTOR_R, HIGH);

else

digitalWrite(PIN_MOTOR_R, LOW);

// Cek R/C ke belakang

int nilai_rc_b= digitalRead(PIN_RC_B);

if (nilai_rc_b == HIGH)

digitalWrite(PIN_MOTOR_B, HIGH);

else

digitalWrite(PIN_MOTOR_B, LOW);

// Cek R/C ke depan

int nilai_rc_f = digitalRead(PIN_RC_F);

if (nilai rc f== HIGH)

digitalWrite(PIN_MOTOR_F, HIGH);

else

digitalWrite(PIN_MOTOR_F,LOW);

Serial.print(“LRBF:”);

Serial.print(nilai_rc_1);

Serial.print(nilai_rc_r);

Serial.print(nilai_rc_b);

Serial.println(nilai_rc_f);

}

Logika di balik di sketch di atas adalah membaca nilai setiap pin penerima R/C dan mengirimkan nilai tersebut ke pin keluaran yang bersangkutan, yang terhubung ke relai. Sebagai contoh, nilai di pin L pada penerima R/C dibaca melalui:

int nilai_rc_l = digital Read (PIN_RC_L) ;

Kemungkinan nilai yang tersimpan di nil ai rc 1 adalah HIGH atau LOW. Nilai ini dikirimkan ke pin PIN MOTOR_L, yang mengatur relai yang terhubung ke motor untuk membelokkan mobil ke kiri, melalui kode:

if (nilai rc_1 ==HIGH)

digitalWrite(PIN_MOTOR_L, HIGH);

else

digitalWrite(PIN_MOTOR_L, LOW);

Kode di atas sebenarnya dapat diringkas menjadi:

digitalWrite(PIN_MOTOR_L, nilai_rc_l);

Akan tetapi, kode sengaja ditulis dengan bentuk if-else supaya perubahan pada tahap pengembangan yang akan dibahas nanti tidak terlalu banyak berubah.

Sketch di atas dilengkapi dengan pemantauan nilai yang dihasilkan oleh pengontrol F, B, L, dan R. Oleh karena itu, nilai-nilai yang dihasilkan di pin PIN_RC F, PIN RC B, PIN RC_L, dan PIN_RC_B dapat dilacak dengan Serial Monitor. Hal ini bermanfaat untuk pencarian kesalahan sekiranya motor tidak bekerja mengikuti R/C.

Sebelum, kontrol dengan R/C dilakukan, atur mobil sehingga bagian roda tidak menyentuh landasan dengan cara memasang penopang di antara kedua pasang roda. Tujuannya supaya mobil tidak bergerak kalau motor belakang berputar. Kemudian, kontrol dengan R/C. Jika rangkaian Anda benar, kedua motor dapat dikendalikan melalui R/C.

18.3 Percobaan Pengontrolan Mobil

Agar mobil dapat bergerak secara leluasa, Arduino perlu dipasok dengan sumber tegangan DC dari baterai. Anda bisa menggunakan baterai alkaline 9V khusus untuk memasok Arduino. Jadi, ada dua sumber tegangan yang dilibatkan. Pertama untuk Arduino dan kedua untuk motor. Tegangan untuk motor berupa 6V.

Setelah Arduino dipasok oleh baterai 9V, mobil dapat dicoba di landasan yang sebenarnya. Anda akan me lihat bahwa mobil dapat dikontrol sepenuhnya melalui R/C dan Arduino.

18.4 Pengembangan Lebih Lanjut

Target selanjutnya adalah menambahkan sensor ultrasonik. Sensor ini bermanfaat untuk mengontrol mobil agar tidak menabrak objek yang ada di depannya. Contoh perwujudannya diperlihatkan di Gambar 18.7. penambahan yang dilakukan adalah seperti yang ditunjukkan di Gambar 18.8. Perlu diketahui, detail pembahasan tentang sensor ultrasonik dapat dilihat di Bab 7.

Gambar 18.7 Mobil R/C dilengkapi dengan sensor ultrasonic

Gambar 18.8 Rangkaian tambahan untuk sensor ultrasonic

Sketch yang melibatkan sensor ultrasonik seperti berikut:

Sketch: mobilrc2

// ——————————————–

// Pengendalian Mobil R/C

// menggunakan Arduino

// dan dilengkapi sensor ultrasonic

// ——————————————–

const int PIN_RC L=2;

const int PIN_RC R=3;

const int PIN_RC B=4;

const int PIN_RC F=5;

const int PIN_MOTOR L=6;

const int PIN_MOTOR R=7;

const int PIN_MOTOR B=8;

const int PIN_MOTOR F=9;

const int PIN_TRIG=10;

const int PIN_ECHO=11;,

const int JARAK=20;

void setup()

{

pinMode(PIN_RC_L, INPUT);

pinMode(PIN_RC_R, INPUT);

pinMode(PIN_RC_B, INPUT);

pinMode(PIN_RC_F, INPUT);

pinMode(PIN_MOTOR_L, OUTPUT) ;

pinMode (PIN_MOTOR_R, OUTPUT);

pinMode (PIN_MOTOR_B, OUTPUT) ;

pinMode(PIN_MOTOR_F, OUTPUT);

pinMode(PIN_TRIG, OUTPUT);

pinMode (PIN_ECHO, INPUT);

Serial.begin(9600);

}

void loop()

{

// Berikan isyarat HIGH pada pin trig 10 mikrodetik

digitalWrite(PIN TRIG, HIGH);

delayMicroseconds (10) ; // Tunda 10 mikrodetik

digitalWrite(PIN TRIG, LOW);

// Baca hasilnya di pin echo

d0uble selang = pulseIn(PIN ECHO, HIGH);

// Hitung jarak yang diperoleh

d0uble jarak = 0.0343 * ( selang /2);

Serial.print(“Jarak: “);

Serial.print(jarak);

Serial.println();

// Cek R/C kiri

int nilai rc_1 = digitalRead(PIN_RC_I);

if ((nilai_rc_1 == HIGH) &&(jarak != 0))

digitalWrite(PIN_MOTOR_L,HIGH);

else

digitalWrite (PIN_MOTOR_L,LOW);

// Cek R/C kanan

int nilai_rc_r = digitalRead(PIN_RC_R);

if ((nilai_rc_r == HIGH) &&((jarak == 0) // (jarak

digitalWrite(PIN_MOTOR_R, HIGH);

else

digitalWrite(PIN_MOTOR_R, LOW);

// Cek R/C ke belakang

int nilai rc b = digitalRead(PIN_RC_B);

if ((nilai_rc_b == HIGH) &&((jarak == 0) // (jarak > J

digitalWrite(PIN_MOTOR_B, HIGH);

else

digitalWrite(PIN_MOTOR_B, LOW);

// Cek R/C ke depan

int nilai_rc_f = digitalRead(PIN_RC_F);

if ((nilai_rō_f == HIGH) && ((jarak == 0) 1/ (jarak > JARAK)

digitalWrite(PIN_MOTOR_F, HIGH);

else

digitalWrite (PIN_MOTOR_F,LOW);

Serial.print(“LRBF:”);

Serial.print(nilai_rc_1);

Serial.print(nilai_rc_r);

Serial.print(nilai_rc_b);

Serial.println(nilai_rc_f);

}

Kode yang ditambahkan terhadap sketch mobilrc sehingga menjadi mobilrc2 dijelaskan berikut ini. Pertamatama, dilakukan pendefinisian konstanta seperti berikut:

const int PIN_TRIG=10;

const int PIN_ECHO=11;,

const int JARAK=20;

Dua definisi konstanta yang pertama berhubungan dengan pin yang digunakan untuk pin Trig dan pin Echo di sensor ultrasonik. Definisi konstanta ketiga menyatakan jarak untuk menghentikan mobil ketika di depannya terdapat objek yang menghalangi mobil. Nilai 20 menyatakan jarak dalam 20 cm.

Di setup ( ) , kode berikut digunakan untuk menentukan mode pin:

pinMode(PIN_TRIG, OUTPUT);

pinMode (PIN_ECHO, INPUT);

Pin yang terhubung ke Trig sebagai pin keluaran, sedangkan pin Yang terhubung ke Echo sebagai Pin masukan.

Di loop ( ) , pemberian isyarat ke pin Trig selama 10 mikrodetik untuk memulai pengukuran jarak dilakukan melalui:

digitalWrite(PIN TRIG, HIGH);

delayMicroseconds (10) ; // Tunda 10 mikrodetik

digitalWrite(PIN TRIG, LOW);

Setelah itu, kode berikut dipakai untuk mendapatkan selang waktu hingga isyarat yang dikirim Oleh Trig diterima kembali oleh Echo:

d0uble selang = pulseln (PIN_ECHO, HIGH) ;

Lalu, jarak diperoleh dengan cara menghitung seperti berikut:

d0uble jarak = 0343 * ( selang / 2) ;

Semua baris yang mengandung if diubah dengan memperhitungkan faktor jarak. Sebagai contoh:

if ((nilai_rō_f == HIGH) && ((jarak == 0) 1/ (jarak > JARAK)

Secara prinsip, nilai pin keluaran yang terhubung ke relai hanya akan diisi dengan HIGH sekiranya nilai pin bersangkutan pada penerima R/C memang bernilai HIGH dan ungkapan berikut harus terpenuhi:

(ja rak 0) (jarak > JARAK)

Perlu diketahui, jarak akan bernilai nol sekiranya tidak ada objek di depan sensor atau objek terlalu jauh. Adapun jarak > JARAK digunakan untuk menyatakan bahwa jarak yang diperoleh masih melebihi jarak Yang digunakan untuk menghentikan motor. Jika jarak yang dihitung bernilai kurang dari atau sama dengan JARAK, ungkapan tersebut akan bernilai false dan jarak 0 pasti juga bernilai false. Hal ini akan membuat relai bersangkutan dalam keadaan LOW sehingga membuat motor tidak bergerak. Gambar 18.9 memberikan ilustrasi mengenai kapan mobil tetap bergerak ketika terdapat objek di depannya.

 

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.