Introduction: Surveilance RC Robot

Introduction

Tujuan dari dibuatnya projek ini adalah mahasiswa dapat membuat alat atau produk berbasis IoT. Pada projek ini kami membuat Surveilance RC Robot dari ESP32-CAM yang dikontrol melalui aplikasi mobile. Robot RC yang kami buat dimaksudkan untuk kebutuhan hiburan dan hobi. Namun, untuk kedepannya RC ini dapat dijadikan dasar dari alat yang dapat dibutuhkan masyarakat. Contohnya apabila robot ini didesign lebih ke arah penyelamatan seperti pencari korban hilang atau robot untuk pengantaran suatu barang, dan sebenarnya banyak lagi yang dapat dilakukan karena kamera yang kami gunakan dan aplikasi yang dapat digunakan dari jarak jauh dapat menunjang hal-hal tersebut.

Kami membuat aplikasi dengan framework flutter sebagai controller dan display kamera dari robot ini. Kami menggunakan firebase untuk Real Time Data Base sebagai perintah untuk menggerakkan robot. Sedangkan robot menggunakan ESP32-CAM sebagai modul mikrokontrolernya sekaligus kameranya.

Supplies

Alat

Hardware

  1. Solder
  2. Crimper
  3. Tang potong
  4. Isolasi kabel
  5. Obeng
  6. PC

Software

  1. Visual Studio Code
  2. Arduino IDE
  3. Firebase


Bahan

  1. ESP32-CAM
  2. L298n motor driver
  3. LM2596 Step Down DC
  4. DC Motor 4 buah
  5. Chasis RC (akrilik, rumah motor, gear plastik, baut, dan spacer)
  6. Jumper Cable
  7. Timah
  8. PCB bolong
  9. Baterai 18650 3.7V 3 buah
  10. Battery container 3 slot
  11. Servo motor SG90

Step 1: Skematik Dan Rangkaian

PINOUT LM2596

VCC --> VCC ESP32-CAM

GND --> GND ESP32-CAM

PINOUT L298n

VCC 5V --> VCC SERVO

VCC 12V --> ESP32-CAM

GND --> GND BATTERY

PINOUT BATTERY

VCC --> LM2596

GND --> GND L298n

PINOUT DC MOTOR 1

(+) --> PIN MOTOR 1 (+)

(-) --> PIN MOTOR 1 (-)

PINOUT DC MOTOR 2

(+) --> PIN MOTOR 2 (+)

(-) --> PIN MOTOR 2 (-)

PINOUT ESP32-CAM

GPIO 14 --> PIN IN1 L298n

GPIO 15 --> PIN IN2 L298n

GPIO 13 --> PIN IN3 L298n

GPIO 12 --> PIN IN4 L298n

GPIO 2 --> PIN SERVO

VCC 5V --> VCC LM2596

GND --> GND LM2596

GND --> GND SERVO

Step 2: Setup Hardware

Kita menggunakan esp32 cam ov2640 sebagai main driver , 1 servo , l298n motor driver dan dc brushless motor untuk project ini. Esp32 cam akan menjadi main board dan sebagai camera stream. Kita menggunakan websocket untuk memberikan socket stream untuk esp32. Websocket dibuat dengan node js yang akan membuat local server untuk membuka port websocket dan juga web client(untuk test server). Motor driver l298n untuk mengerakan 4 motor dengan 4 pin logic dari esp32, dan memberikan tegangan 5v untuk servo. Esp32 cam mendapatkan 5v dari 3 baterai 3.7 volt yang di setdown dengan buck converter menjadi 5v.

Step 3: Setup Main Code

Di main code kami, kami define semua library dan function define-define dari file kami. Di code ini, kami membuat setup firebase yang sebagai perantara dari applikasi dan esp32, di firebase kami menerima Boolean dari dpad yang ada di applikasi, dan juga interger dari slider servo. Servo akan menerima interger dalam range 0-180 untuk angle yang digunakan servo agar dapat menjadi pivot kamera yang kami gunakan. Dan juga di main code ini ada camera config yang berasal dari library esp32cam yaitu config untuk define pin yang digunakan camera untuk memulai streamnya. Kami menggunakan Arduino websocket agar stream dari esp cam akan mendapatkan tempat untuk menampung stream yang akan di hasilkan dari esp32cam tsb.

Berikut merupakan GitHub dari main code nya

https://github.com/Psickoo/TRIOTRC

Berikut terlampir juga GitHub dari node.js untuk stream cameranya

https://github.com/Psickoo/TRIOTWS

Step 4: Setup Software

