Tugas Pendahuluan 2
Percobaan 2 kondisi 7
- Persiapan Program (Editor Sebelah Kiri)
Pastikan seluruh kode telah ditulis dengan lengkap dan tidak terdapat kesalahan sintaks. Pada kondisi ini, pin sudah dikonfigurasi sebagai berikut: PA0 untuk push button (simulasi gigi mundur), PA1 untuk sensor IR (deteksi objek), PB0 untuk LED hijau, PB1 untuk LED merah, dan PB2 untuk buzzer. -
Menjalankan Simulasi
Tekan tombol Play (ikon segitiga hijau) yang berada di bagian atas area simulasi. Sistem Wokwi akan melakukan proses kompilasi, dan jika berhasil, status akan berubah menjadi Running yang menandakan simulasi telah berjalan. -
Pengujian Logika Rangkaian
Setelah simulasi aktif, lakukan beberapa interaksi untuk memastikan sistem bekerja sesuai logika program:
-
Langkah A: Mengaktifkan Sistem (Gigi Mundur)
Tekan push button (tombol hijau di kiri atas) untuk mengaktifkan sistem. -
Langkah B: Mensimulasikan Deteksi Objek
Gunakan slide switch yang berfungsi sebagai sensor IR dengan cara menggeser atau mengkliknya untuk mengubah kondisi input. -
Langkah C: Mengamati Output
Perhatikan perubahan pada LED RGB, apakah berubah dari hijau ke merah saat objek terdeteksi. Selain itu, cek buzzer apakah mengeluarkan indikasi suara (animasi gelombang) ketika kondisi bahaya terpenuhi.
Identifikasi perangkat keras pada sistem ini meliputi mikrokontroler STM32 Nucleo-C031C6 sebagai pusat pemrosesan, dengan input berupa push button yang berfungsi sebagai simulasi sakelar gigi mundur dan slide switch atau sensor IR sebagai pendeteksi halangan. Output yang digunakan adalah LED RGB sebagai indikator visual (hijau menandakan aman dan merah menandakan bahaya) serta buzzer sebagai peringatan suara. Selain itu, digunakan resistor sebagai komponen pasif untuk menjaga kestabilan sinyal input melalui konfigurasi pull-down. Sistem ini bekerja dalam konsep loop tertutup, di mana kondisi output terus diperbarui berdasarkan umpan balik dari sensor secara berkelanjutan.
3. Rangkaian Simulasi[Kembali]
4. Flowchart dan Listing Program[Kembali]
-
Flowchart
- Listing Program
#include "stm32c0xx_hal.h"
// =====================
// DEFINISI PIN
// =====================
#define SW_MAIN_Pin GPIO_PIN_0 // Terhubung ke PA0
#define SW_MAIN_Port GPIOA
#define SENSOR_IR_Pin GPIO_PIN_1 // Terhubung ke PA1
#define SENSOR_IR_Port GPIOA
#define LED_HIJAU_Pin GPIO_PIN_0 // Terhubung ke PB0
#define LED_HIJAU_Port GPIOB
#define LED_MERAH_Pin GPIO_PIN_1 // Terhubung ke PB1
#define LED_MERAH_Port GPIOB
#define BUZZ_Pin GPIO_PIN_2 // Terhubung ke PB2
#define BUZZ_Port GPIOB
// =====================
// PROTOTIPE FUNGSI
// =====================
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
// =====================
// PROGRAM UTAMA
// =====================
int main(void)
{
// Inisialisasi awal sistem
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
// Membaca status switch utama
if (HAL_GPIO_ReadPin(GPIOA, SW_MAIN_Pin) == GPIO_PIN_SET)
{
// Membaca kondisi sensor IR
if (HAL_GPIO_ReadPin(GPIOA, SENSOR_IR_Pin) == GPIO_PIN_SET)
{
// Tidak ada objek terdeteksi
HAL_GPIO_WritePin(GPIOB, LED_MERAH_Pin, GPIO_PIN_RESET); // LED merah OFF
HAL_GPIO_WritePin(GPIOB, LED_HIJAU_Pin, GPIO_PIN_SET); // LED hijau ON
HAL_GPIO_WritePin(GPIOB, BUZZ_Pin, GPIO_PIN_RESET); // Buzzer OFF
}
else
{
// Objek terdeteksi
HAL_GPIO_WritePin(GPIOB, LED_MERAH_Pin, GPIO_PIN_SET); // LED merah ON
HAL_GPIO_WritePin(GPIOB, LED_HIJAU_Pin, GPIO_PIN_RESET); // LED hijau OFF
HAL_GPIO_WritePin(GPIOB, BUZZ_Pin, GPIO_PIN_SET); // Buzzer ON
}
}
else
{
// Jika switch tidak aktif, semua output dimatikan
HAL_GPIO_WritePin(GPIOB, LED_HIJAU_Pin | LED_MERAH_Pin | BUZZ_Pin, GPIO_PIN_RESET);
}
// Delay kecil untuk stabilisasi pembacaan
HAL_Delay(50);
}
}
// =====================
// KONFIGURASI CLOCK
// =====================
void SystemClock_Config(void)
{
RCC_OscInitTypeDef osc = {0};
RCC_ClkInitTypeDef clk = {0};
// Mengaktifkan HSI sebagai sumber clock
osc.OscillatorType = RCC_OSCILLATORTYPE_HSI;
osc.HSIState = RCC_HSI_ON;
osc.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
if (HAL_RCC_OscConfig(&osc) != HAL_OK)
{
Error_Handler();
}
// Pengaturan clock sistem dan bus
clk.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1;
clk.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
clk.AHBCLKDivider = RCC_SYSCLK_DIV1;
clk.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&clk, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
// =====================
// INISIALISASI GPIO
// =====================
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef gpio = {0};
// Aktifkan clock untuk port A dan B
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// Setup pin input (switch & sensor IR)
gpio.Pin = SW_MAIN_Pin | SENSOR_IR_Pin;
gpio.Mode = GPIO_MODE_INPUT;
gpio.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &gpio);
// Setup pin output (LED dan buzzer)
gpio.Pin = LED_HIJAU_Pin | LED_MERAH_Pin | BUZZ_Pin;
gpio.Mode = GPIO_MODE_OUTPUT_PP;
gpio.Pull = GPIO_NOPULL;
gpio.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &gpio);
// Kondisi awal: semua output dimatikan
HAL_GPIO_WritePin(GPIOB, LED_HIJAU_Pin | LED_MERAH_Pin | BUZZ_Pin, GPIO_PIN_RESET);
}



Komentar
Posting Komentar