SISTEM MANAJEMEN PARKIR DENGAN PALANG OTOMATIS DAN PEMANTAUAN JUMLAH KENDARAAN BERBASIS ARDUINO IDE


LAPORAN

LABORATORIUM MIKROKONTROLLER 2

 

SISTEM MANAJEMEN PARKIR DENGAN PALANG OTOMATIS DAN PEMANTAUAN JUMLAH KENDARAAN BERBASIS ARDUINO IDE

 

 



Dosen Pengampu:

Dr. Samuel Beta K. K., Ing.Tech., M.T.

 

Disusun Oleh:

KELOMPOK 3

  Amara Novia Dewi                RE-2B           (4.34.22.1.03)
 Hispano Suiza Artileri            RE-2B           (4.34.22.1.10)
 Nafisa Nasya Az Zahra           RE-2B           (4.34.22.1.17)
Varian Mohamad Cerdika       RE-2B           (4.34.22.1.23)



PROGRAM STUDI TEKNOLOGI REKAYASA ELEKTRONIKA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI SEMARANG
2024




    BAB 1
PENDAHULUAN

1.1. Latar Belakang

Dengan meningkatnya jumlah kendaraan di perkotaan, kebutuhan akan sistem manajemen parkir yang efisien menjadi semakin krusial. Sistem parkir konvensional yang tidak mampu menyediakan informasi real-time tentang ketersediaan slot parkir menyebabkan pengendara menghadapi kesulitan dalam menemukan tempat parkir yang tersedia. Hal ini tidak hanya menimbulkan stres dan frustrasi tetapi juga mengakibatkan pemborosan waktu dan bahan bakar. Selain itu, pengelolaan parkir secara manual rentan terhadap kesalahan manusia yang dapat menghambat efisiensi operasional dan perencanaan.

Pengembangan "Sistem Manajemen Parkir dengan Palang Otomatis dan Pemantauan Jumlah Kendaraan" menawarkan solusi yang relevan dan dibutuhkan. Sistem ini menggunakan palang parkir otomatis yang dilengkapi dengan sensor untuk menghitung kendaraan yang masuk dan keluar, memungkinkan pemantauan jumlah kendaraan secara akurat dan real-time. Informasi ini memungkinkan pengguna mengetahui ketersediaan slot parkir sebelum memasuki area parkir, mengurangi waktu pencarian dan pemborosan bahan bakar. Selain itu, pengelola parkir dapat memantau dan mengelola area parkir dengan lebih efektif, meningkatkan efisiensi operasional serta akurasi data.

1.2. Rumusan Masalah

Berdasarkan uraian di atas, beberapa rumusan masalah yang harus diperhatikan, yaitu:
1. Bagaimana cara merancang palang otomatis yang efektif dan efisien?
2. Bagaimana mengetahui ketersediaan slot parkir dengan menghitung jumlah kendaraan yang masuk dan keluar?

1.3. Solusi

Berdasarkan permasalahan di atas, solusi yang diperoleh, yaitu merancang dan mengimplementasikan sistem parkir yang menggunakan palang parkir otomatis dan sensor untuk menghitung jumlah kendaraan yang masuk dan keluar dari area parkir. Palang parkir otomatis yang dapat dioperasikan secara otomatis, sehingga lebih efisien dan mengurangi kebutuhan akan pengelola parkir manual. Sensor akan dipasang di pintu masuk dan keluar area parkir untuk mendeteksi kendaraan yang melewati. Data dari sensor ini akan digunakan untuk menghitung jumlah kendaraan yang ada di dalam area parkir. Data yang dikumpulkan oleh sensor akan diproses secara real-time untuk menentukan ketersediaan slot parkir. Informasi ini akan tersedia melalui papan informasi di pintu masuk sehingga memungkinkan pengguna untuk mengetahui ketersediaan slot parkir.


BAB 2
LANDASAN TEORI

2.1. Arduino Uno R3

