Percobaan 2 Kondisi 9

 



1. Prosedur [Kembali]

  1. Buka platform simulasi Wokwi lalu rangkai komponen (STM32, Sensor Infrared, LED RGB, Buzzer, dan Switch) sesuai dengan gambar skema yang ada di modul.

  2. Buka tab editor kode pada Wokwi lalu lakukan konfigurasi pin pada file main.h dan main.c untuk menentukan pin GPIO input dan GPIO output.

  3. Masukkan program sistem deteksi jarak parkir mundur ke dalam editor kode Wokwi.

  4. Jalankan simulasi dengan menekan tombol "Start Simulation" (ikon Play) pada Wokwi untuk melakukan compile dan menjalankan program.

  5. Simulasikan rangkaian dengan mengubah status Switch (dari OFF ke ON) dan menguji deteksi pada Infrared Sensor, lalu amati respons pada LED dan Buzzer.

2. Hardware [Kembali]

  • Hardware
1. STM32 NUCLEO-G474RE




2. Infrared Sensor



3. LED



5. Buzzer



6. Resistor 

  • Diagram Blog

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]



  • Ketika Switch diaktifkan (posisi mundur), maka logic state berlogika 1. Begitu pula saat Sensor Infrared mendeteksi adanya objek/halangan, maka logic state berlogika 1.

  • Sinyal ketika berlogika 1 dari komponen tersebut akan diteruskan ke mikrokontroler STM32 NUCLEO sebagai input pada pin PA0 (Switch) dan PA1 (Infrared Sensor).

  • Setelah itu, keluarannya dari PB0, PB1, PB2, dan PB3 akan mengontrol status LED RGB (Hijau, Merah, Biru) dan Buzzer berdasarkan kondisi atau tahap sistem yang sedang aktif.

  • Pada saat Switch baru saja mengalami transisi dari OFF (logika 0) ke ON (logika 1), sistem membaca ini sebagai awal pengaktifan mode mundur. Sistem akan melakukan inisialisasi dimana keluaran akan mengontrol LED Merah, Hijau, dan Biru untuk ON secara bergantian selama 0,5 detik, disusul keluaran Buzzer yang berbunyi pendek 2 kali ("Beep-Beep").

  • Pada saat sistem sudah aktif (Switch berlogika 1) dan Sensor Infrared tidak mendeteksi objek (berlogika 0), sistem berada dalam kondisi aman. Hanya keluaran PB0 yang akan ON sehingga LED Hijau menyala, sedangkan keluaran lainnya OFF.

  • Pada saat sistem sudah aktif (Switch berlogika 1) dan Sensor Infrared mendeteksi objek mendekat (berlogika 1), sistem membaca ini sebagai kondisi bahaya. Keluaran PB1 dan PB2 akan ON sehingga LED Merah menyala dan Buzzer berbunyi secara bersamaan sebagai peringatan.

  • Ketika Switch dikembalikan ke posisi OFF (berlogika 0), maka seluruh sistem masuk ke mode standby, dan semua keluaran pada LED maupun Buzzer akan OFF.


4. Flowchart [Kembali]

  • Flowchart

  • Listing Program
  • main.h :
#ifndef __MAIN_H 
#define __MAIN_H 

