Anda di halaman 1dari 26

Mobile Robot Menggunakan Arduino Uno dan

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.

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;

Line Follower Robot dengan Pengendali


Arduino
 

List Program
#define IR_SENSOR_RIGHT 11

#define IR_SENSOR_LEFT 12

#define MOTOR_SPEED 180

//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.

//For that we need to increase the frequency of analogWrite.

//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.

//This sets frequecny as 7812.5 hz.

TCCR0B = TCCR0B & B11111000 | B00000010 ;

// put your setup code here, to run once:

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()

int rightIRSensorValue = digitalRead(IR_SENSOR_RIGHT);

int leftIRSensorValue = digitalRead(IR_SENSOR_LEFT);

//If none of the sensors detects black line, then go straight

if (rightIRSensorValue == LOW && leftIRSensorValue == LOW)

rotateMotor(MOTOR_SPEED, MOTOR_SPEED);

//If right sensor detects black line, then turn right

else if (rightIRSensorValue == HIGH && leftIRSensorValue == LOW )

rotateMotor(-MOTOR_SPEED, MOTOR_SPEED);
}

//If left sensor detects black line, then turn left

else if (rightIRSensorValue == LOW && leftIRSensorValue == HIGH )

rotateMotor(MOTOR_SPEED, -MOTOR_SPEED);

//If both the sensors detect black line, then stop

else

rotateMotor(0, 0);

void rotateMotor(int rightMotorSpeed, int leftMotorSpeed)

if (rightMotorSpeed < 0)

digitalWrite(rightMotorPin1,LOW);

digitalWrite(rightMotorPin2,HIGH);

else if (rightMotorSpeed > 0)


{

digitalWrite(rightMotorPin1,HIGH);

digitalWrite(rightMotorPin2,LOW);

else

digitalWrite(rightMotorPin1,LOW);

digitalWrite(rightMotorPin2,LOW);

if (leftMotorSpeed < 0)

digitalWrite(leftMotorPin1,LOW);

digitalWrite(leftMotorPin2,HIGH);

else if (leftMotorSpeed > 0)

digitalWrite(leftMotorPin1,HIGH);

digitalWrite(leftMotorPin2,LOW);

else

digitalWrite(leftMotorPin1,LOW);
digitalWrite(leftMotorPin2,LOW);

analogWrite(enableRightMotor, abs(rightMotorSpeed));

analogWrite(enableLeftMotor, abs(leftMotorSpeed));

Macam Macam Sensor Robot


Sensor adalah suatu peralatan yang berfungsi untuk mendeteksi gejala- gejala atau
sinyal-sinyal yang berasal dari perubahan suatu energi seperti energi listrik, energi
fisika, energi kimia, energi biologi, energi mekanik dan sebagainya (D Sharon,
1982).

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 merupakan komponen utama dari suatu tranduser, sedangkan tranduser


merupakan sistem yang melengkapi agar sensor tersebut mempunyai keluaran
sesuai yang kita inginkan dan dapat langsung dibaca pada keluarannya.

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.

Kendali Lengan Robot dengan Penggerak


Motor Servo
12 Desember 2019 ajat
Robot ada yang bergerak atau pindah lokasi ada juga robot yang bergerak tapi tidak
pindah lokasi. Robot yang bergerak tidak berpindah lokasi biasanya berbentuk
lengan. Bagian penggerak (aktuator) pada gambar di bawah ini berupa motor servo
yang dapat bergerak sesuai dengan sudut yang diinginkan sehingga lengan robot
bergerak sesuai kombinasi pergerakan motor servo tersebut.

Berikut nama-nama bagian penggerak lengan robot :

Bagian Lengan Robot


Secara keseluruhan sebuah sistem lengan robot manipulator terdiri dari :

1. Tangan Mekanik (Mechanical Arm)


Adalah bagian dasar dari konstruksi lengan robot untuk dapat membentuk lengan
robot sesuai kebutuhan dan merupakan bagian yang dikendalikan pergerakannya.

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.

KENDALI LENGAN ROBOT DENGAN SENSOR


Rangkaian Motor Servo dengan Sensor
List Program Berdasarkan Knob atau Sensor :
#include <Servo.h>

Servo myservo1; // create servo object to control a servo

Servo myservo2;

Servo myservo3;

Servo myservo4;

Servo myservo5;

int potpin1 = 0; // analog pin used to connect the potentiometer

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;

int val5; void setup() {

myservo1.attach(9); // attaches the servo on pin 9 to the servo object

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)

myservo1.write(val1); // sets the servo position according to the scaled value

delay(15); // waits for the servo to get there

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

delay(15); // waits for the servo to get there

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)