Arduino adalah pengendali mikro single-board yang bersifat open-source, diturunkan dari wiring platform, dirancang untuk memudahkan penggunaan elektronik dalam berbagai bidang. Hardware arduino memiliki prosesor Atmel AVR dan software arduino memiliki bahasa pemrograman C. Memori yang dimiliki oleh Arduino Uno, yaitu flash memory sebesar 32KB, SRAM sebesar 2KB, dan EEPROM sebesar 1KB. Clock pada board Uno menggunakan XTAL dengan frekuensi 16 Mhz. Dari segi daya, Arduino Uno membutuhkan tegangan aktif kisaran 5 volt, sehingga Uno dapat diaktifkan melalui koneksi USB. Arduino Uno memiliki 28 kaki yang sering digunakan. Untuk digital I/O terdiri dari 14 kaki, kaki 0 sampai kaki 13, dengan 6 kaki mampu memberikan output PWM (kaki 3, 5, 6, 9, 10, dan 11). Masing-masing dari 14 kaki digital di Uno beroperasi dengan tegangan maksimum 5 volt dan dapat memberikan atau menerima maksimum 40mA. Untuk analog input terdiri dari 6 kaki, yaitu kaki A0 sampai kaki A5. Kaki pin merupakan tempat input tegangan kepada Uno saat menggunakan sumber daya eksternal selain USB dan adaptor. ATMega328 merupakan bagian mikrokontroler yang ada pada arduino R3 keluaran dari atmel yang mempunyai arsitektur RISC (Reduce Instruction Set Computer) yang mana setiap proses eksekusi data lebih cepat dari pada arsitektur CISC (Completed Instruction Set Computer).

Gambar 2.1 Arduino Uno R3

2.2. Sensor Ultrasonik HCSR-04

Sensor ultrasonik adalah sebuah sensor yang berfungsi untuk mengubah besaran fisis (bunyi) menjadi besaran listrik dan sebaliknya. Cara kerja sensor ini didasarkan pada prinsip dari pantulan suatu gelombang suara sehingga dapat dipakai untuk menafsirkan eksistensi (jarak) suatu benda dengan frekuensi tertentu. Disebut sebagai sensor ultrasonik karena sensor ini menggunakan gelombang ultrasonik (bunyi ultrasonik). Gelombang ultrasonik adalah gelombang bunyi yang mempunyai frekuensi sangat tinggi yaitu 20.000 Hz. Bunyi ultrasonik tidak dapat didengar oleh telinga manusia. Bunyi ultrasonik dapat didengar oleh anjing, kucing, kelelawar, dan lumba-lumba. Bunyi ultrasonik bisa merambat melalui zat padat, cair dan gas. Reflektivitas bunyi ultrasonik di permukaan zat padat hampir sama dengan reflektivitas bunyi ultrasonik di permukaan zat cair. Akan tetapi, gelombang bunyi ultrasonik akan diserap oleh tekstil dan busa.

Pada sensor ultrasonik, gelombang ultrasonik dibangkitkan melalui sebuah alat yang disebut dengan piezoelektrik dengan frekuensi tertentu. Piezoelektrik ini akan menghasilkan gelombang ultrasonik (umumnya berfrekuensi 40kHz) ketika sebuah osilator diterapkan pada benda tersebut. Secara umum, alat ini akan menembakkan gelombang ultrasonik menuju suatu area atau suatu target. Setelah gelombang menyentuh permukaan target, maka target akan memantulkan kembali gelombang tersebut. Gelombang pantulan dari target akan ditangkap oleh sensor, kemudian sensor menghitung selisih antara waktu pengiriman gelombang dan waktu gelombang pantul diterima.

Gambar 2.2 Cara kerja sensor ultrasnoik

Secara detail, cara kerja sensor ultrasonik adalah sebagai berikut:
  • Sinyal dipancarkan oleh pemancar ultrasonik dengan frekuensi tertentu dan dengan durasi waktu tertentu. Sinyal tersebut berfrekuensi diatas 20kHz. Untuk mengukur jarak benda (sensor jarak), frekuensi yang umum digunakan adalah 40kHz. 
  • Sinyal yang dipancarkan akan merambat sebagai gelombang bunyi dengan kecepatan sekitar 340m/s. Ketika menumbuk suatu benda, maka sinyal tersebut akan dipantulkan oleh benda tersebut. 
  • Setelah gelombang pantulan sampai di alat penerima, maka sinyal tersebut akan diproses untuk menghitung jarak benda tersebut. Jarak benda dihitung berdasarkan rumus s = 340.t/2 Dimana s merupakan jarak antara sensor ultrasonik dengan benda (bidang pantul), dan t adalah selisih antara waktu pemancaran gelombang oleh transmitter dan waktu ketika gelombang pantul diterima receiver.
Sensor ini merupakan sensor ultrasonik siap pakai, satu alat yang berfungsi sebagai pengirim, penerima, dan pengontrol gelombang ultrasonik. Alat ini bisa digunakan untuk mengukur jarak benda dari 2cm - 4m dengan akurasi 3mm. Alat ini memiliki 4 pin, pin Vcc, Gnd, Trigger, dan Echo. Pin Vcc untuk listrik positif dan Gnd untuk ground-nya. Pin Trigger untuk trigger keluarnya sinyal dari sensor dan pin Echo untuk menangkap sinyal pantul dari benda.
Gambar 2.3 Sensor ultrasonik HCSR-04

2.3. Motor Servo