#ifdef __cplusplus 
extern "C" { 
#endif 

#include "stm32c0xx_hal.h" 

void Error_Handler(void); 

#define BUTTON_REVERSE_Pin       GPIO_PIN_0 
#define BUTTON_REVERSE_GPIO_Port GPIOA 

#define IR_SENSOR_Pin            GPIO_PIN_1 
#define IR_SENSOR_GPIO_Port      GPIOA  

#define LED_GREEN_Pin            GPIO_PIN_0 
#define LED_GREEN_GPIO_Port      GPIOB 

#define LED_RED_Pin              GPIO_PIN_1 
#define LED_RED_GPIO_Port        GPIOB 

#define BUZZER_Pin               GPIO_PIN_2 
#define BUZZER_GPIO_Port         GPIOB 

// Tambahan pin untuk LED Biru
#define LED_BLUE_Pin             GPIO_PIN_3 
#define LED_BLUE_GPIO_Port       GPIOB 

#ifdef __cplusplus 
#endif 

#endif

  • main.c :
#include "main.h" 

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

int main(void) 
  HAL_Init();
  SystemClock_Config(); 
  MX_GPIO_Init(); 
 
  // Variabel untuk melacak status switch sebelumnya (Edge Detection)
  uint8_t prev_switch_state = GPIO_PIN_RESET; 

  while (1) 
  { 
    // Baca status switch saat ini
    uint8_t current_switch_state = HAL_GPIO_ReadPin(BUTTON_REVERSE_GPIO_Port, BUTTON_REVERSE_Pin);

    // KONDISI 1: Switch baru saja berubah dari OFF ke ON (Rising Edge)
    if (current_switch_state == GPIO_PIN_SET && prev_switch_state == GPIO_PIN_RESET) 
    { 
      // Matikan semua output terlebih dahulu
      HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);

      // 1. Merah menyala 0.5 detik
      HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);

      // 2. Hijau menyala 0.5 detik
      HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);

      // 3. Biru menyala 0.5 detik
      HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_SET);
      HAL_Delay(500);
      HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);

      // 4. Buzzer berbunyi pendek 2 kali ("Beep-Beep")
      for(int i = 0; i < 2; i++) {
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET);
        HAL_Delay(100); // Bunyi
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
        HAL_Delay(100); // Jeda
      }
    } 

    // KONDISI 2: Logika utama berjalan saat Switch dalam posisi ON
    if (current_switch_state == GPIO_PIN_SET) 
    { 
      // Cek sensor IR
      if (HAL_GPIO_ReadPin(IR_SENSOR_GPIO_Port, IR_SENSOR_Pin) == GPIO_PIN_RESET) 
      { 
        // Asumsi: RESET berarti tidak ada objek (Sesuai coding awalmu)
        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET); 
        HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET); 
        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET); 
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET); 
      } 
      else 
      { 
        // Asumsi: SET berarti ada objek terdeteksi
        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET); 
        HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET); 
        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET); 
        HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET); 
      } 
    } 
    // KONDISI 3: Switch dalam posisi OFF (Stanby)
    else 
    { 
      HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET); 
      HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET); 
      HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET); 
      HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET); 
    } 
 
    // Simpan status switch saat ini untuk iterasi loop berikutnya
    prev_switch_state = current_switch_state;
    
    HAL_Delay(50); // Debounce delay
  } 
 
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(); 
  } 
 
static void MX_GPIO_Init(void) 
  GPIO_InitTypeDef GPIO_InitStruct = {0}; 
 
  __HAL_RCC_GPIOA_CLK_ENABLE(); 
  __HAL_RCC_GPIOB_CLK_ENABLE(); 
 
  // Inisialisasi Input (Switch di PA0, IR Sensor di PA1)
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; 
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 
  GPIO_InitStruct.Pull = GPIO_PULLDOWN; 
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 
 
  // Inisialisasi Output (Ditambahkan GPIO_PIN_3 untuk LED Biru)
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3; 
  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); 
 
void Error_Handler(void) 
  __disable_irq(); 
  while (1) 
  { 
  } 
}

5. Video Demo [Kembali]


6. Kondisi [Kembali]

M1 P2 K9: Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Switch baru saja berubah dari OFF ke ON, seluruh warna LED RGB (Merah, Hijau, Biru) menyala bergantian selama 0,5 detik dan Buzzer berbunyi pendek 2 kali ("Beep-Beep").

7. Video Simulasi [Kembali]

8. Download File [Kembali]

Rangkaian Simulasi [Klik]

Video Simulasi [Klik]


Kembali ke Halaman Atas







Komentar

Postingan populer dari blog ini