Disini kita menggunakan Firebase untuk login pada aplikasi dan untuk meneruskan value button saat dipencet agar ESP32 dapat merespon untuk menggerakan RC sesuai dengan setup pada platformIO yang dibuat. Pertama tama setup firebase agar terhubung dengan flutter kita perlu membuat project pada firebase terlebih dahulu. Untuk setup agar flutter dapat terhubung dengan firebase kita perlu memasukan file json dari firebase serta perlu menambahkan beberapa dependencies pada gradle dan pubspec.yaml tidak lupa juga pada main dart masukan code Firebase.initializeApp lalu masukan hal hal yang dibutuhkan seperti apiKey AppID dan sebagainya. untuk cara menghubungkan flutter dengan firebase sendiri dapat di lihat dari video link berikut https://www.youtube.com/watch?v=sz4slPFwEvs&t=5s&pp=ygUWZmx1dHRlciBmaXJlYmFzZSBzZXR1cA%3D%3D setelah semua setup selesai maka selanjutnya kita akan menghubungkan app flutter agar dapat terhubung dengan firebase authentication. disini code yang akan dipakai untuk menghubungkan app ke firebase auth adalah FirebaseAuth.instance.signInWithEmailAndPassword. code ini dipakai di halaman login dan register. Pada bagian register ada sedikit perubahan yaitu saat password dan confirm password diisi dengan karakter yang sama maka fungsi FirebaseAuth.instance.signInWithEmailAndPassword akan dijalankan. Lalu saat masuk ke aplikasi utama terdapat beberapa tombol yaitu tombol Dpad 4 arah untuk menjalankan RC dan tombol slider yang bertuliskan vertical dan horizontal untuk menggerakan servo. Tombol tombol tersebut juga menggunakan firebase yaitu realtime database yang bertujuan untuk menukar value dari tombol sercara real time. Untuk tombol Dpad 4 arah sendiri menggunakan value false dan true agar selama tombol ditekan value akan menjadi true tetapi saat dilepas akan Kembali menjadi false. Untuk slider servo logic value nya seperti volume level di drag jadi besar slider akan bertambah atau menurun seiring slider ditarik. Code DatabaseReference databaseReference = FirebaseDatabase.instance.reference() sendiri digunakan untuk membuat referensi ke database Firebase Realtime Database. Lalu code databaseReference.child('servo').once().then(...) akan membaca nilai terakhir dari child dengan nama 'servo' di database. Jika nilai tersebut tidak null, maka nilai tersebut di-parse ke tipe double dan disimpan dalam servo, kemudian code setState() dipanggil untuk memperbarui tampilan yakni tampilan pada aplikasi dan RTDB. Lalu untuk analognya kita mendeklarasikan string yang diberi nama rtdbkey agar RTDB dpt mengedentifikasi arah yang diinginkan. Selain rtdbkey kita juga memasukan dynamic rtdbvalueOn dan rtdbvalueOff yang berguna sebagai dynamic yang digunakan agar RTDB dapat mengidentifikasi value saat tombol ditekan maupun saat tombol dilepas. Disini untuk tombolnya sendiri digunakan gesture detector untuk cara kerja dari gesture detectornya kita membuat Boolean terlebih dahulu agar selama tombol dipencet valuenya akan berada di true tetapi saat tombol dilepas value akan Kembali ke false. Sama seperti servo pada Dpad kita menggunakan databaseRef untuk membuat referensi ke RTDB.

Berikut terlampir link GitHub dari software App nya

https://github.com/Psickoo/TRIOTAPP

Step 5: Setup Firebase