Motor servo adalah sebuah motor DC dengan sistem umpan balik tertutup di mana posisi rotor-nya akan diinformasikan kembali ke rangkaian kontrol yang ada di dalam motor servo. Motor ini terdiri dari sebuah motor DC, serangkaian gear, potensiometer, dan rangkaian kontrol. Potensiometer berfungsi untuk menentukan batas sudut dari putaran servo. Sedangkan sudut dari sumbu motor servo diatur berdasarkan lebar pulsa yang dikirim melalui kaki sinyal dari kabel motor servo. 
Gambar 2.4 Motor servo

Keunggulan dari penggunaan motor servo adalah:
  • Tidak bergetar dan tidak ber-resonansi saat beroperasi.
  • Daya yang dihasilkan sebanding dengan ukuran dan berat motor.
  • Penggunaan arus listik sebanding dengan beban yang diberikan.
  • Resolusi dan akurasi dapat diubah dengan hanya mengganti encoder yang dipakai.
  • Tidak berisik saat beroperasi dengan kecepatan tinggi.
Motor servo pada dasarnya dibuat menggunakan motor DC yang dilengkapi dengan kontroler dan sensor posisi sehingga dapat memiliki gerakan 0°, 90°, 180° atau 360°. Berikut adalah komponen internal sebuah motor servo 180°.


Gambar 2.5 Kompunen penyusun motor servo

Tiap komponen pada motor servo diatas masing-masing memiliki fungsi sebagai kontroler, driver, sensor, girbox dan aktuator. Pada gambar di atas terlihat beberapa bagian komponen motor servo. Motor pada sebuah motor servo adalah motor DC yang dikendalikan oleh bagian controller, kemudian komponen yang berfungsi sebagai sensor adalah potensiometer yang terhubung pada sistem girbox pada motor servo. Untuk menjalankan atau mengendalikan motor servo berbeda dengan motor DC. Karena untuk mengedalikan motor servo perlu diberikan sumber tegangan dan sinyal kontrol. Besarnya sumber tegangan tergantung dari spesifikasi motor servo yang digunakan. Sedangkan untuk mengendalikan putaran motor servo dilakukan dengan mengirimkan pulsa kontrol dengan frekuensi 50Hz dengan periode 20ms dan duty cycle yang berbeda. Dimana untuk menggerakan motor servo sebesar 90° diperlukan pulsa dengan ton duty cycle pulsa posistif 1,5ms dan untuk bergerak sebesar 180° diperlukan lebar pulsa 2ms. 

2.4.  Modul OLED I2C 0x96"

Modul OLED I2C 0.96” adalah suatu display grafik berukuran 0.96 inci dan mempunyai resolusi 128x64 pixel menggunakan teknologi OLED. Modul OLED biasanya terbuat dari karbon dan hidrogen. Pemrograman modul OLED menggunakan mikrokontroler arduino yang berkomunikasi I2C, menggunakan 2 pin yaitu pin SDA dan Pin SCK sehingga dapat menghemat pin.
Gambar 2.6 Modul OLED I2C 0x96"

Berbeda dengan teknologi LCD, modul OLED dapat menghasilkan cahaya sendiri dari masing-masing pixel-nya dan tidak membutuhkan tambahan backlight sehingga tampilan dari modul OLED terlihat lebih terang dan jernih serta warna hitam yang dihasilkan berwarna hitam pekat. Sehingga dalam pemakaian daya, modul OLED relatif lebih hemat dibandingkan LCD. Modul OLED membutuhkan tegangan sebesar 3.3 - 5 V untuk bekerja yang disambungkan pada pin VCC dan ground pada pin GND.


BAB 3
KEGIATAN PELAKSANAAN

3.1.  Tahap Perancangan 

Proses pembuatan sistem pada Project Akhir ini memerlukan rancangan dan bahan tertentu serta dibagi mejadi beberapa tahapan. Berikut tahapan-tahapan yang dilaksanakan.

3.1.1. Definisi Sistem

Sistem Manajemen Parkir dengan Palang Otomatis dan Pemantauan Jumlah Kendaraan adalah sebuah sistem terpadu yang terdiri dari palang parkir otomatis, sensor penghitung kendaraan, perangkat lunak pengolah data, dan antarmuka pengguna. Sistem ini dirancang untuk mengelola dan memantau ketersediaan slot parkir secara efisien. Sensor yang dipasang di pintu masuk dan keluar area parkir menghitung jumlah kendaraan yang masuk dan keluar secara real-time. Informasi ini diproses oleh perangkat lunak dan disajikan melalui papan informasi, sehingga memungkinkan pengguna untuk mengetahui ketersediaan slot parkir dan mengurangi waktu pencarian. Sistem ini bertujuan meningkatkan efisiensi operasional, mengurangi kesalahan manusia, dan memberikan pengalaman parkir yang lebih nyaman dan teratur.

