Kelompok : 1
Arif Pamenang 13115014
Adlu Hakam Ramadhan 13115042
Dzaky Hilmi Raihan 13115023
Retno Aljumuah 13115029
Ihsan Prawirahutomo 13115015
Syarif Hidayatullah 13115037
Berkembangnya tekhnologi secara pesat terkait peningkatan optimalisasi kecepatan kerja dan
minimalisasi ukuran. Serta berkembang pula perangkat perangkat elektronika yang
menunjang kemudahan dalam kehidupan sehari-hari yang juga berpengaruh dalam bidang
automasi. Oleh karena itu Penelitian ini ditujukan sebagai proyek tugas besar untuk mata
kuliah robotika ini akan membuat purnarupa dari suatu permasalahan berkaitan dengan
automasi robot dengan judul Mobil Remot Kontrol Android Anti Tabrak Dengan Fitur Semi-
Autopilot. Penulis mengintegrasikan mobil kecil, motor servo, sensor ultrasonic, motor dc,
dan nodeMCU untuk membentuk suatu sistem mobil remot kontrol berbasis android
dilengkapi dengan fitur auto pilot yang anti tabrak dengan memanfaatkan kemampuan sensor.
BAB 1 PENDAHULUAN
1.3 Tujuan
Pada dasarnya tujuan utama tim penulis membuat alat ini yaitu untuk
memenuhi tugas besar mata kuliah embedded system. Disamping itu penulis ingin menguji
keterampilan dalam merealisasikan imajinasi penulis mengenai sistem kontrol dan cara kerja
komponen-komponen yang terlibat di dalamnya. Menambah wawasan dan membantu
penerapan teori yang dipelajari didalam perkuliahan.
Sedangkan untuk sementara ini kegunaan alat yang tim penulis buat yakni untuk
menunjukkan sistem autopilot sedarhana dan pengotrolan berbasis android serta dapat
mengurangi tingkat kerusakan yang terjadi pada mobil remot kontrol.
BAB 2 TEORI DASAR
2.2 ESP-12E
Karena jantung dari NodeMCU adalah ESP8266 (khususnya seri ESP-12,
termasuk ESP-12E) maka fitur – fitur yang dimiliki NodeMCU akan kurang lebih sama ESP-
12 (juga ESP-12E untuk NodeMCU v.2 dan v.3) kecuali NodeMCU telah dibungkus oleh
API sendiri yang dibangun berdasarkan bahasa pemrograman eLua, yang kurang lebih cukup
mirip dengan javascript. Beberapa fitur tersebut antara lain:
10 Port GPIO dari D0 – D10
Fungsionalitas PWM
Antarmuka I2C dan SPI
Antarmuka 1 Wire
ADC
Adapun bentuk dan lokasi pin ESP-12E sebagai berikut :
Tabel 2.1 ?
RST : berfungsi mereset modul IO10 GBIO10
ADC: Analog Digital Converter SCLK: Clock
EN: Chip Enable, Active High GND: Ground
IO16 :GPIO16, dapat digunakan untuk IO15: GPIO15; MTDO; HSPICS; UART0_RTS
membangunkan chipset dari mode deep sleep
IO14 : GPIO14; HSPI_CLK IO2 : GPIO2;UART1_TXD
IO12 : GPIO12: HSPI_MISO IO0 : GPIO0
IO13: GPIO13; HSPI_MOSI; UART0_CTS IO4 : GPIO4
VCC: Catu daya 3.3V (VDD) IO5 : GPIO5
CS0 :Chip selection RXD : UART0_RXD; GPIO3
MISO : Slave output, Main input TXD : UART0_TXD; GPIO1
IO9 : GPIO9 MOSI: Main output slave input
2.6 Motor DC
Motor Listrik DC atau DC Motor ini menghasilkan sejumlah putaran per menit
atau biasanya dikenal dengan istilah RPM (Revolutions per minute) dan dapat dibuat berputar
searah jarum jam maupun berlawanan arah jarum jam apabila polaritas listrik yang diberikan
pada Motor DC tersebut dibalikan. Motor Listrik DC tersedia dalam berbagai ukuran rpm dan
bentuk. Kebanyakan Motor Listrik DC memberikan kecepatan rotasi sekitar 3000 rpm
hingga 8000 rpm dengan tegangan operasional dari 1,5V hingga 24V. Apabile tegangan yang
diberikan ke Motor Listrik DC lebih rendah dari tegangan operasionalnya maka akan dapat
memperlambat rotasi motor DC tersebut sedangkan tegangan yang lebih tinggi dari tegangan
operasional akan membuat rotasi motor DC menjadi lebih cepat. Namun ketika tegangan
yang diberikan ke Motor DC tersebut turun menjadi dibawah 50% dari tegangan operasional
yang ditentukan maka Motor DC tersebut tidak dapat berputar atau terhenti. Sebaliknya, jika
tegangan yang diberikan ke Motor DC tersebut lebih tinggi sekitar 30% dari tegangan
operasional yang ditentukan, maka motor DC tersebut akan menjadi sangat panas dan
akhirnya akan menjadi rusak.
Pada saat Motor listrik DC berputar tanpa beban, hanya sedikit arus listrik atau
daya yang digunakannya, namun pada saat diberikan beban, jumlah arus yang digunakan
akan meningkat hingga ratusan persen bahkan hingga 1000% atau lebih (tergantung jenis
beban yang diberikan). Oleh karena itu, produsen Motor DC biasanya akan mencantumkan
Stall Current pada Motor DC. Stall Current adalah arus pada saat poros motor berhenti karena
mengalami beban maksimal.
2.6.1 Prinsip Kerja Motor DC
Terdapat dua bagian utama pada sebuah Motor Listrik DC, yaitu Stator dan Rotor.
Stator adalah bagian motor yang tidak berputar, bagian yang statis ini terdiri dari rangka dan
kumparan medan. Sedangkan Rotor adalah bagian yang berputar, bagian Rotor ini terdiri dari
kumparan Jangkar. Dua bagian utama ini dapat dibagi lagi menjadi beberapa komponen
penting yaitu diantaranya adalah Yoke (kerangka magnet), Poles (kutub motor), Field
winding (kumparan medan magnet), Armature Winding (Kumparan Jangkar), Commutator
(Komutator) dan Brushes (kuas/sikat arang).
Pada prinsipnya motor listrik DC menggunakan fenomena elektromagnet untuk
bergerak, ketika arus listrik diberikan ke kumparan, permukaan kumparan yang bersifat utara
akan bergerak menghadap ke magnet yang berkutub selatan dan kumparan yang bersifat
selatan akan bergerak menghadap ke utara magnet. Saat ini, karena kutub utara kumparan
bertemu dengan kutub selatan magnet ataupun kutub selatan kumparan bertemu dengan kutub
utara magnet maka akan terjadi saling tarik menarik yang menyebabkan pergerakan
kumparan berhenti.
Untuk menggerakannya lagi, tepat pada saat kutub kumparan berhadapan dengan
kutub magnet, arah arus pada kumparan dibalik. Dengan demikian, kutub utara kumparan
akan berubah menjadi kutub selatan dan kutub selatannya akan berubah menjadi kutub utara.
Pada saat perubahan kutub tersebut terjadi, kutub selatan kumparan akan berhadap dengan
kutub selatan magnet dan kutub utara kumparan akan berhadapan dengan kutub utara magnet.
Karena kutubnya sama, maka akan terjadi tolak menolak sehingga kumparan bergerak
memutar hingga utara kumparan berhadapan dengan selatan magnet dan selatan kumparan
berhadapan dengan utara magnet. Pada saat ini, arus yang mengalir ke kumparan dibalik lagi
dan kumparan akan berputar lagi karena adanya perubahan kutub. Siklus ini akan berulang-
ulang hingga arus listrik pada kumparan diputuskan.[4]
Pada gambar 4.1 desain perangkat terdiri dari Mobil mini 4 WD sebagai sasis utama
sebagai tempat peletakkan dinamo, baterai, relay, motor DC, mikrokontroller, motor servo, dan
sensor ultrasonic. Desain perangkat tersebut telah dedesain secara compact, handal, dan efisien
4.2 Sistem Kerja Perangkat
4.3 Pembahasan
Implementasi penelitian memerlukan hardware yang akan dirakit dan software yang
digunakan untuk memprogram mikrokontroler. Software yang digunakan adalah Arduino IDE versi
1.6.3, sedangkan hardware yang digunakan sebagai berikut:
1) Smartphone Android
2) Mikrokontroler Arduino Uno R3
3) Wi-Fi ESP8266
4) Relay
5) Project PCB board
6) Mobil Tamia bekas
7) Sensor Ultrasonik
8) Motor servo
9) Dinamo
Skema perakitan peralatan mengacu pada panduan Arduino modul ESP8266 untuk perakitan
mobil dengan penggerak dinamo di belakang (Gambar 4.3 ) hanya saja perubahan pada perakitan
motor yang disesuaikan dengan mobil tamia. Kode perintah android diterima melalui wifi, kemudian
Arduino Uno R3 akan menggerakkan motor melalui relay. Project board PCB digunakan sebagai
sambungan kabel antar alat supaya mudah untuk lepas dan pasang tanpa harus menggunakan solder.
Mobil Mobil mini 4 WD terintegrasi dengan mikrokontroller yang terhubung dengan modul
ESP 8266 sehingga mobil Mobil mini 4 WD dapat di kontrol dengan smartphone yang system
operasinya adalah android. Sensor yang digunakan adalah ultrasonic, dimana sensor ultrasonic
berfungsi memantulkan suatu gelombang suara sehingga dapat dipakai untuk menafsirkan eksistensi
(jarak) suatu benda dengan jarak ±20 cm. Digerakkann dengan motor DC atau dinamo sebagai
penggerak roda belakang Tamia yang dikendalikan oleh Arduino tersupply oleh baterai terpasang
secara seri. Motor servo digunakan sebanyak 2 buah, yaitu menggerakan sensor ultrasonic sebagai
mencari objek yang ada di depan, dan ketika ada objek didepan maka motor servo akan
menggerakkan sensor ultrasonic untuk mencari jalan untuk menghindari objek tersebut. Dan yang
kedua motor servo berguna untuk menggerakkan roda yang ada didepan untuk bergerak kekanan dan
kiri yang tersensing oleh sensor ultrasonic untuk menghindari objek.
if(distance<20){
digitalWrite(maju,
digitalWrite(TRIG,
delay(1000); HIGH);
LOW); int KIRI2=50;
digitalWrite(TRIG, LOW);
digitalWrite(mundur,
digitalWrite(mundur,
delayMicroseconds(5);
digitalWrite(TRIG, LOW);
LOW
Vmundur);
); int KANAN2=120;
delayMicroseconds(5);
delay(1);
if(Vkanan==1
digitalWrite(TRIG,
delayMicroseconds(5);
&& Vkiri==0){
HIGH); variabledigitalWrite(TRIG,
Gambar 4.PenamaanpinMode(ECHO,
pada aplikasi
INPUT); HIGH);android
berbasis
delayMicroseconds(5);
digitalWrite(TRIG,
myservo2.write(KANAN2);
HIGH); Servo myservo1;
delayMicroseconds(5);
myservo1.attach(14);
Dan berikut adalah
digitalWrite(TRIG,
digitalWrite(TRIG, source program yangServo
}delayMicroseconds(5);
LOW);
LOW); telah diaplikasikan
myservo2; pada LOW);
digitalWrite(TRIG,
myservo2.attach(12); mobil Mobil mini 4 WD .
delayMicroseconds(5);
duration
digitalWrite(TRIG,
#include = pulseIn(ECHO,
LOW); HIGH);
<ESP8266WiFi.h> duration = pulseIn(ECHO, HIGH);
digitalWrite(TRIG,
else
distance
duration
if(Vkiri==1
#define == duration
pulseIn(ECHO,
&&
BLYNK_PRINTHIGH);
Vkanan==0){
/58.2;
SerialHIGH); BLYNK_WRITE(V1)
} distance ={ duration /58.2;
delayMicroseconds(5);
myservo2.write(KIRI2);
distance
myservo2.write(KIRI2);
#include = duration /58.2;
<BlynkSimpleEsp8266.h> Vmaju = param.asInt();
digitalWrite(TRIG,
digitalWrite(maju,
}ULTRA_KANAN=distance;
#include <Servo.h>LOW);
HIGH); } void loop()
myservo2.write(KANAN2);
{
duration
digitalWrite(mundur,
else{ = pulseIn(ECHO,
LOW
HIGH);
); digitalWrite(maju, HIGH);
Blynk.run();
BD
belok=1;
myservo2.write(TENGAH);
myservo1.write(TENGAH);
= duration
char auth[] = /58.2; BLYNK_WRITE(V2)
digitalWrite(mundur,
"0rChd1P-mNWzb5UX0M18uCHa6xTmsiEi"; {
digitalWrite(LED_BUILTIN, LOW );
onoff));
pos=TENGAH;
}delay(1000);
char ssid[] = "tubes"; Vkanan belok=1;
= param.asInt();
if(onoff==0){
myservo1.write(pos);
if(Vmaju==1
else{pass[] = &&
char (Vkiri==1 || Vkanan==1)){
"tugasbesar"; } digitalWrite(maju,
} LOW);
myservo2.write(pos);
belok=0;
digitalWrite(maju,
BD=21; Vmaju); else{
digitalWrite(mundur, LOW);
}int
}belok=1;
Vmaju; BLYNK_WRITE(V3)
belok=0; {
while(BD<=20){
else{
}} Vkanan;
int Vmundur} = param.asInt();
tr=analogRead(touch);
digitalWrite(maju,
while(ULTRA_KANAN
digitalWrite(maju,
while(BD==21
int Vmundur; && LOW);
0);
belok==1){
> ULTRA_KIRI && belok==1){
} delay(500);
}
digitalWrite(mundur,
}intwhile(ULTRA_KIRI
Vkiri; >LOW);
ULTRA_KANAN && belok==1){}
if (tr>=1020){
myservo1.write(KIRI1);
}int
digitalWrite(TRIG,
digitalWrite(TRIG,
Vmode; LOW);
LOW); BLYNK_WRITE(V4)
}
onoff=1; {
delay(1000);
else{
delayMicroseconds(5);
delayMicroseconds(5); Vkiridelay(500);
= param.asInt();
tr=analogRead(touch);
digitalWrite(TRIG,
digitalWrite(maju,
digitalWrite(TRIG,
intdigitalWrite(TRIG,
touch=A0; LOW);
Vmaju);
HIGH);
HIGH); } } if (tr>=1020){
delayMicroseconds(5);
digitalWrite(mundur,
delayMicroseconds(5);
delayMicroseconds(5);
int tr; Vmundur); else { onoff=0;
if(Vkanan==1
digitalWrite(TRIG,
digitalWrite(TRIG,
digitalWrite(TRIG,
int onoff=0; && Vkiri==0){
HIGH);
LOW);
LOW); BLYNK_WRITE(V5)
delay(500);
onoff=0; {
delayMicroseconds(5);
duration
myservo2.write(KANAN2);
duration
int = =pulseIn(ECHO,
KIRI1=179;pulseIn(ECHO,HIGH);
HIGH); Vmode
} =} param.asInt();
digitalWrite(TRIG,
}int
distance
distance
= =duration
TENGAH=90;duration
LOW);
/58.2;
/58.2; } } else {
distance
else if(Vkiri==1
int pos; = duration
&& Vkanan==0){
/58.2; void setup()
else{ delay(500);
{
ULTRA_KIRI=distance;
intmyservo2.write(KIRI2);
TRIG = 16; Serial.begin(9600);
}
if(Vmode==1){
}int ECHO = 5; Blynk.begin(auth,
} ssid, pass);
myservo1.write(TENGAH);
else{
int ULTRA_KANAN; pinMode(LED_BUILTIN,
Serial.print(tr);
digitalWrite(TRIG, LOW);OUTPUT);
myservo2.write(TENGAH);
int ULTRA_KIRI; pinMode(maju,
Serial.print("=>");
OUTPUT);
delayMicroseconds(5);
}unsigned long duration; pinMode(mundur,
Serial.println(onoff);
digitalWrite(TRIG, OUTPUT);
HIGH);
}unsigned int distance; pinMode(TRIG,
} OUTPUT);
delayMicroseconds(5);
}
unsigned int BD; pinMode(ECHO, INPUT);
digitalWrite(TRIG, LOW);
myservo1.attach(14);
duration = pulseIn(ECHO, HIGH);
myservo2.attach(12);