Disini kita menggunakan Firebase untuk login pada aplikasi dan untuk meneruskan value button saat dipencet agar ESP32 dapat merespon untuk menggerakan RC sesuai dengan setup pada platformIO yang dibuat. Pertama tama setup firebase agar terhubung dengan flutter kita perlu membuat project pada firebase terlebih dahulu. Untuk setup agar flutter dapat terhubung dengan firebase kita perlu memasukan file json dari firebase serta perlu menambahkan beberapa dependencies pada gradle dan pubspec.yaml tidak lupa juga pada main dart masukan code Firebase.initializeApp lalu masukan hal hal yang dibutuhkan seperti apiKey AppID dan sebagainya. untuk cara menghubungkan flutter dengan firebase sendiri dapat di lihat dari video link berikut https://www.youtube.com/watch?v=sz4slPFwEvs&t=5s&pp=ygUWZmx1dHRlciBmaXJlYmFzZSBzZXR1cA%3D%3D setelah semua setup selesai maka selanjutnya kita akan menghubungkan app flutter agar dapat terhubung dengan firebase authentication. disini code yang akan dipakai untuk menghubungkan app ke firebase auth adalah FirebaseAuth.instance.signInWithEmailAndPassword. code ini dipakai di halaman login dan register. Pada bagian register ada sedikit perubahan yaitu saat password dan confirm password diisi dengan karakter yang sama maka fungsi FirebaseAuth.instance.signInWithEmailAndPassword akan dijalankan. Lalu saat masuk ke aplikasi utama terdapat beberapa tombol yaitu tombol Dpad 4 arah untuk menjalankan RC dan tombol slider yang bertuliskan vertical dan horizontal untuk menggerakan servo. Tombol tombol tersebut juga menggunakan firebase yaitu realtime database yang bertujuan untuk menukar value dari tombol sercara real time. Untuk tombol Dpad 4 arah sendiri menggunakan value false dan true agar selama tombol ditekan value akan menjadi true tetapi saat dilepas akan Kembali menjadi false. Untuk slider servo logic value nya seperti volume level di drag jadi besar slider akan bertambah atau menurun seiring slider ditarik. Code DatabaseReference databaseReference = FirebaseDatabase.instance.reference() sendiri digunakan untuk membuat referensi ke database Firebase Realtime Database. Lalu code databaseReference.child('servo').once().then(...) akan membaca nilai terakhir dari child dengan nama 'servo' di database. Jika nilai tersebut tidak null, maka nilai tersebut di-parse ke tipe double dan disimpan dalam servo, kemudian code setState() dipanggil untuk memperbarui tampilan yakni tampilan pada aplikasi dan RTDB. Lalu untuk analognya kita mendeklarasikan string yang diberi nama rtdbkey agar RTDB dpt mengedentifikasi arah yang diinginkan. Selain rtdbkey kita juga memasukan dynamic rtdbvalueOn dan rtdbvalueOff yang berguna sebagai dynamic yang digunakan agar RTDB dapat mengidentifikasi value saat tombol ditekan maupun saat tombol dilepas. Disini untuk tombolnya sendiri digunakan gesture detector untuk cara kerja dari gesture detectornya kita membuat Boolean terlebih dahulu agar selama tombol dipencet valuenya akan berada di true tetapi saat tombol dilepas value akan Kembali ke false. Sama seperti servo pada Dpad kita menggunakan databaseRef untuk membuat referensi ke RTDB.

Step 6: Assembly Alat

  • Pertama, rakit chasis yang sudah disediakan sesuai dengan instruksi yang diberikan.
  • Lalu solder DC motor sesuai kutub masing masing dan pasang pada lubang di setiap kaki roda.
  • Pasang roda dan pasang baut di akrilik pertama untuk memperkokoh roda.
  • Kemudian, pasang komponen L298n, LM2596, baterai dan containernya pada dasar akrilik pertama seperti skematik di step 1 kecuali ESP32-CAM yang nantinya akan diletakkan di atas sebagai kepala robot.
  • Buat 3D Print socket untuk meletakkan ESP32-CAM.
  • Lem hasil 3D print socket dengan pcb bolong yang sudah diberikan female header.
  • Pasang akrilik kedua dengan spacernya dan keluarkan kabel yang diperlukan untuk ESP32-CAM
  • Tempelkan kedua servo dan ESP32-CAM sebagai leher dan kepala RC
  • Solder kabel jumper yang dibutuhkan untuk ESP32-CAM dan kedua servo
  • Nyalakan server lokal untuk camera dari ESP dan aplikasi untuk controller dari robot ini
  • Alat siap dipakai dengan lancar (tergantung koneksi pengguna)

Step 7: Cara Kerja Sistem

Sistem ini bermula ketika switch dinyalakan yang akan membuat baterai sebesar 11,1V mengalir melalui LM2596 yang akan mengatur arus pada esp cam. Bersamaan dengan aplikasi menyala yang dikoneksikan wifi bersama esp, maka aplikasi siap mengirimkan sinyal ke Real-time database untuk mengontrol servo dan motor yang ada pada robot ini.

Step 8: Kesimpulan Dan Hasil Alat

Alat ini adalah alat berbasis IoT yang merupakan robot rc yang menggunakan mikro kontroler ESP32-CAM dikontrol dengan aplikasi. Alat ini bertujuan untuk hiburan dan mengembangkan hobi. Tentu dengan berbagai mantainance alat ini akan dapat digunakan sebagai alat yang berfungsi untuk masyarakat seperti robot pencarian korban, robot pengantar barang, dan lain-lain. Kami menggunakan aplikasi untuk mengontrol alat ini dengan firebase sebagai database penerima dan pengirim sinyal dari esp.

Video Demo Tugas Rancang:

https://drive.google.com/drive/folders/18a8yWH3TNYX8BR3nJyRU3QCZwl7S38gR?usp=sharing

Link GitHub node.js

https://github.com/Psickoo/TRIOTWS

Link GitHub RC Robot

https://github.com/Psickoo/TRIOTRC

Link Github Software App

https://github.com/Psickoo/TRIOTAPP