TP 2 M1 PERC 2 KONDISI 2 PRAK UPUC



1. Prosedur[Kembali]

  1. Pahami terlebih dahulu kondisi yang akan digunakan
  2. Buka web Wokwi
  3. Persiapkan alat dan bahan
  4. Buat rangkaian sesuai dengan kondisi dan modul
  5. Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi 
  6. Jalankan simulasi rangkaian.  
  7. Proses selesai

2. Hardware dan Diagram Blok[Kembali]

    Hardware


Buzzer

Resistor

STM32 NUCLEO-G474RE

Infrared Sensor



Beardboard


Adaptor


Switch


LED RGB

    Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian Simulasi

Prinsip Kerja

Prinsip kerja sistem deteksi jarak parkir ini bekerja dalam sebuah siklus loop tertutup yang dimulai ketika Switch diaktifkan ke posisi ON untuk mensimulasikan sistem yang aktif saat mobil mulai mundur. Sensor Infrared bertindak sebagai unit penginderaan yang secara kontinu memancarkan sinyal untuk mengukur jarak antara kendaraan dengan objek di belakangnya. Data jarak fisik tersebut kemudian dikirimkan ke Mikrokontroler STM32 Nucleo-G474RE untuk diproses berdasarkan nilai ambang batas (Reference) yang telah ditentukan sebelumnya.

Di dalam mikrokontroler, algoritma kontrol membandingkan data jarak real-time dari sensor dengan referensi jarak aman; jika objek terdeteksi masuk ke zona bahaya, mikrokontroler akan segera memicu Output System. Respon ini berupa peringatan visual melalui LED RGB yang berubah warna serta peringatan suara melalui Buzzer yang frekuensinya meningkat seiring semakin dekatnya rintangan. Karena sistem ini bersifat closed-loop, status jarak yang terukur terus-menerus dikirimkan kembali sebagai Feedback ke kontroler, sehingga indikator LED dan suara dapat menyesuaikan secara dinamis dan akurat terhadap setiap pergerakan mobil hingga jarak aman kembali tercapai.

1. Kondisi Awal 

Saat rangkaian dinyalakan dan mendapat suplai dari adaptor melalui breadboard, STM32 NUCLEO-C031C6 melakukan inisialisasi HAL, konfigurasi clock HSI, dan inisialisasi GPIO. Pin PA0 (Switch) dan PA1 (IR Sensor) dikonfigurasi sebagai input dengan pull-down, sedangkan pin PB0, PB1, PB2 (LED RGB) dikonfigurasi sebagai output push-pull.

2. Pembacaan Sensor (Loop Utama) Di dalam while(1), STM32 terus membaca dua sinyal input secara bersamaan:

  • PA1 membaca ke status Infrared Sensor (mendeteksi benda atau tidak)
  • PA0 membaca status Switch (ON atau OFF)

3. Logika Kondisi. Sistem mengecek dua syarat secara bersamaan:

  • IR  == GPIO_PIN_RESET artinya tidak mendeteksi benda
  • SW  == GPIO_PIN_SET artinya switch dalam posisi ON

Kedua syarat harus terpenuhi agar LED menyala.

4. Output

LED Menyala Orange Warna orange pada LED RGB dihasilkan dengan menyalakan kombinasi merah (PB1) dan hijau (PB0) secara bersamaan, sedangkan biru (PB2) ikut diaktifkan sesuai kode program:

  • HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // Merah
  • HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // Hijau
  • HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); // Buzzer

Kombinasi merah + hijau menghasilkan warna kuning pada LED RGB. Resistor 1k ohm pada masing-masing jalur LED berfungsi membatasi arus agar LED tidak rusak.

5. Kondisi Tidak Terpenuhi 

Jika IR mendeteksi benda atau switch dalam posisi OFF, maka ketiga pin PB langsung diset RESET sehingga LED padam sepenuhnya, lalu sistem kembali membaca sensor.

4. Flowchart dan Listing Program[Kembali]

Flowchart


Listing Program

#include "main.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1)
  {
    uint8_t switch_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); // switch
    uint8_t ir_state     = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); // push button (IR simulasi)

    // =========================
    // SWITCH ON (kanan / VCC di rangkaian kamu)
    // =========================
    if (switch_state == GPIO_PIN_RESET) // ← SUDAH DIBALIK (PENTING!)
    {
      // IR TIDAK DETEKSI (tombol tidak ditekan)
      if (ir_state == GPIO_PIN_RESET)
      {
        // LED KUNING (merah + hijau ON)
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // Hijau ON
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // Merah ON
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); // Buzzer OFF
      }
      else
      {
        // IR DETEKSI (tombol ditekan)
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // Hijau OFF
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);   // Merah ON
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);   // Buzzer ON
      }
    }

    // =========================
    // SWITCH OFF (kiri / GND)
    // =========================
    else
    {
      // kondisi bebas → LED HIJAU
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);   // Hijau ON
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); // Merah OFF
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); // Buzzer OFF
    }

    HAL_Delay(50);
  }
}

// =========================
// CLOCK CONFIG
// =========================
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}

// =========================
// GPIO INIT
// =========================
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  // PA0 = SWITCH (pull-up)
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // PA1 = PUSH BUTTON (IR simulasi)
  GPIO_InitStruct.Pin = GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // PB0 (Hijau), PB1 (Merah), PB2 (Buzzer)
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

// =========================
// ERROR HANDLER
// =========================
void Error_Handler(void)
{
  __disable_irq();
  while (1)
  {
  }
}

5. Video Demo[Kembali]


6. Kondisi[Kembali]

      Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Infrared sensor tidak mendeteksi benda dan switch on, maka LED menyala kuning

8. Download File[Kembali]

Rangkaian dan Program Download

Datasheet STM32 NUCLEO-G474RE Download

Datasheet Infrared Sensor Download

Datasheet Buzzer Download

Datasheet RGB LED Download


Komentar

Postingan populer dari blog ini

Sistem Irigasi Pintar untuk Budidaya Raspberry pada Greenhouse Mini