1. Persiapan
- Browser (Chrome/Edge)
- Akses https://wokwi.com
- Board STM32 NUCLEO-C031C6
- Infrared Sensor
- LED
- Buzzer
- Resistor
2. Pembuatan Rangkaian di Wokwi
- Buat project baru → pilih STM32 Nucleo C031C6.
-
Tambahkan komponen:
- Infrared Sensor
- LED
- Buzzer
- Hubungkan:
- OUT Infrared → pin input STM32
- LED → pin output STM32
- Buzzer → pin output STM32
- VCC → 5V
- GND → GND STM32
3. Penulisan Program
- Gunakan Arduino-style / STM32 HAL di editor Wokwi.
-
Atur pin:
- Infrared sebagai INPUT
- LED dan buzzer sebagai OUTPUT
- Logika program:
-
Jika Infrared mendeteksi objek:
- LED ON
- Buzzer ON
- Jika tidak:
- LED OFF
- Buzzer OFF
4. Simulasi
- Klik Run Simulation.
- Aktifkan Infrared sensor (klik sensor).
-
Amati:
- LED menyala
- Buzzer berbunyi
- Nonaktifkan sensor → output mati.
2. Hardware dan Diagram Blok[Kembali]
1. NUCLEO C031C6
Spessifikasi
Microcontroller | ARM Cortex-M3 |
Operating Voltage | 3.3 V |
Input Voltage (recommended) | 5 V |
Input Voltage (limit) | 2 – 3.6 V |
Digital I/O Pins | 32 |
PWM Digital I/O Pins | 15 |
Analog Input Pins | 10 (dengan resolusi 12-bit ADC) |
DC Current per I/O Pin | 25 mA |
DC Current for 3.3V Pin | 150 mA |
Flash Memory | 64 KB |
SRAM | 20 KB |
EEPROM | Emulasi dalam Flash |
Clock Speed | 72 MHz |
Warna | Panjanggelombang [nm] | Material semikonduktor | |
Gallium arsenide (GaAs)Aluminium gallium arsenide (AlGaAs) | |||
610 < λ < 760 | Aluminium gallium arsenide (AlGaAs)Gallium arsenide phosphide (GaAsP)Aluminium gallium indium phosphide (AlGaInP)Gallium(III) phosphide (GaP) | ||
590 < λ < 610 | Gallium arsenide phosphide (GaAsP)Aluminium gallium indium phosphide (AlGaInP)Gallium(III) phosphide (GaP) | ||
570 < λ < 590 | Gallium arsenide phosphide (GaAsP)Aluminium gallium indium phosphide (AlGaInP)Gallium(III) phosphide (GaP) | ||
500 < λ < 570 | Indium gallium nitride (InGaN) / Gallium(III) nitride (GaN)Gallium(III) phosphide (GaP)Aluminium gallium indium phosphide (AlGaInP)Aluminium gallium phosphide (AlGaP) | ||
450 < λ < 500 | Zinc selenide (ZnSe)Indium gallium nitride (InGaN) | ||
400 < λ < 450 | Indium gallium nitride (InGaN) | ||
multiple types | Dual blue/red LEDs, blue with red phosphor, or white with purple plastic | ||
λ < 400 | Diamond (235 nm) Boron nitride (215 nm) Aluminium nitride (AlN) (210 nm) Aluminium gallium nitride (AlGaN)Aluminium gallium indium nitride (AlGaInN) – (down to 210 nm) | ||
multiple types | Blue with one or two phosphor layers: yellow with red, orange or pink phosphor added afterwards, or white with pink pigment or dye. | ||
White | Broad spectrum | Blue/UV diode with yellow phosphor |
3. Resistor
.jpeg)
4. Buzzer
Blok Diagram
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
4. Flowchart dan LIsting Program[Kembali]
Flowchart
Listing Program
Main c
#include "main.h"
Baris ini digunakan untuk memanggil file header main.h yang berisi library HAL STM32, definisi pin, serta deklarasi fungsi yang digunakan pada program utama.
void SystemClock_Config(void);
Deklarasi fungsi untuk mengatur konfigurasi clock sistem mikrokontroler.
static void MX_GPIO_Init(void);
Deklarasi fungsi untuk melakukan inisialisasi GPIO sebagai input maupun output.
int main(void)
Fungsi utama (entry point) dari program STM32.
HAL_Init();
Digunakan untuk menginisialisasi HAL Library, mereset peripheral, dan mengatur sistem tick timer.
SystemClock_Config();
Memanggil fungsi konfigurasi clock sistem agar mikrokontroler dapat bekerja dengan sumber clock internal.
MX_GPIO_Init();
Memanggil fungsi inisialisasi GPIO, termasuk pengaturan pin input dan output.
while (1)
Loop utama yang berjalan terus menerus selama mikrokontroler menyala.
GPIO_PinState ir = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
Membaca kondisi sensor infrared (IR) pada pin PA1.
Jika bernilai GPIO_PIN_SET berarti HIGH, dan GPIO_PIN_RESET berarti LOW.
GPIO_PinState sw = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
Membaca kondisi switch pada pin PA0.
if (ir == GPIO_PIN_RESET && sw == GPIO_PIN_SET)
Kondisi logika dimana sensor IR tidak mendeteksi objek (LOW) dan switch dalam kondisi ON (HIGH).
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
Menyalakan LED merah yang terhubung ke pin PB1.
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
Menyalakan LED hijau yang terhubung ke pin PB0.
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
Mengaktifkan buzzer pada pin PB2.
else
Kondisi ini akan dijalankan jika salah satu atau kedua syarat pada IF tidak terpenuhi.
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
Mematikan LED merah.
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
Mematikan LED hijau.
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
Mematikan buzzer.
HAL_Delay(50);
Memberikan delay selama 50 ms untuk menghindari pembacaan input yang terlalu cepat dan efek bouncing.
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
Struktur data untuk konfigurasi oscillator.
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
Struktur data untuk konfigurasi clock bus.
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
Menentukan bahwa oscillator yang digunakan adalah HSI (High Speed Internal).
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
Mengaktifkan oscillator internal HSI.
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
Menggunakan nilai kalibrasi default untuk HSI.
HAL_RCC_OscConfig(&RCC_OscInitStruct);
Menerapkan konfigurasi oscillator ke sistem.
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
Menentukan sumber clock sistem berasal dari HSI.
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
Clock AHB tidak dibagi (frekuensi penuh).
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
Clock APB1 juga tidak dibagi.
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
Mengaktifkan konfigurasi clock sistem dengan latency flash 0.
__HAL_RCC_GPIOA_CLK_ENABLE();
Mengaktifkan clock untuk GPIOA.
__HAL_RCC_GPIOB_CLK_ENABLE();
Mengaktifkan clock untuk GPIOB.
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
Menentukan pin PA0 dan PA1.
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
Mengatur PA0 dan PA1 sebagai input.
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
Mengaktifkan pull-down internal agar input stabil saat tidak aktif.
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
Menerapkan konfigurasi input ke GPIOA.
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
Menentukan pin PB0, PB1, dan PB2.
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Mengatur pin sebagai output push-pull.
GPIO_InitStruct.Pull = GPIO_NOPULL;
Menonaktifkan pull-up dan pull-down.
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
Mengatur kecepatan switching GPIO ke rendah.
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
Menerapkan konfigurasi output ke GPIOB.
__disable_irq();
Menonaktifkan seluruh interrupt pada sistem.
while (1);
Mikrokontroler berhenti pada loop tak berhingga sebagai indikasi error.
#include "stm32c0xx_hal.h"
Library HAL untuk seri STM32C0.
#define BUTTON_REVERSE_Pin GPIO_PIN_0
#define BUTTON_REVERSE_GPIO_Port GPIOA
Definisi pin switch pada PA0.
#define IR_SENSOR_Pin GPIO_PIN_1
#define IR_SENSOR_GPIO_Port GPIOA
Definisi pin sensor IR pada PA1.
#define LED_GREEN_Pin GPIO_PIN_0
#define LED_GREEN_GPIO_Port GPIOB
Definisi pin LED hijau pada PB0.
#define LED_RED_Pin GPIO_PIN_1
#define LED_RED_GPIO_Port GPIOB
Definisi pin LED merah pada PB1.
#define BUZZER_Pin GPIO_PIN_2
#define BUZZER_GPIO_Port GPIOB
Definisi pin buzzer pada PB2.





.png)
