Sistem Deteksi Jarak pada Parkir Mundur
a. Prosedur [Kembali]
1. Buka web WOKWI.COM dan cari STM 32 NUCLEO C031C6
2. Rangkai komponen sesuai dengan gambar rangkaian di modul
3. Klik pada Library Manager untuk membuat file baru yang bernama main.h dan main.c
4. Masukan program yang telah di buat sesuai kondisi pada kedua file tersebut
5. simulasikan
b. Hardware dan Diagram Blok [Kembali]
1. STM32 NUCLEO-G474RE
2. Float Switch
3. Infrared Sensor
4. Buzzer
6. LED
7. Push Button
c. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Prinsip kerja rangkaian pada percobaan ini menggunakan dua buah input berupa switch (push button) dan sensor infrared (yang dianalogikan juga sebagai push button), serta satu output utama yaitu LED hijau. Kedua input tersebut dihubungkan ke mikrokontroler STM32 (Nucleo C031C6) dan dibaca sebagai sinyal digital untuk menentukan kondisi output.
Dalam rangkaian ini, baik switch maupun infrared sensor (push button kedua) bekerja sebagai pemberi logika. Ketika tombol tidak ditekan, input berada pada kondisi logika tinggi (HIGH) atau rendah (LOW) tergantung konfigurasi pull-up/pull-down. Namun saat tombol ditekan, kondisi logikanya berubah (umumnya menjadi LOW jika menggunakan pull-up resistor).
Prinsip kerjanya adalah mikrokontroler akan terus membaca kedua input tersebut. Sistem dirancang dengan logika bahwa LED hijau hanya akan menyala jika dua kondisi terpenuhi secara bersamaan, yaitu:
-
Infrared sensor mendeteksi benda (dalam simulasi: push button IR ditekan), dan
-
Switch dalam keadaan ON (push button switch ditekan).
Jika kedua input tersebut aktif (misalnya sama-sama bernilai LOW), maka mikrokontroler akan memberikan sinyal output HIGH ke pin LED hijau sehingga LED menyala. Sebaliknya, jika salah satu saja tidak terpenuhi (misalnya IR tidak mendeteksi atau switch tidak ditekan), maka LED hijau akan tetap mati karena kondisi logika tidak terpenuhi.
Dengan demikian, sistem ini menerapkan prinsip logika AND, di mana output hanya aktif jika kedua input aktif secara bersamaan. Penggunaan infrared yang dianalogikan sebagai push button bertujuan untuk mempermudah simulasi tanpa menggunakan sensor asli, tetapi secara konsep tetap merepresentasikan kondisi “terdeteksi” atau “tidak terdeteksi”.
d. Flowchart dan Listing Program [Kembali]
/* __MAIN_C */
#ifndef __MAIN_H
#define __MAIN_H
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32c0xx_hal.h"
/* ====== INPUT ====== */
#define FLAME_PIN GPIO_PIN_0
#define FLAME_PORT GPIOA
#define FLOAT_PIN GPIO_PIN_1
#define FLOAT_PORT GPIOA
/* ====== OUTPUT ====== */
#define LED_PIN GPIO_PIN_5
#define LED_PORT GPIOA
#define BUZZER_PIN GPIO_PIN_6
#define BUZZER_PORT GPIOA
#define RELAY_PIN GPIO_PIN_7
#define RELAY_PORT GPIOA
void Error_Handler(void);
#ifdef __cplusplus
}
#endif
#endif
/* __MAIN_H */
#include "main.h"
/* Prototype fungsi internal */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/**
* @brief Main program
*/
int main(void)
{
/* Inisialisasi HAL Library */
HAL_Init();
/* Konfigurasi sistem clock */
SystemClock_Config();
/* Inisialisasi semua periferal yang dikonfigurasi */
MX_GPIO_Init();
/* Infinite loop */
while (1)
{
/* LOGIKA:
Hanya jika Switch (PA0) AKTIF dan Infrared/Tombol (PA1) AKTIF,
maka LED Hijau menyala. Selain itu, semua mati.
*/
if ((HAL_GPIO_ReadPin(GPIOA, BUTTON_REVERSE_Pin) == GPIO_PIN_SET) &&
(HAL_GPIO_ReadPin(GPIOA, IR_SENSOR_Pin) == GPIO_PIN_SET))
{
// Kondisi Terpenuhi: LED Hijau ON, lainnya OFF
HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, LED_RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET);
}
else
{
// Kondisi Normal/Idle: Semua output mati total
HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, LED_RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET);
}
/* Delay kecil untuk stabilitas pembacaan input (debounce) */
HAL_Delay(20);
}
}
/**
* @brief Konfigurasi System Clock
*/
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();
}
}
/**
* @brief Inisialisasi GPIO
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* Aktifkan clock Port A dan B */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* Konfigurasi Input: PA0 (Switch) dan PA1 (IR/Button) */
GPIO_InitStruct.Pin = BUTTON_REVERSE_Pin | IR_SENSOR_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Memastikan nilai 0 jika tidak ditekan
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* Konfigurasi Output: PB0 (Green), PB1 (Red), PB2 (Buzzer) */
GPIO_InitStruct.Pin = LED_GREEN_Pin | LED_RED_Pin | BUZZER_Pin;
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);
/* Set kondisi awal: Semua output MATI (RESET) */
HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin | LED_RED_Pin | BUZZER_Pin, GPIO_PIN_RESET);
}
/**
* @brief Error Handler
*/
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
e. Video Demo [Kembali]
f. Kondisi [Kembali]
Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Infrared sensor mendeteksi benda dan switch on, maka LED menyala hijau
g. Video Simulasi [Kembali]
h. Download File [Kembali]
Kembali ke Halaman Atas
Komentar
Posting Komentar