Mobile Robot Menggunakan Arduino Uno dan Sensor Ultrasonik

Pada jejak kali ini mencoba menerapkan sensor ultrasonik sebagai sensor untuk mengatur supaya mobil robot tidak menabrak dinding atau benda di depannya dan berputar mencari jalan yang tidak ada penghalangnya. Rangkaian yang dibuat untuk penerapan di atas seperti di bawah ini.

Rangkaian Mobile Robot dengan Arduino Uno dan Sensor Ultrasonik

Sensor ultrasonik adalah sebuah sensor yang berfungsi untuk mengubah besaran fisis berupa bunyi menjadi besaran listrik dan sebaliknya. Sensor ini bekerja berdasarkan prinsip dari pantulan suatu gelombang suara, dimana sensor ini menghasilkan gelombang suara yang kemudian menangkap kembali dengan perbedaan waktu sebagai dasar pengindra. Perbedaan waktu yang dipancarkan dan diterima kembali adalah berbanding lurus dengan jarak objek yang memantulkannya.

Bentuk Fisik Sensor Ultrasonic

Sensor ultrasonik ini umumnya digunakan untuk mendeteksi keberadaan suatu objek dalam jarak tertentu di depannya. Sensor ultrasonik mempunyai kemampuan mendeteksi objek lebih jauh terutama untuk benda-benda yang keras. Pada benda-benda yang keras yaitu yang mempunyai permukaan kasar gelombang ini akan dipantulkan lebih kuat daripada benda yang permukaannya lunak. Sensor ultrasonik ini terdiri dari rangkaian pemancar ultrasonik yang disebut transmitter dan rangkaian penerima ultrasonik disebut receiver.

Frekuensi kerja sensor ultrasonik pada daerah diatas gelombang suara dari 40kHz – 400kHz. Sensor ultrasonik terdiri dari dua unit, yaitu unit pemancar dan unit penerima. Struktur unit pemancar dan penerima sangatlah sederhana, sebuah kristal piezoelektrik dihubungkan dengan mekanik jangkar dan hanya dihubungkan dengan diafragma penggetar. Tegangan bolak-balik yang memiliki frekuensi kerja 40kHz – 400kHz diberikan pada plat logam. Struktur atom dari kristal piezoelektrik akan berkontraksi (mengikat), mengembang atau menyusut terhadap polaritas tegangan yang diberikan dan ini disebut dengan efek piezoelektrik. Kontraksi yang terjadi diteruskan ke diagfragma penggetar sehingga terjadi gelombang ultrasonik yang dipancarkan ke udara (tempat sekitarnya).

Pantulan gelombang ultrasonik akan terjadi bila ada objek tertentu dan pantulan gelombang ultrasonik akan diterima kembali oleh unit sensor penerima. Selanjutnya unit sensor penerima akan menyebabkan diafragma penggetar akan bergetar dan efek piezoelektrik mengahasilkan sebuah tegangan bolak-balik dengan frekuensi yang sama. Besar amplitudo sinyal elektrik yang dihasilkan unit sensor penerima tergantung dari jarak objek yang dideteksi serta kualitas dari unit sensor pemancar dan unit sensor penerima.

Untuk lebih jelasnya tentang prinsip kerja dari sensor ultrasonik dapat dilihat pada Gambar berikut:

Sensor ini secara umum bekerja dengan menggunakan metode pantulan untuk menghitung jarak antara sensor dengan objek. Jarak antara sensor dengan objek dapat dihitung dengan cara mengalikan kecepatan rambat dari gelombang suara ultrasonik pada media rambat berupa suara tersebut dengan setengah waktu yang digunakan sensor ultrasonik untuk memancarkan gelombang suara ultrasonik dari rangkaian pemancar (Tx) menuju objek sampai diterima kembali oleh rangkaian penerima (Rx).

 

List Program :