myservo3.write(val3); // sets the servo position according to the scaled value

delay(15); // waits for the servo to get there

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)

myservo4.write(val4); // sets the servo position according to the scaled value

delay(15); // waits for the servo to get there

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)

myservo5.write(val5); // sets the servo position according to the scaled value

delay(15); // waits for the servo to get there

Video Simulasi Lengan Robot dengan Sensor dapat dilihat dalam video di bawah
ini :

KENDALI LENGAN ROBOT TANPA SENSOR


Rangkaian Motor Servo tanpa Sensor
List Program Berdasarkan Sweep atau Waktu :
#include <Servo.h>

Servo myservo1;

Servo myservo2;// create servo object to control a servo

Servo myservo3;

Servo myservo4;

Servo myservo5;

// twelve servo objects can be created on most boards

int pos1 = 0; // variabel menentukan posisi motor servo

int pos2 = 0;

int pos3 = 0;

int pos4 = 0;

int pos5 = 0;
int pos6 = 0;

int pos7 = 0;

int pos8 = 0;

void setup() {

myservo1.attach(8); // pin keluaran arduino

myservo2.attach(9);

myservo3.attach(10); // pin keluaran arduino

myservo4.attach(11);

myservo5.attach(12);

void loop() {

for (pos1 = 0; pos1 <= 90; pos1 += 1) { // berputar dari 0 derajat ke 180 derajat

// langkah dalam 1 derajat

delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat

for (pos1 = 90; pos1 >= 0; pos1 -= 1) { // berputar dari 180 derajat ke 0 derajat

myservo2.write(pos1);

myservo4.write(pos1);

delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat

for (pos2 = 0; pos2 <= 90; pos2 += 1) { // berputar dari 0 derajat ke 180 derajat

// langkah dalam 1 derajat


delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat

for (pos2 = 90; pos2 >= 0; pos2 -= 1) { // berputar dari 180 derajat ke 0 derajat

myservo5.write(pos2);

delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat

for (pos3 = 0; pos3 <= 90; pos3 += 1) { // berputar dari 0 derajat ke 180 derajat

// langkah dalam 1 derajat

myservo2.write(pos3);

myservo4.write(pos3);

delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat

for (pos3 = 90; pos3 >= 0; pos3 -= 1) { // berputar dari 180 derajat ke 0 derajat

delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat

for (pos4 = 0; pos4 <= 180; pos4 += 1) { // berputar dari 0 derajat ke 180 derajat

// langkah dalam 1 derajat

delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat

for (pos4 = 180; pos4 >= 0; pos4 -= 1) { // berputar dari 180 derajat ke 0 derajat

myservo1.write(pos4); // memberitahukan motor servo untuk ke posisi sesuai variabel 'pos'

delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat


}

for (pos5 = 0; pos5 <= 90; pos5 += 1) { // berputar dari 0 derajat ke 180 derajat

// langkah dalam 1 derajat

delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat

for (pos5 = 90; pos5 >= 0; pos5 -= 1) { // berputar dari 180 derajat ke 0 derajat

myservo2.write(pos5);

myservo4.write(pos5);

delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat

for (pos6 = 0; pos6 <= 90; pos6 += 1) { // berputar dari 0 derajat ke 180 derajat

// langkah dalam 1 derajat

myservo5.write(pos6);

delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat

for (pos6 = 90; pos6 >= 0; pos6 -= 1) { // berputar dari 180 derajat ke 0 derajat

delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat

for (pos7 = 0; pos7 <= 90; pos7 += 1) { // berputar dari 0 derajat ke 180 derajat

// langkah dalam 1 derajat

myservo2.write(pos7);
myservo4.write(pos7);

delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat

for (pos7 = 90; pos7 >= 0; pos7 -= 1) { // berputar dari 180 derajat ke 0 derajat

delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat

for (pos8 = 0; pos8 <= 180; pos8 += 1) { // berputar dari 0 derajat ke 180 derajat

// langkah dalam 1 derajat

myservo1.write(pos8); // memberitahukan motor servo untuk ke posisi sesuai variabel 'pos'

delay(15); // tunda 15ms untuk bergerak posisi ke 180 derajat

for (pos8 = 180; pos8 >= 0; pos8 -= 1) { // berputar dari 180 derajat ke 0 derajat

delay(15); // tunda 15ms untuk bergerak posisi ke 0 derajat

Anda mungkin juga menyukai