3.1.2. Diagram Blok

Pada bagian ini, terlebih dahulu membuat perencanaan diagram blok yang merupakan tahap pertama dalam merancang dan menyusun rangkaian yang dibutuhkan untuk Project Akhir. Untuk memahami cara kerja sistem, terlebih dahulu harus memahami cara kerja tiap blok rangkaian. Diagram blok keseluruhan untuk sistem parkir ini dapat dilihat pada Gambar 3.1


Gambar 3.1 Blok diagram


Seperti yang terlihat pada diagram blok yang ditunjukan pada Gambar 3.1,  setiap blok memiliki fungsi masing-masing. Berikut ini penjelasan dari tiap blok dari alat yang dibuat.

A. Masukan
  1. Push button digunakan sebagai sarana untuk  membuka dan menutup palang pada sistem parkir.
  2. Sensor Ultrasonik dipasang di pintu masuk dan keluar area parkir untuk mendeteksi keberadaan kendaraan yang mendekat. Ketika sebuah kendaraan terdeteksi, maka palang akan tertutup. Dengan mendeteksi kendaraan yang masuk dan keluar, sensor ultrasonik menghitung jumlah kendaraan yang ada di dalam area parkir. Data ini kemudian digunakan untuk menentukan ketersediaan slot parkir secara real-time.

B. Proses
Arduino Uno R3 berkerja sebagai pemproses dan pengontrol system tertanam untuk membuka dan menutup palang serta menhitung jumlah kendaraan yang masuk dan keluar.

C. Keluaran
  1. LED RGB digunakan sebagai indikator palang. Saat palang tertutup maka LED akan menyala warna merah, sedangkan saad palang terbuka, maka LED akan menyala warna hijau.
  2. Modul OLED I2C 0x96" digunakan untuk menampilkan informasi dengan menampilkan jumlah mobil yang keluar dan masuk serta ketersediaan slot parkir.
  3. Motor Servo digunakan untuk menggerakkan terbuka dan tertutupnya palang parkir.

3.1.3. Cara Kerja Alat

Kondisi awal pada palang masuk sensor ultrasonik dalam kondisi tidak aktif. LED akan berwarna merah dan modul OLED akan menampilkan perintah untuk menekan tombol dan menampilkan ketersesiaan slot parkir. Ketika pengguna, menekan tombol maka palang parkir akan terbuka. LED akan berwarna hijau dan modul OLED akan menampilkan pesan "Silahkan Masuk". Kemudian pengguna melewati palang parkir yang menyebabkan sensor ultrasonik aktif. Sensor ultrasonik akan mendeteksi kendaraan yang masuk. Setelah kendaraan melewati sensor ultrasonik, sensor ultrasonik akan kembali dalam kondisi LOW dan palang akan tertutup kembali. LED dan tampilan pada modul OLED akan kembali seperti semula. Begitu juga dengan palang keluar. Kondisi awal sensor ultrasonik dalam kondisi tidak aktif dan LED akan berwarna merah. Ketika petugas parkir menekan tombol, maka palang parkir akan terbuka dan LED akan berwarna hijau. Kemudian pengguna melewati palang parkir yang menyebabkan sensor ultrasonik aktif. Sensor ultrasonik akan mendeteksi kendaraan yang keluar. Setelah kendaraan melewati sensor ultrasonik, sensor ultrasonik akan kembali dalam kondisi LOW dan palang akan tertutup kembali. Kondisi LED juga akan kembali seperti semula.

3.1.4. Diagram Pengawatan Push Button



Gambar 3.2 Pengawatan push button

Button digunakan sebagai input untuk membuka palang parkir. Pengawatan push button ke mikrokontroler Arduino Uno R3 dilakukan untuk mengirimkan sinyal saat tombol ditekan.

Push button memiliki pin GND dan pin output yang terhubung dengan Arduino Uno R3. Pin GND adalah pin untuk menyediakan jalur ground atau tanah/negative. Pin output pada button masuk terhubung dengan pin 14 dari Arduino Uno R3 sedangkan pin output pada button keluar terhubung dengan pin 8 dari Arduino Uno R3.

3.1.5. Diagram Pengawatan Ultrasonik


Gambar 3.3 Pengawatan ultrasonik

Sensor ultrasonik digunakan untuk menghitung jumlah kendaraan yang masuk dan keluar dari area parkir. Selain itu, sensor ini juga digunakan untuk mengukur jarak kendaraan agar palang dapat membuka dan menutup secara otomatis. Ketika sensor mendeteksi kendaraan pada jarak tertentu, palang akan terbuka untuk memungkinkan kendaraan masuk atau keluar. Setelah kendaraan melewati sensor, palang akan menutup kembali.

