Pada jejak kali ini mencoba merancang mobile robot mengunakan 3 sensor ultrasonik, sensor ultrasonik digunakan untuk mendeteksi benda atau penghalang di depan sensor. Jika sensor mendeteksi ada penghalang di depannya maka mobile robot akan bergerak mencari jalan dan memilih jalan yang tidak ada penghalangnya. Bentuk fisik mobile robot dengan 3 sensor ultrasonik seperti gambar di bawah ini.

Pada sistem ini komponen utama yang digunakan sebagai berikut :
Arduino Uno

Sensor Ultrasonik

Driver Motor DC

Motor DC

Rangka Mobile Robot

Rangkaian yang dibuat untuk penerapan di atas seperti di bawah ini.

Sensor ultrasonik merupakan 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.

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 trigKanan = 7; // Trigger Pin of Ultrasonic Sensor const int echoKanan = 6; // Echo Pin of Ultrasonic Sensor const int trigTengah = 5; // Trigger Pin of Ultrasonic Sensor const int echoTengah = 4; // Echo Pin of Ultrasonic Sensor const int trigKiri = 3; // Trigger Pin of Ultrasonic Sensor const int echoKiri = 2; // Echo Pin of Ultrasonic Sensor const int rodaKananMaju = 13; const int rodaKananMundur = 12; const int rodaKiriMaju = 11; const int rodaKiriMundur = 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(trigKanan, OUTPUT); pinMode(echoKanan, INPUT); pinMode(trigTengah, OUTPUT); pinMode(echoTengah, INPUT); pinMode(trigKiri, OUTPUT); pinMode(echoKiri, INPUT); pinMode(rodaKananMaju, OUTPUT); pinMode(rodaKananMundur, OUTPUT); pinMode(rodaKiriMaju, OUTPUT); pinMode(rodaKiriMundur, OUTPUT); } void loop() { digitalWrite(trigKanan, LOW); delayMicroseconds(2); digitalWrite(trigKanan, HIGH); delayMicroseconds(10); digitalWrite(trigKanan, LOW); durationKanan = pulseIn(echoKanan, HIGH); inchesKanan = microsecondsToInches(durationKanan); cmKanan = microsecondsToCentimeters(durationKanan); Serial.print(inchesKanan); Serial.print("in, "); Serial.print(cmKanan); Serial.print("cm"); Serial.println(); digitalWrite(trigTengah, LOW); delayMicroseconds(2); digitalWrite(trigTengah, HIGH); delayMicroseconds(10); digitalWrite(trigTengah, LOW); durationTengah = pulseIn(echoTengah, HIGH); inchesTengah = microsecondsToInches(durationTengah); cmTengah = microsecondsToCentimeters(durationTengah); Serial.print(inchesTengah); Serial.print("in, "); Serial.print(cmTengah); Serial.print("cm"); Serial.println(); digitalWrite(trigKiri, LOW); delayMicroseconds(2); digitalWrite(trigKiri, HIGH); delayMicroseconds(10); digitalWrite(trigKiri, LOW); durationKiri = pulseIn(echoKiri, 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(rodaKananMaju, HIGH); digitalWrite(rodaKananMundur, LOW); digitalWrite(rodaKiriMaju, HIGH); digitalWrite(rodaKiriMundur, LOW); delay(100); } if (distanceKanan >= 15) { digitalWrite(rodaKananMaju, 1; digitalWrite(rodaKananMundur, 0); digitalWrite(rodaKiriMaju, 0); digitalWrite(rodaKiriMundur, 0); delay(100); } if (distanceKiri >= 15) { digitalWrite(rodaKananMaju, 0); digitalWrite(rodaKananMundur, 0); digitalWrite(rodaKiriMaju, 1); digitalWrite(rodaKiriMundur, 0); delay(100); } if (distanceKanan >= 15 && distanceTengah >= 15 && distanceKiri >= 15) { digitalWrite(rodaKananMaju, 0); digitalWrite(rodaKananMundur, 0); digitalWrite(rodaKiriMaju, 0); digitalWrite(rodaKiriMundur, 0); 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 :