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.
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.
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:
// ——————————————–
// 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
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
Sketch yang melibatkan sensor ultrasonik seperti berikut:
// ——————————————–
// 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.
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.
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:
// ——————————————–
// 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
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
Sketch yang melibatkan sensor ultrasonik seperti berikut:
// ——————————————–
// 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.