Setiap sensor ultrasonik memiliki empat koneksi utama: VCC, GND, Echo, dan Trigger. Koneksi VCC dan GND pada kedua sensor dihubungkan dengan sumber tegangan dan ground pada Arduino Uno R3. Pin Echo pada sensor ultrasonik masuk dihubungkan ke pin 4 pada Arduino Uno R3, sedangkan pin Trigger dihubungkan ke pin 5. Pin Echo pada sensor ultrasonik keluar dihubungkan ke pin 10 pada Arduino Uno R3, sedangkan pin Trigger dihubungkan ke pin 11.

3.1.6. Diagram Pengawatan Servo


Gambar 3.4 Pengawatan servo

Motor Servo adalah jenis motor yang dapat dikontrol dengan presisi untuk menggerakkan sudut tertentu. Dalam konteks ini, motor servo digunakan sebagai penggerak palang yang digunakan untuk membuka dan menutup. Ketika sinyal kontrol diberikan, motor servo akan menggerakkan palang ke posisi yang diinginkan. Arduino Uno R3 menerima sinyal untuk menggerakkan palang, memprosesnya, dan mengirimkan sinyal kontrol yang sesuai ke motor servo.

Motor Servo memiliki pin VCC, pin GND dan pin pulse yang terhubung dengan Arduino Uno R3. Pin VCC adalah terhubung dengan catu daya dan menerima tegangan sebesar 5V. Pin GND adalah pin untuk menyediakan jalur ground atau tanah/negative. Pin pulse pada servo masuk terhubung dengan pin 3 dari Arduino Uno R3 sedangkan pin pulse pada servo keluar terhubung dengan pin 9 dari Arduino Uno R3.

3.1.7. Diagram Pengawatan Modul OLED

Gambar 3.5 Pengawatan modul OLED

Modul OLED digunakan untuk menampilkan informasi terkait slot parkir. Informasi yang ditampilkan dapat mencakup jumlah kendaraan yang masuk dan keluar dan jumlah slot parkir yang tersedia. Modul OLED memberikan tampilan visual yang memudahkan pengguna untuk melihat informasi secara real-time. Ini membantu dalam memantau status parkir dengan lebih efektif dan efisien.

Setiap pin pada modul OLED memiliki peran penting dalam koneksi ke Arduino Uno R3. Koneksi VCC dan GND memastikan modul OLED mendapatkan daya yang cukup. Pin SDA dan SCL memungkinkan komunikasi data antara modul OLED dan Arduino menggunakan protokol I2C. Diagram pengawatan ini memastikan bahwa modul OLED dapat berfungsi dengan baik untuk menampilkan informasi slot parkir secara real-time.

3.1.8. Diagram Pengawatan LED

Gambar 3.6 Pengawatan LED

Penggunaan LED memberikan indikasi visual yang jelas mengenai status palang parkir. Dengan pengawatan yang tepat, LED merah dan hijau akan memberikan informasi real-time tentang apakah palang terbuka atau tertutup.

3.2.  Tahap Pembuatan 

Dalam pembuatan Sistem Manajemen Parkir dengan Palang Otomatis dan Pemantauan Jumlah Kendaraan berbasis Arduino Uno R3 ini ada beberapa proses yang terdiri dari:
  1. Pembuatan rangkaian elektronika
  2. Pembuatan program
  3. pembuatan mekanik

3.2.1. Pembuatan Rangkaian Elektronika

Arduino Uno R3 adalah salah satu modul mikrokontroler yang populer dan banyak digunakan untuk berbagai proyek elektronika dan robotika. Menggunakan chip mikrokontroler ATmega328P, Arduino Uno R3 menyediakan berbagai fitur dan kemampuan yang membuatnya ideal untuk proyek-proyek tersebut, antara lain Flash Memory 32KB, dengan 0.5KB digunakan untuk bootloader. Static Random Access Memory (SRAM) 2KB. Electrically Erasable Programmable Read-Only Memory (EEPROM) 1KB. Clock Speed 16 MHz. 14 Pin digital yang dapat digunakan sebagai masukan atau keluaran. 6 Pin PWM dapat digunakan sebagai keluaran Pulse Width Modulation (PWM). 6 Pin analog untuk masukan analog. Universal Asynchronous Receiver/Transmitter (UART): 1 port serial untuk komunikasi serial hardwareOscillator kristal 16 MHz. Konektor USB jack female untuk konektor Universal Serial Bus (USB). dan Jack female adaptor untuk adaptor eksternal.

Gambar 3.7 Rangkaian Elektronika

3.2.2. Pembuatan Program

