Sensor Ultrasonik
31 Mei 2022 ajat
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
\\
\\
/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.
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
void setup()
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);
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);
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);
cmKiri = microsecondsToCentimeters(durationKiri);
Serial.print(inchesKiri);
Serial.print("in, ");
Serial.print(cmKiri);
Serial.print("cm");
Serial.println();
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);
{
return microseconds / 74 / 2;
return microseconds / 29 / 2;
List Program
#define IR_SENSOR_RIGHT 11
#define IR_SENSOR_LEFT 12
//Right motor
int enableRightMotor=6;
int rightMotorPin1=7;
int rightMotorPin2=8;
//Left motor
int enableLeftMotor=5;
int leftMotorPin1=9;
int leftMotorPin2=10;
void setup()
//The problem with TT gear motors is that, at very low pwm value it does not even rotate.
//If we increase the PWM value then it rotates faster and our robot is not controlled in that speed and goes out of
line.
//Below line is important to change the frequency of PWM signal on pin D5 and D6
//Because of this, motor runs in controlled manner (lower speed) at high PWM value.
pinMode(enableRightMotor, OUTPUT);
pinMode(rightMotorPin1, OUTPUT);
pinMode(rightMotorPin2, OUTPUT);
pinMode(enableLeftMotor, OUTPUT);
pinMode(leftMotorPin1, OUTPUT);
pinMode(leftMotorPin2, OUTPUT);
pinMode(IR_SENSOR_RIGHT, INPUT);
pinMode(IR_SENSOR_LEFT, INPUT);
rotateMotor(0,0);
void loop()
rotateMotor(MOTOR_SPEED, MOTOR_SPEED);
rotateMotor(-MOTOR_SPEED, MOTOR_SPEED);
}
rotateMotor(MOTOR_SPEED, -MOTOR_SPEED);
else
rotateMotor(0, 0);
if (rightMotorSpeed < 0)
digitalWrite(rightMotorPin1,LOW);
digitalWrite(rightMotorPin2,HIGH);
digitalWrite(rightMotorPin1,HIGH);
digitalWrite(rightMotorPin2,LOW);
else
digitalWrite(rightMotorPin1,LOW);
digitalWrite(rightMotorPin2,LOW);
if (leftMotorSpeed < 0)
digitalWrite(leftMotorPin1,LOW);
digitalWrite(leftMotorPin2,HIGH);
digitalWrite(leftMotorPin1,HIGH);
digitalWrite(leftMotorPin2,LOW);
else
digitalWrite(leftMotorPin1,LOW);
digitalWrite(leftMotorPin2,LOW);
analogWrite(enableRightMotor, abs(rightMotorSpeed));
analogWrite(enableLeftMotor, abs(leftMotorSpeed));
Transduser adalah sebuah alat yang bila digerakan oleh suatu energi di dalam
sebuah sistem transmisi, akan menyalurkan energi tersebut dalam bentuk yang
sama atau dalam bentuk yang berlainan ke sistem transmisi berikutnya”.
Transmisi energi ini bisa berupa listrik, mekanik, kimia, optic (radiasi) atau thermal
(panas), (William D.C, 1993).
Jadi, Sensor adalah komponen yang dapat digunakan untuk mengkonversi suatu
besaran tertentu menjadi satuan analog sehingga dapat dibaca oleh suatu rangkaian
elektronik.
Sensor Proximity
Sensor proximity merupakan sensor yang berfungsi untuk mendeteksi ada atau
tidaknya suatu objek. Sensor proximity dapat mendeteksi keberedaan benda
disekitarnya tanpa ada kontak fisik dengan benda tersebut.
Cara kerja sensor proximity ini yaitu dengan memancarkan medan elektromagnetik
dan mencari perubahan bentuk medan elektromagnetik pada saat benda di deteksi.
Contoh medan elektromagnetik yang sering digunakan yaitu sinar infra merah. Jika
benda telah terdeteksi maka sinyal infrared tersebut akan merubah bentuk sinyal
dan mengirimkan sinyal kembali ke sensor dan memberitahukan bahwa di depan
sensor terdapat benda.
Target sensor yang berbeda-beda juga membutuhkan jenis sensor proximity yang
berbeda pula.
Sensor Warna
Warna adalah spektrum tertentu yang terdapat di dalam suatu cahaya sempurna
(berwarna putih). Identitas suatu warna ditentukan panjang gelombang cahaya
tersebut. Sebagai contoh warna biru memiliki panjang gelombang 460 nanometer.
Panjang gelombang warna yang masih bisa ditangkap mata manusia berkisar antara
380-780 nanometer. Warna RGB adalah warna additive yang bertujuan sebagai
penginderaan dan presentasi gambar dalam tampilan pada peralatan elektronik.
Warna additive adalah warna yang berasal dari cahaya, dan disebut spektrum.
Warna primer atau pokok additive ada tiga, yaitu red, green, dan blue. Warna pokok
additive dalam komputer disebut model warna RGB. Model warna RGB adalah
model warna berdasarkan konsep penambahan kuat cahayaprimer yang
berorientasi pada perangkat keras/hardware, model warna ini dikhususkan untuk
warna tampilan pada monitor, kamera video, dan berbagai peralatan elektronika
penampil gambar.
2. End-Effector
Kemampuan robot juga tergantung pada piranti yang dipasang pada lengan robot.
Piranti ini biasanya dikenal dengan end effector. End effector ada dua jenis yaitu
Pencengkram (gripper) yang digunakan untuk memegang dan menahan objek,
peralatan (tool) yang digunakan untuk melakukan operasi tertentu pada suatu objek.
Contohnya: bor, penyemprot cat, gerinda, las dan sebagainya.
3. Penggerak (Actuator)
Istilah yang digunakan untuk mekanisme yang menggerakkan lengan robot. Aktuator
dapat berupa hidrolik dan pneumatik yang digunakan untuk mengendalikan
persendian prismatik karena dapat menghasilkan gerakan linier secara langsung
(sering disebut dengan penggerak linier) atau pula aktuator motor listrik yang
menghasilkan gerakan rotasi. Penggerak yang umum digunakan pada saat ini
adalah penggerak motor servo. Penggerak ini lebih mudah dikontrol dibanding
penggerak lainnya.
4. Sensor/Transducer
Sensor dipergunakan manipulator agar dapat berinteraksi dengan lingkungan
kerjanya. Sensor juga dipergunakan sebagai input umpan balik pada proses
pengendalian manipulator.
5. Pengendali (Controller)
Pengendali adalah mekanisme (baik secara perangkat keras maupun perangkat
lunak) yang dipergunakan untuk mengatur seluruh pergerakan atau proses yang
dilakukan manipulator.
Untuk mengendalikan lengan robot bisa dengan sensor (knob) atau dengan waktu
(sweep) saja. Mengendalikan lengan robot dengan sensor berarti pergerakan lengan
robot tergantung perubahan nilai sensor (misalkan potensiometer), sedangkan
pergerakan lengan robot dengan waktu berarti lengan robot bergerak secara terus
menerus (berulang) sesuai waktu yang ditentukan.
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;
int potpin2 = 1;
int potpin3 = 2;
int potpin4 = 3;
int potpin5 = 4;
int val1; // variable to read the value from the analog pin
int val2;
int val3;
int val4;
myservo2.attach(10);
myservo3.attach(11);
myservo4.attach(12);
myservo5.attach(13);
void loop() {
val1 = analogRead(potpin1); // reads the value of the potentiometer (value between 0 and 1023)
val1 = map(val1, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
val2 = analogRead(potpin2); // reads the value of the potentiometer (value between 0 and 1023)
val2 = map(val2, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo2.write(val2); // sets the servo position according to the scaled value
val3 = analogRead(potpin3); // reads the value of the potentiometer (value between 0 and 1023)
val3 = map(val3, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
val4 = analogRead(potpin4); // reads the value of the potentiometer (value between 0 and 1023)
val4 = map(val4, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
val5 = analogRead(potpin5); // reads the value of the potentiometer (value between 0 and 1023)
val5 = map(val5, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
Video Simulasi Lengan Robot dengan Sensor dapat dilihat dalam video di bawah
ini :
Servo myservo1;
Servo myservo3;
Servo myservo4;
Servo myservo5;
int pos2 = 0;
int pos3 = 0;
int pos4 = 0;
int pos5 = 0;
int pos6 = 0;
int pos7 = 0;
int pos8 = 0;
void setup() {
myservo2.attach(9);
myservo4.attach(11);
myservo5.attach(12);
void loop() {
for (pos1 = 0; pos1 <= 90; pos1 += 1) { // berputar dari 0 derajat ke 180 derajat
for (pos1 = 90; pos1 >= 0; pos1 -= 1) { // berputar dari 180 derajat ke 0 derajat
myservo2.write(pos1);
myservo4.write(pos1);
for (pos2 = 0; pos2 <= 90; pos2 += 1) { // berputar dari 0 derajat ke 180 derajat
for (pos2 = 90; pos2 >= 0; pos2 -= 1) { // berputar dari 180 derajat ke 0 derajat
myservo5.write(pos2);
for (pos3 = 0; pos3 <= 90; pos3 += 1) { // berputar dari 0 derajat ke 180 derajat
myservo2.write(pos3);
myservo4.write(pos3);
for (pos3 = 90; pos3 >= 0; pos3 -= 1) { // berputar dari 180 derajat ke 0 derajat
for (pos4 = 0; pos4 <= 180; pos4 += 1) { // berputar dari 0 derajat ke 180 derajat
for (pos4 = 180; pos4 >= 0; pos4 -= 1) { // berputar dari 180 derajat ke 0 derajat
for (pos5 = 0; pos5 <= 90; pos5 += 1) { // berputar dari 0 derajat ke 180 derajat
for (pos5 = 90; pos5 >= 0; pos5 -= 1) { // berputar dari 180 derajat ke 0 derajat
myservo2.write(pos5);
myservo4.write(pos5);
for (pos6 = 0; pos6 <= 90; pos6 += 1) { // berputar dari 0 derajat ke 180 derajat
myservo5.write(pos6);
for (pos6 = 90; pos6 >= 0; pos6 -= 1) { // berputar dari 180 derajat ke 0 derajat
for (pos7 = 0; pos7 <= 90; pos7 += 1) { // berputar dari 0 derajat ke 180 derajat
myservo2.write(pos7);
myservo4.write(pos7);
for (pos7 = 90; pos7 >= 0; pos7 -= 1) { // berputar dari 180 derajat ke 0 derajat
for (pos8 = 0; pos8 <= 180; pos8 += 1) { // berputar dari 0 derajat ke 180 derajat
for (pos8 = 180; pos8 >= 0; pos8 -= 1) { // berputar dari 180 derajat ke 0 derajat