const int trigPinKanan = 7; // Trigger Pin of Ultrasonic Sensor
const int echoPinKanan = 6; // Echo Pin of Ultrasonic Sensor
const int trigPinTengah = 5; // Trigger Pin of Ultrasonic Sensor
const int echoPinTengah = 4; // Echo Pin of Ultrasonic Sensor
const int trigPinKiri = 3; // Trigger Pin of Ultrasonic Sensor
const int echoPinKiri = 2; // Echo Pin of Ultrasonic Sensor
const int rodaKanan1 = 13;
const int rodaKanan2 = 12;
const int rodaKiri1 = 11;
const int rodaKiri2 = 10;
long durationKanan, distanceKanan, inchesKanan, cmKanan;
long durationTengah, distanceTengah, inchesTengah, cmTengah;
long durationKiri, distanceKiri, inchesKiri, cmKiri;

void setup()
{
Serial.begin(9600); // Starting Serial Terminal
pinMode(trigPinKanan, OUTPUT);
pinMode(echoPinKanan, INPUT);
pinMode(trigPinTengah, OUTPUT);
pinMode(echoPinTengah, INPUT);
pinMode(trigPinKiri, OUTPUT);
pinMode(echoPinKiri, INPUT);
pinMode(rodaKanan1, OUTPUT);
pinMode(rodaKanan2, OUTPUT);
pinMode(rodaKiri1, OUTPUT);
pinMode(rodaKiri2, OUTPUT);
}

void loop()
{
digitalWrite(trigPinKanan, LOW);
delayMicroseconds(2);
digitalWrite(trigPinKanan, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinKanan, LOW);

durationKanan = pulseIn(echoPinKanan, HIGH);
inchesKanan = microsecondsToInches(durationKanan);
cmKanan = microsecondsToCentimeters(durationKanan);

Serial.print(inchesKanan);
Serial.print("in, ");
Serial.print(cmKanan);
Serial.print("cm");
Serial.println();

digitalWrite(trigPinTengah, LOW);
delayMicroseconds(2);
digitalWrite(trigPinTengah, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinTengah, LOW);

durationTengah = pulseIn(echoPinTengah, HIGH);
inchesTengah = microsecondsToInches(durationTengah);
cmTengah = microsecondsToCentimeters(durationTengah);

Serial.print(inchesTengah);
Serial.print("in, ");
Serial.print(cmTengah);
Serial.print("cm");
Serial.println();

digitalWrite(trigPinKiri, LOW);
delayMicroseconds(2);
digitalWrite(trigPinKiri, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinKiri, LOW);

durationKiri = pulseIn(echoPinKiri, HIGH);
inchesKiri = microsecondsToInches(durationKiri);
cmKiri = microsecondsToCentimeters(durationKiri);

Serial.print(inchesKiri);
Serial.print("in, ");
Serial.print(cmKiri);
Serial.print("cm");
Serial.println();

distanceKanan = (durationKanan / 2) / 29.1;
distanceTengah = (durationTengah / 2) / 29.1;
distanceKiri = (durationKiri / 2) / 29.1;

if (distanceKanan >= 15 && distanceTengah >= 15 && distanceKiri >= 15) {
digitalWrite(rodaKanan1, HIGH);
digitalWrite(rodaKanan2, LOW);
digitalWrite(rodaKiri1, HIGH);
digitalWrite(rodaKiri2, LOW);
delay(100);
}
else if (distanceKanan >= 15 && distanceTengah <= 15 && distanceKiri >= 15) {
digitalWrite(rodaKanan1, LOW);
digitalWrite(rodaKanan2, HIGH);
digitalWrite(rodaKiri1, HIGH);
digitalWrite(rodaKiri2, LOW);
delay(100);
}
else if (distanceKanan <= 15 && distanceTengah >= 15 && distanceKiri >= 15) {
digitalWrite(rodaKanan1, HIGH);
digitalWrite(rodaKanan2, LOW);
digitalWrite(rodaKiri1, LOW);
digitalWrite(rodaKiri2, HIGH);
delay(100);
}
else if (distanceKanan >= 15 && distanceTengah >= 15 && distanceKiri <= 15) {
digitalWrite(rodaKanan1, LOW);
digitalWrite(rodaKanan2, HIGH);
digitalWrite(rodaKiri1, HIGH);
digitalWrite(rodaKiri2, LOW);
delay(100);
}

}

long microsecondsToInches(long microseconds)
{
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}

Untuk lebih jelasnya dapat dilihat dalam video simulasi di bawah ini :

Tinggalkan Balasan

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