Arduino IDE adalah lingkungan pengembangan terintegrasi (Integrated Development Environment) yang dirancang khusus untuk membuat program untuk papan mikrokontroler Arduino. Lingkungan pengembangan terintegrasi yang digunakan untuk membuat, mengedit, mengunggah, dan memantau program pada papan mikrokontroler Arduino. IDE ini menyediakan berbagai fitur dan alat yang memudahkan pengembangan program Arduino, termasuk sintaks highlighting, fitur verifikasi kode, pemantauan serial, dan kemampuan untuk mengunggah program ke papan mikrokontroler .Pembuatan program dilakukan dengan menggunakan software arduino, program menggunakan bahasa C/C++ sederhana dengan perintah program dilihat pada Arduino.cc. setelah program sudah dibuat dan selesai, proses selanjutnya adalah pengunggahan program pada board arduino. Setelah program di unggah pada board Arduino, pastikan bahwa program telah di compile untuk mengetahui bahwa tidak ada kesalahan program dengan mengeklik menu “Sketch” dan pilih “Verify/Compile” atau dengan menekan tombol Ctrl+R pada keyboard.
Gambar 3.8 Diagram Alir

*untuk program arduino ditampilkan pada lampiran di akhir halaman

3.2.3. Pembuatan Mekanik

Tujuan utama dalam membuat prototype Sistem Manajemen Parkir dengan Palang Otomatis dan Pemantauan Jumlah Kendaraan adalah untuk menguji konsep, fungsionalitas, dan kinerja sistem sebelum diterapkan secara luas.
Gambar 3.9 Prototype Sistem Manajemen Parkir dengan Palang Otomatis dan Pemantauan Jumlah Kendaraan

3.3. Simulasi

Simulasi dari Sistem Managemen Parkir dengan Palang Otomatis dan Pemantauan Jumlah Kendaraan Berbasis Arduino IDE dapat dilihat melalui link berikut: Video Simulasi


BAB 4
PENUTUP

4.1. Kesimpulan

Pembuatan prototype Sistem Manajemen Parkir dengan Palang Otomatis dan Pemantauan Jumlah Kendaraan merupakan langkah kritis dalam mengembangkan solusi yang efisien dan efektif untuk mengelola area parkir. Melalui proses perancangan dan implementasi prototype ini, berbagai tujuan utama telah tercapai, yang meliputi:
  1. Konsep desain awal dapat diimplementasikan secara praktis. Sistem palang otomatis dan sensor pemantauan jumlah kendaraan dapat bekerja bersama dengan baik untuk mengelola arus masuk dan keluar kendaraa.
  2. Uji coba pada prototype menunjukkan bahwa sistem mampu mengoperasikan palang secara otomatis dengan responsif dan akurat berdasarkan input dari sensor ultrasonik dan push button. Selain itu, sistem berhasil menghitung jumlah kendaraan yang masuk dan keluar dari area parkir secara real-time.

LAMPIRAN

*Program Arduino
//=== Deklarasi variabel ===
#include <Wire.h>                       //I2C
#include <Servo.h>                      //Servo
#include <Adafruit_GFX.h>               //OLED
#include <Adafruit_SSD1306.h>           //OLED

#define SCREEN_WIDTH 128                //Lebar display OLED
#define SCREEN_HEIGHT 64                //Tinggi display OLED

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);  //Inisialisasi obejek layar OLED

int
  mobilMasuk  = 0,
  mobilKeluar = 0,
  slotTerisi  = 0,
  slotParkir  = 80;                     //Kapasitas parkiran

//Entry Gates
int
  buttonPinMasuk = 14,                  //Tombol dipasang pada pin 4
  servoPinMasuk  = 3,                   //Output servo dipasang pada pin 3
  echoPinMasuk   = 4,                   //Pin echo ultrasonik dipasang pada pin 5
  trigPinMasuk   = 5,                   //Pin trigger ultrasonik dipasang pada pin 6
  ledGMasuk      = 6,                   //LED hijau dipasang pada pin 7
  ledRMasuk      = 7,                   //LED merah dipasang pada pin 8
  durationMasuk;
float jarakMasuk;
Servo myServoMasuk;                     //Kontrol servo motor

//Exit Gates
int
  buttonPinKeluar = 8,                  //Tombol dipasang pada pin 8
  servoPinKeluar  = 9,                  //Output servo dipasang pada pin 9
  echoPinKeluar   = 10,                 //Pin echo ultrasonik dipasang pada pin 10
  trigPinKeluar   = 11,                 //Pin trigger ultrasonik dipasang pada pin 11
  ledGKeluar      = 12,                 //LED hijau dipasang pada pin 12
  ledRKeluar      = 13,                 //LED merah dipasang pada pin 13
  durationKeluar;
