1. Sediakan alat dan bahan percobaan
2. Rangkailah rangkaian di breadboard
3. Download stlink. dan masukkan listing program ke aplikasi STM32 IDE
4. Hubungkan rangkaian dengan software dengan kabel stlink
5. Jalankan program
2. Switch
4. RGB-LED
5. Infrared Sensor
6. Touch Sensor
Prinsip kerja sistem parkir mundur pada percobaan 2 dimulai dari proses inisialisasi mikrokontroler STM32, di mana pin GPIO dikonfigurasi sebagai input (switch dan sensor inframerah/IR) serta output (LED dan buzzer). Switch digunakan sebagai pengaktif sistem parkir, sehingga sistem hanya bekerja ketika kondisi mundur diaktifkan (misalnya seperti tuas mobil). Saat switch dalam kondisi tidak aktif, seluruh output dimatikan sebagai bentuk efisiensi dan keamanan sistem.
Ketika switch aktif, mikrokontroler mulai membaca sinyal dari sensor IR yang berfungsi mendeteksi keberadaan objek di belakang kendaraan. Sensor ini bekerja dengan prinsip pantulan cahaya inframerah; jika ada objek mendekat, sensor akan memberikan sinyal logika tertentu (umumnya LOW atau HIGH tergantung konfigurasi). Berdasarkan program, ketika sensor mendeteksi objek, sistem akan mengaktifkan LED merah dan buzzer sebagai tanda bahaya atau jarak dekat, sedangkan jika tidak ada objek, LED hijau akan menyala sebagai indikasi aman.
Secara keseluruhan, sistem bekerja secara real-time menggunakan metode polling, yaitu membaca kondisi input secara terus-menerus dalam loop utama. Output yang dihasilkan bergantung pada kombinasi kondisi switch dan sensor IR, sehingga sistem mampu memberikan respon cepat terhadap perubahan jarak. Dengan konsep ini, sistem parkir mundur dapat membantu pengguna mengetahui kondisi aman atau bahaya saat mundur melalui indikator visual dan suara secara sederhana namun efektif.
#include "stm32f1xx_hal.h"
uint8_t system_enable = 0; uint8_t touch_last = 0; uint8_t pir_first_trigger = 1;
void SystemClock_Config(void); static void MX_GPIO_Init(void); void Error_Handler(void);
int main(void)
{
HAL_Init(); SystemClock_Config(); MX_GPIO_Init();
while (1)
{
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
system_enable = !system_enable; if (system_enable)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
HAL_Delay(200);
}
touch_last = touch_now;
if (pir_now == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
if (pir_first_trigger)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
pir_first_trigger = 0;
}
}
else
{
pir_first_trigger = 1;
if(!system_enable)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}
if(system_enable)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
}
}
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;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; 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();
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);
}
void Error_Handler(void)
{
disable_irq(); while(1)
{
}
}
Download HTML klik disiniDownload File Analisa klik disiniDownload Video Demo klik disiniDownload Datashett STM32 klik disiniDownload Datasheet IR sensor klik disiniDownload Datasheet Touch sensor klik disini
Download Datasheet RGB-LED klik disiniDownload Datasheet Resistor klik disini
.jpeg)
.jpeg)

.jpeg)