LAPORAN AKHIR PERCOBAAN 2



SISTEM DETEKSI JARAK PADA PARKIR MUNDUR


a. Prosedur [Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler STM32 NUCLEO-G474RE di software STM32 CubeIDE.
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
5. Selesai.

b. Hardware dan Diagram Blok [Kembali]

  • Hardware :


a) Mikrokontroler STM32 NUCLEO-G474RE








2. Infrared Sensor

Infrared Sensor Module



3. Buzzer


4. Power Supply

 
5. RGB LED
Jual LED RGB 4 PIN WARNA MERAH HIJAU BIRU 5mm ( ARDUINO ) - Common Cathode  - Jakarta Barat - Ardushop-id | Tokopedia

6. Resistor 1k Ohm



7. Switch



8. Adaptor



9. Breadboard



  • Diagram Blok  :








c. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

  • Rangkaian Simulasi
 








Prinsip Kerja : 

Sistem deteksi jarak pada parkir mundur ini bekerja dengan memanfaatkan dua sinyal input digital yang dibaca oleh mikrokontroler STM32 NUCLEO-G474RE secara terus-menerus dalam sebuah loop. Switch yang terhubung ke pin PA0 berfungsi sebagai tombol aktivasi mode parkir mundur ketika switch ditekan, sistem mulai memantau infrared sensor pada pin PA1 yang bertugas mendeteksi keberadaan objek di belakang kendaraan. Mikrokontroler membaca kedua sinyal tersebut menggunakan fungsi HAL_GPIO_ReadPin() lalu memproses logikanya untuk menentukan kondisi output, yaitu LED hijau pada PB0 sebagai indikator aman, LED merah pada PB1 sebagai peringatan objek terdeteksi, dan buzzer pada PB2 sebagai peringatan audio. Seluruh pengukuran waktu menggunakan HAL_GetTick() sehingga tidak ada pemblokiran eksekusi program, menjaga loop tetap responsif setiap 10ms.

Kondisi tambahan yang membedakan sistem ini dari rangkaian parkir mundur biasa adalah mekanisme deteksi transisi berbasis waktu yang mengaktifkan mode darurat. Setiap kali IR sensor berubah dari kondisi tidak mendeteksi menjadi mendeteksi, sistem mengukur selisih waktu antara kedua transisi tersebut menggunakan variabel ir_not_detect_time yang dicatat saat sensor pertama kali kehilangan deteksi. Apabila jarak waktu perubahan tersebut kurang dari 500ms yang mengindikasikan objek muncul secara tiba-tiba atau kendaraan bergerak terlalu cepat mendekati halangan sistem langsung mengaktifkan emergency_mode dan menonaktifkan alur normal. Dalam mode darurat ini, LED merah dan LED biru berkedip bergantian setiap 100ms secara non-blocking menggunakan teknik timestamp comparison, sementara buzzer berbunyi terus-menerus tanpa henti sebagai peringatan keras, dan kondisi ini hanya dapat direset dengan menekan switch kembali yang terdeteksi sebagai rising edge oleh variabel switch_last.



d. Flowchart dan Listing Program [Kembali]

  • Flowchart




  • Listing Program

#include "main.h"   // Memanggil header utama STM32 (HAL, definisi pin, dll)

// Deklarasi fungsi konfigurasi clock
void SystemClock_Config(void);

// Deklarasi fungsi inisialisasi GPIO
static void MX_GPIO_Init(void);

int main(void) // Fungsi utama program
{
  HAL_Init();               // Inisialisasi HAL (reset sistem & setup dasar)
  SystemClock_Config();     // Konfigurasi clock sistem
  MX_GPIO_Init();           // Inisialisasi GPIO (input & output)

  while (1) // Loop utama (berjalan terus menerus)
  {
    // Membaca kondisi sensor IR pada pin PA1
    GPIO_PinState ir = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);

    // Membaca kondisi switch pada pin PA0
    GPIO_PinState sw = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);

    // Jika IR tidak mendeteksi objek (0) DAN switch ON (1)
    if (ir == GPIO_PIN_RESET && sw == GPIO_PIN_SET)
    {
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // Nyalakan LED merah (PB1)
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // Nyalakan LED hijau (PB0)
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); // Nyalakan LED biru (PB2)
      // Semua LED ON → warna putih
    }
    else
    {
      // Jika kondisi tidak terpenuhi → matikan semua LED
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); // Matikan merah
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // Matikan hijau
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); // Matikan biru
    }

    HAL_Delay(50); // Delay 50 ms untuk stabilisasi pembacaan
  }
}

// Fungsi konfigurasi clock sistem
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0}; // Struktur konfigurasi oscillator
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // Struktur konfigurasi clock

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; // Gunakan HSI (internal clock)
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;                   // Aktifkan HSI
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; // Kalibrasi default

  // Jika konfigurasi oscillator gagal → masuk error handler
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  // Konfigurasi jenis clock
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |
                               RCC_CLOCKTYPE_SYSCLK |
                               RCC_CLOCKTYPE_PCLK1;

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; // Sumber clock dari HSI
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;     // Tidak dibagi
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;      // Tidak dibagi

  // Jika konfigurasi clock gagal
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}

// Fungsi inisialisasi GPIO
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0}; // Struktur konfigurasi GPIO

  __HAL_RCC_GPIOA_CLK_ENABLE(); // Aktifkan clock GPIOA
  __HAL_RCC_GPIOB_CLK_ENABLE(); // Aktifkan clock GPIOB

  // Konfigurasi PA0 & PA1 sebagai input
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;     // Mode input
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;       // Pull-down (default = 0)
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);     // Terapkan ke GPIOA

  // Konfigurasi PB0, PB1, PB2 sebagai output
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Output push-pull
  GPIO_InitStruct.Pull = GPIO_NOPULL;         // Tanpa resistor internal
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;// Kecepatan rendah
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);     // Terapkan ke GPIOB
}

// Fungsi penanganan error
void Error_Handler(void)
{
  __disable_irq(); // Nonaktifkan interrupt

  while (1)
  {
    // Loop tak hingga jika terjadi error
  }
}


e. Video Demo [Kembali]



f. Analisa [Kembali]











g. Download File [Kembali]

File TP [Klik disini]

File Analisa [Klik disini]

Video Demo [Klik disini]

Download Datasheet  Sensor Infrared (klik disini)

Download Datasheet Resistor (klik disini)

Download Datasheet LED RGB (klik disini)

Download Datasheet Buzzer (klik disini)

Download Datasheet Relay (klik disini)



Kembali ke Halaman Atas

 

 

 

Komentar

Postingan populer dari blog ini