float jarakKeluar;
Servo myServoKeluar;                    //Kontrol servo motor

//=== Pengesetan awal ===
void setup() {
  Serial.begin(9600);                   //Inisialisasi komunikasi serial
  //Entry Gates                  
  pinMode(buttonPinMasuk, INPUT_PULLUP);//tombol sebagai masukan
  pinMode(echoPinMasuk, INPUT);         //Pin echo sebagai masukan
  pinMode(trigPinMasuk, OUTPUT);        //Pin trigger sebagai luaran
  pinMode(ledGMasuk, OUTPUT);           //LED sebagai luaran
  pinMode(ledRMasuk, OUTPUT);           //LED merah sebagai luaran
  myServoMasuk.attach(servoPinMasuk);   //Menghubungkan servo ke pin
 
  //Exit Gates                  
  pinMode(buttonPinKeluar, INPUT_PULLUP);//tombol sebagai masukan
  pinMode(echoPinKeluar, INPUT);        //Pin echo sebagai masukan
  pinMode(trigPinKeluar, OUTPUT);       //Pin trigger sebagai luaran
  pinMode(ledGKeluar, OUTPUT);          //LED sebagai luaran
  pinMode(ledRKeluar, OUTPUT);          //LED merah sebagai luaran
  myServoKeluar.attach(servoPinKeluar); //Menghubungkan servo ke pin

  //Inisialisasi layar OLED
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {  //Alamat I2C OLED 128x32
    Serial.println(F("SSD1306 allocation failed"));  //Tampilkan pada serial
    while (true);                       //Hentikan program
  }//if

  //Atur kondisi awal
  myServoMasuk.write(90);               //Servo posisi 90 derajat(palang tertutup)
  myServoKeluar.write(90);              //Servo posisi 90 derajat(palang tertutup)
  digitalWrite(ledRMasuk, HIGH);        //Nyalakan LED      
  digitalWrite(ledGMasuk, LOW);         //Matikan LED
  digitalWrite(ledRKeluar, HIGH);       //Nyalakan LED      
  digitalWrite(ledGKeluar, LOW);        //Matikan LED
  updateDisplay();                      //Tampilkan teks pada OLED
}//setup

//=== Program utama (pengulangan) ===
void loop() {
  if (digitalRead(buttonPinMasuk) == LOW) {  //Jika tombol aktif
    entryGates();                       //Jalankan fungsi palang masuk
  }//if

  if (digitalRead(buttonPinKeluar) == LOW) { //Jika tombol aktif
    exitGates();                        //Jalankan fungsi palang keluar
  }//if
}//loop

//=== Program palang masuk ===
void entryGates() {
  display.clearDisplay();               // Bersihkan layar
  display.setCursor(23, 30);            // Atur posisi
  display.println("Silahkan Masuk");    // Tampilkan pada OLED
  display.display();                    // Tampilkan setiap perubahan pada OLED
 
  myServoMasuk.write(0);                // Servo posisi 0 derajat (palang terbuka)
  digitalWrite(ledGMasuk, HIGH);        // Nyalakan LED hijau
  digitalWrite(ledRMasuk, LOW);         // Matikan LED merah
  delay(1000);                          // Jeda untuk memastikan palang benar-benar terbuka

  // Tunggu sampai mobil mulai melewati sensor
  while (entryDistance() > 10) {        // Ukur jarak saat mobil mendekati palang
    delay(100);                         // Jeda
  }
 
  // Tunggu sampai mobil benar-benar melewati sensor
  while (entryDistance() <= 10) {       // Ukur jarak saat mobil melewati sensor ultrasonik
    delay(100);                         // Jeda
  }
 
  delay(1000);                          // Tambahan waktu tunggu untuk memastikan mobil melewati palang
 
  myServoMasuk.write(90);               // Servo posisi 90 derajat (palang tertutup)

  digitalWrite(ledRMasuk, HIGH);        // Nyalakan LED merah
  digitalWrite(ledGMasuk, LOW);         // Matikan LED hijau

  mobilMasuk++;                         // Catat jumlah mobil yang masuk
  slotTerisi++;                         // Hitung jumlah mobil di parkiran

  updateDisplay();                      // Tampilkan teks pada OLED

  delay(500);                           // Jeda
}//entryGates

