Untuk menjalankan dan memvalidasi simulasi rangkaian pada platform seperti Wokwi, prosedur berikut harus dilakukan secara berurutan:
Persiapan Lingkungan Simulasi: Buka platform simulator sirkuit elektronik (misalnya Wokwi) dan buat proyek baru dengan memilih papan mikrokontroler STM32 (khususnya seri Nucleo C031C6 jika tersedia, atau seri STM32 yang kompatibel).
Perakitan Perangkat Keras (Wiring): * Hubungkan komponen Push Button ke pin PA0 dan sumber tegangan/GND melalui resistor (konfigurasi pull-down eksternal atau sesuai gambar).
Hubungkan Slide Switch (sebagai simulator sensor IR) ke pin PA1.
Hubungkan anoda LED Hijau ke pin PB0 dan anoda LED Merah ke pin PB1 (keduanya dihubungkan ke GND melalui resistor pembatas arus).
Hubungkan terminal positif Buzzer ke pin PB2 dan terminal negatifnya ke GND.
Kompilasi Kode Program: Salin seluruh kode C (berbasis STM32 HAL) yang telah disediakan ke dalam editor teks pada simulator.
Eksekusi Simulasi: Tekan tombol "Play" atau "Start Simulation" untuk mengkompilasi kode dan menjalankan mikrokontroler secara virtual.
Pengujian Interaktif: Aktifkan Push Button di pin PA0 untuk menyalakan sistem.
Ubah status Slide Switch di pin PA1 untuk menyimulasikan transisi antara kondisi "tidak mendeteksi objek" dan "mendeteksi objek", lalu amati respons keluaran pada LED dan Buzzer.
2. Hardware dan Diagram Blok [Kembali]
A. Hardware
Rangkaian ini terdiri dari beberapa komponen esensial yang saling terintegrasi:- Mikrokontroler STM32 Nucleo C031C6: Merupakan unit pemroses sentral (otak sistem) yang bertugas mengeksekusi instruksi program, membaca sinyal digital dari pin input, dan mengendalikan logika pada pin output berdasarkan algoritma yang ditanamkan.
- Push Button (Saklar Utama): Komponen input elektromekanis yang berfungsi sebagai pengontrol daya sistem secara logis. Komponen ini memberikan sinyal pemicu (logika HIGH) ke mikrokontroler untuk mengizinkan sistem mulai membaca data sensor.
- Slide Switch (Simulator Sensor Inframerah): Komponen input yang digunakan untuk menyimulasikan pembacaan sensor IR. Dalam realitasnya, sensor IR bertugas mendeteksi pantulan cahaya untuk mengetahui ada tidaknya objek, yang diterjemahkan menjadi sinyal digital (HIGH untuk tidak ada objek, LOW untuk ada objek).
- LED (Light Emitting Diode) Merah dan Hijau: Aktuator visual yang merepresentasikan status operasional sistem. LED Hijau mengindikasikan bahwa jalur aman (tidak ada rintangan), sedangkan LED Merah mengindikasikan status peringatan (terdapat rintangan).
- Buzzer Piezoelektrik: Aktuator audio yang berfungsi menghasilkan gelombang suara sebagai bentuk peringatan atau alarm kepada pengguna ketika sensor mendeteksi keberadaan suatu objek.
- Resistor: Komponen pasif yang berfungsi membatasi arus listrik. Dalam rangkaian ini, resistor digunakan untuk melindungi LED dari kerusakan akibat arus berlebih dan menstabilkan sinyal input (konfigurasi pull-down/pull-up).
- Mikrokontroler STM32 Nucleo C031C6: Merupakan unit pemroses sentral (otak sistem) yang bertugas mengeksekusi instruksi program, membaca sinyal digital dari pin input, dan mengendalikan logika pada pin output berdasarkan algoritma yang ditanamkan.
- Push Button (Saklar Utama): Komponen input elektromekanis yang berfungsi sebagai pengontrol daya sistem secara logis. Komponen ini memberikan sinyal pemicu (logika HIGH) ke mikrokontroler untuk mengizinkan sistem mulai membaca data sensor.
- Slide Switch (Simulator Sensor Inframerah): Komponen input yang digunakan untuk menyimulasikan pembacaan sensor IR. Dalam realitasnya, sensor IR bertugas mendeteksi pantulan cahaya untuk mengetahui ada tidaknya objek, yang diterjemahkan menjadi sinyal digital (HIGH untuk tidak ada objek, LOW untuk ada objek).
- LED (Light Emitting Diode) Merah dan Hijau: Aktuator visual yang merepresentasikan status operasional sistem. LED Hijau mengindikasikan bahwa jalur aman (tidak ada rintangan), sedangkan LED Merah mengindikasikan status peringatan (terdapat rintangan).
- Buzzer Piezoelektrik: Aktuator audio yang berfungsi menghasilkan gelombang suara sebagai bentuk peringatan atau alarm kepada pengguna ketika sensor mendeteksi keberadaan suatu objek.
- Resistor: Komponen pasif yang berfungsi membatasi arus listrik. Dalam rangkaian ini, resistor digunakan untuk melindungi LED dari kerusakan akibat arus berlebih dan menstabilkan sinyal input (konfigurasi pull-down/pull-up).
B. Diagram Blok (Sistem Loop Tertutup)
Dalam konteks kontrol otomatis, sistem ini diimplementasikan sebagai siklus pemantauan kontinu (direpresentasikan oleh fungsi while(1)). Kondisi lingkungan secara terus-menerus memberikan umpan balik (feedback) kepada sistem.
- Input (Referensi/Setpoint): Saklar utama (PA0) bertindak sebagai enable signal.
- Feedback Element (Sensor): Sensor IR (PA1) secara terus-menerus membaca kondisi fisik lingkungan (keberadaan objek) dan mengirimkan data tersebut kembali ke mikrokontroler.
- Controller (Mikrokontroler STM32): Mengambil data dari Feedback Element, membandingkannya dengan kondisi logika instruksional (apakah status sensor HIGH atau LOW), dan menghitung keputusan kontrol.
- Actuator (Plant): Berdasarkan keputusan Controller, sinyal diteruskan ke elemen keluaran (LED Hijau, LED Merah, dan Buzzer) untuk mengubah kondisi lingkungan/indikator.
- Alur Loop Tertutup: Aksi keluaran (misalnya, alarm berbunyi) tidak mengubah posisi objek secara fisik (seperti pada kontrol suhu ruangan), namun sistem secara komputasional membaca ulang keadaan sensor setiap 50 milidetik (
HAL_Delay(50)). Pembacaan feedback ini memastikan jika objek tersebut bergeser atau hilang, sistem akan merespons secara real-time dan secara otomatis mengubah status Actuator kembali ke kondisi aman.
while(1)). Kondisi lingkungan secara terus-menerus memberikan umpan balik (feedback) kepada sistem.- Input (Referensi/Setpoint): Saklar utama (PA0) bertindak sebagai enable signal.
- Feedback Element (Sensor): Sensor IR (PA1) secara terus-menerus membaca kondisi fisik lingkungan (keberadaan objek) dan mengirimkan data tersebut kembali ke mikrokontroler.
- Controller (Mikrokontroler STM32): Mengambil data dari Feedback Element, membandingkannya dengan kondisi logika instruksional (apakah status sensor HIGH atau LOW), dan menghitung keputusan kontrol.
- Actuator (Plant): Berdasarkan keputusan Controller, sinyal diteruskan ke elemen keluaran (LED Hijau, LED Merah, dan Buzzer) untuk mengubah kondisi lingkungan/indikator.
- Alur Loop Tertutup: Aksi keluaran (misalnya, alarm berbunyi) tidak mengubah posisi objek secara fisik (seperti pada kontrol suhu ruangan), namun sistem secara komputasional membaca ulang keadaan sensor setiap 50 milidetik (
HAL_Delay(50)). Pembacaan feedback ini memastikan jika objek tersebut bergeser atau hilang, sistem akan merespons secara real-time dan secara otomatis mengubah status Actuator kembali ke kondisi aman.
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Alur kerja sistem ini didasarkan pada siklus pemindaian input (input scanning) dan eksekusi logika kontrol pada unit pemroses pusat (MCU) STM32 Nucleo C031C6. Secara fundamental, sistem beroperasi dalam struktur algoritma sekuensial yang berada di dalam infinite loop while(1).
1. Tahap Inisialisasi dan Penentuan Status Awal
Pada saat catu daya diberikan, mikrokontroler mengeksekusi fungsi HAL_Init() dan SystemClock_Config() untuk menstabilkan frekuensi kerja internal. Selanjutnya, fungsi MX_GPIO_Init() menetapkan konfigurasi pin; di mana Port A (PA0 dan PA1) dikonfigurasi sebagai input dengan resistor pull-down internal, sementara Port B (PB0, PB1, dan PB2) ditetapkan sebagai output push-pull. Status awal sistem adalah idle, di mana semua pin keluaran diberikan logika RESET (0V) untuk memastikan seluruh aktuator dalam kondisi nonaktif.
2. Evaluasi Saklar Kendali Utama (Gating Logic)
Sistem menerapkan hierarki kontrol di mana pin PA0 (BUTTON_REVERSE_Pin) bertindak sebagai saklar aktivasi utama. Mikrokontroler melakukan pembacaan digital pada pin ini:
Logika LOW (0): Jika saklar utama tidak aktif, sistem secara otomatis masuk ke mode proteksi, mematikan seluruh LED dan Buzzer melalui perintah
HAL_GPIO_WritePindengan parameterGPIO_PIN_RESET.Logika HIGH (1): Jika saklar utama aktif, sistem diberikan izin untuk melanjutkan ke tahap evaluasi sensor inframerah.
3. Pemrosesan Data Sensor dan Respons Aktuator
Ketika saklar utama aktif, mikrokontroler beralih memantau pin PA1 (IR_SENSOR_Pin). Terdapat dua kondisi transisi yang diatur oleh logika percabangan if-else:
Kondisi Aman (Tidak Mendeteksi Benda): Apabila pin PA1 menerima sinyal digital berlogika
SET(VCC), mikrokontroler menginterpretasikan bahwa tidak ada objek yang menghalangi lintasan sensor. Respons sistem adalah mematikan LED Merah (PB1) dan Buzzer (PB2), serta mengaktifkan LED Hijau (PB0) sebagai indikator visual status aman.Kondisi Peringatan (Mendeteksi Benda): Apabila pin PA1 mendeteksi objek (transisi sinyal ke logika
RESET/0V), mikrokontroler akan memicu protokol peringatan secara simultan. Sistem mematikan LED Hijau (PB0) dan memberikan tegangan tinggi pada LED Merah (PB1) serta Buzzer (PB2), sehingga menghasilkan peringatan visual dan audio bagi pengguna.
4. Stabilisasi Siklus (Debouncing & Timing)
Pada akhir setiap siklus instruksi, sistem mengimplementasikan fungsi HAL_Delay(50). Penundaan waktu sebesar 50 milidetik ini sangat krusial dalam sistem kendali tertanam untuk menjaga stabilitas pembacaan sensor dari gangguan derau (noise) elektrik serta mencegah terjadinya flickering atau fluktuasi cepat pada aktuator akibat perubahan status logika yang sangat singkat di terminal input.
Listing Program :
#include "stm32c0xx_hal.h"
// --- DEFINISI PIN ---
#define BUTTON_REVERSE_Pin GPIO_PIN_0 // Dihubungkan ke PA0
#define BUTTON_REVERSE_GPIO_Port GPIOA
#define IR_SENSOR_Pin GPIO_PIN_1 // Dihubungkan ke PA1
#define IR_SENSOR_GPIO_Port GPIOA
#define LED_GREEN_Pin GPIO_PIN_0 // Dihubungkan ke PB0
#define LED_GREEN_GPIO_Port GPIOB
#define LED_RED_Pin GPIO_PIN_1 // Dihubungkan ke PB1
#define LED_RED_GPIO_Port GPIOB
#define BUZZER_Pin GPIO_PIN_2 // Dihubungkan ke PB2
#define BUZZER_GPIO_Port GPIOB
// --- PROTOTIPE FUNGSI ---
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
// void Error_Handler(void); -> Dihapus karena sudah ada bawaan dari sistem Wokwi/Arduino
// --- PROGRAM UTAMA ---
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
// 1. Cek Switch/Tombol di PA0 (Sebagai saklar utama)
if (HAL_GPIO_ReadPin(GPIOA, BUTTON_REVERSE_Pin) == GPIO_PIN_SET)
{
// 2. Cek Sensor IR di PA1
// KONDISI: TIDAK MENDETEKSI BENDA (HIGH / SET)
if (HAL_GPIO_ReadPin(GPIOA, IR_SENSOR_Pin) == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, LED_RED_Pin, GPIO_PIN_RESET); // LED Merah MATI
HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin, GPIO_PIN_SET); // LED Hijau NYALA
HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET); // Buzzer BERHENTI
}
// KONDISI: MENDETEKSI BENDA (LOW / RESET)
else
{
HAL_GPIO_WritePin(GPIOB, LED_RED_Pin, GPIO_PIN_SET); // LED Merah NYALA
HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin, GPIO_PIN_RESET); // LED Hijau MATI
HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_SET); // Buzzer BERBUNYI
}
}
// Jika Switch/Tombol di PA0 posisi OFF
else
{
// Matikan semua output
HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin | LED_RED_Pin | BUZZER_Pin, GPIO_PIN_RESET);
}
HAL_Delay(50); // Delay untuk kestabilan simulasi
}
}
// --- KONFIGURASI SISTEM ---
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;
// Jika konfigurasi gagal, akan otomatis memanggil fungsi bawaan sistem
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();
}
}
// --- INISIALISASI PIN GPIO ---
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Mengaktifkan Clock untuk Port A dan Port B
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// Konfigurasi Pin Input: PA0 (Switch) dan PA1 (IR Sensor)
GPIO_InitStruct.Pin = BUTTON_REVERSE_Pin | IR_SENSOR_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// Konfigurasi Pin Output: PB0 (LED Hijau), PB1 (LED Merah), 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 default awal: Semua Output Mati
HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin | LED_RED_Pin | BUZZER_Pin, GPIO_PIN_RESET);
}
Buatlah rangkaian seperti pada gambar percobaan 2 dengan
kondisi ketika infrared sensor berubah dari mendeteksi benda ke tidak
mendeteksi benda, maka LED merah mati, LED hijau menyala, dan buzzer berhenti
berbunyi.
Download rangkaian STM32 Nucleo C031C6 klik disini


Tidak ada komentar:
Posting Komentar