//=== Program palang keluar ===
void exitGates() {
  myServoKeluar.write(0);               // Servo posisi 0 derajat (palang terbuka)
  digitalWrite(ledGKeluar, HIGH);       // Nyalakan LED hijau
  digitalWrite(ledRKeluar, LOW);        // Matikan LED merah
  delay(1000);                          // Jeda untuk memastikan palang benar-benar terbuka

  // Tunggu sampai mobil mulai melewati sensor
  while (exitDistance() > 10) {         // Ukur jarak saat mobil mendekati palang
    delay(100);                         // Jeda
  }
 
  // Tunggu sampai mobil benar-benar melewati sensor
  while (exitDistance() <= 10) {        // Ukur jarak saat mobil melewati sensor ultrasonik
    delay(100);                         // Jeda
  }

  myServoKeluar.write(90);              // Servo posisi 90 derajat (palang tertutup)

  digitalWrite(ledRKeluar, HIGH);       // Nyalakan LED merah
  digitalWrite(ledGKeluar, LOW);        // Matikan LED hijau

  mobilKeluar++;                        // Catat jumlah mobil yang keluar
  slotTerisi--;                         // Hitung jumlah mobil di parkiran

  updateDisplay();                      // Tampilkan teks pada OLED

  delay(500);                           // Jeda
}//exitGates

//=== Program pengukuran jarak ===
float entryDistance() {                      
  digitalWrite(trigPinMasuk, LOW);      //Mengirimkan sinyal LOW ke pin trigger untuk memastikan keadaan awal yang stabil
  delayMicroseconds(2);                 //Jeda
  digitalWrite(trigPinMasuk, HIGH);     //Mengirim sinyal HIGH ke pin trigger untuk memulai pengiriman sinyal ultrasonik
  delayMicroseconds(10);                //Jeda
  digitalWrite(trigPinMasuk, LOW);      //Menghentikan pengiriman sinyal ultrasonik dengan mengubah pin trigger menjadi LOW

  durationMasuk = pulseIn(echoPinMasuk, HIGH);  //Membaca durasi pulsa yang diterima dari pin echo setelah pantulan sinyal ultrasonik
  jarakMasuk = durationMasuk * 0.034 / 2; //Menghitung jarak berdasarkan durasi pulsa yang diterima, dengan asumsi kecepatan suara sekitar 0.034 cm per mikrodetik

  return jarakMasuk;                    //Mengembalikan nilai jarak yang telah dihitung
}//entryDistance

float exitDistance() {                      
  digitalWrite(trigPinKeluar, LOW);     //Mengirimkan sinyal LOW ke pin trigger untuk memastikan keadaan awal yang stabil
  delayMicroseconds(2);                 //Jeda
  digitalWrite(trigPinKeluar, HIGH);    //Mengirim sinyal HIGH ke pin trigger untuk memulai pengiriman sinyal ultrasonik
  delayMicroseconds(10);                //Jeda
  digitalWrite(trigPinKeluar, LOW);     //Menghentikan pengiriman sinyal ultrasonik dengan mengubah pin trigger menjadi LOW

  durationKeluar = pulseIn(echoPinKeluar, HIGH); //Membaca durasi pulsa yang diterima dari pin echo setelah pantulan sinyal ultrasonik
  jarakKeluar = durationKeluar * 0.034 / 2; //Menghitung jarak berdasarkan durasi pulsa yang diterima, dengan asumsi kecepatan suara sekitar 0.034 cm per mikrodetik

  return jarakKeluar;                   //Mengembalikan nilai jarak yang telah dihitung
}//entryDistance

//=== Program Tampilan OLED ===
void updateDisplay() {
  display.clearDisplay();               //Bersihkan layar
  display.setTextSize(1);               //Ukuran Font pada OLED
  display.setTextColor(SSD1306_WHITE);  //Warna Font
  display.setCursor(22, 0);             //Atur posisi
  display.print("Selamat Datang");      //Tampilkan pada OLED
  display.setCursor(2, 9);             //Atur posisi
  display.print("Silahkan Tekan Tombol"); //Tampilkan pada OLED
  display.setCursor(22, 35);            //Atur posisi
  display.print("Mobil Masuk: ");       //Tampilkan pada OLED
  display.println(mobilMasuk);          //Tampilkan jumlah mobil yang masuk pada OLED
  display.setCursor(20, 45);            //Atur posisi
  display.print("Mobil Keluar: ");      //Tampilkan pada OLED
  display.println(mobilKeluar);         //Tampilkan jumlah mobil yang keluar pada OLED
  display.setCursor(3, 55);             //Atur posisi
  display.print("Sisa Slot Parkir: ");  //Tampilkan pada OLED
  display.println(slotParkir - slotTerisi); // Menghitung sisa slot parkir
  display.display();                    //Mengirim data ke display OLED
}//updateDisplay

Comments

Popular posts from this blog

ALAT PEMBERI PAKAN IKAN OTOMATIS BERBASIS ARDUINO UNO

TRACKING SOLAR PANEL DENGAN MOTOR SERVO BERBASIS ARDUINO UNO