(c) RGB LED
-
R → PB0
-
G → PB1
-
COM → GND
Tipe: Common Cathode
(d) Buzzer
Power
-
Hubungkan VCC → 5V
-
Hubungkan semua GND
2. Hardware (kembali)
Board STM32 Nucleo C031C6

Push Button

Slide Switch

RGB LED

Buzzer

Resistor 1 kΩ (2 buah)

Sumber tegangan (VCC 5V)

Ground (GND)

3. Rangkaian Simulasi dan Prinsip Kerja (kembali)

Rangkaian ini merupakan sistem kontrol sederhana berbasis mikrokontroler STM32 yang menggunakan dua jenis input, yaitu push button sebagai simulasi sensor inframerah (IR) dan slide switch sebagai pengatur mode. Push button akan menghasilkan logika HIGH saat ditekan (menandakan adanya objek terdeteksi) dan LOW saat tidak ditekan (tidak ada objek). Sementara itu, slide switch menggunakan konfigurasi pull-up, sehingga saat posisi ON bernilai LOW dan saat OFF bernilai HIGH. Kedua sinyal ini dibaca secara terus-menerus oleh mikrokontroler untuk menentukan kondisi sistem.
Berdasarkan pembacaan input tersebut, mikrokontroler akan memproses data menggunakan logika kondisi dan mengendalikan output berupa LED RGB dan buzzer. LED RGB digunakan sebagai indikator visual dengan dua warna utama, yaitu merah dan hijau, sedangkan buzzer berfungsi sebagai indikator suara. Ketika tidak ada objek terdeteksi dan switch dalam keadaan ON, LED hijau akan menyala sebagai tanda kondisi normal. Jika objek terdeteksi dan switch dalam keadaan OFF, maka LED merah menyala sebagai indikasi peringatan. Namun, jika objek terdeteksi dan switch dalam keadaan ON, LED hijau akan menyala bersamaan dengan buzzer yang berbunyi sebagai alarm.
Selain itu, penggunaan resistor pada rangkaian berfungsi sebagai pull-up atau pull-down untuk menjaga kestabilan sinyal input agar tidak terjadi kondisi floating yang dapat menyebabkan pembacaan logika menjadi tidak stabil. Dengan demikian, prinsip kerja rangkaian ini adalah membaca kondisi input, memprosesnya di dalam mikrokontroler, dan menghasilkan output berupa indikator cahaya dan suara sesuai dengan logika yang telah ditentukan.
4. Flowchart dan Listing Program (kembali)

Kode Diagram.json
{
"version": 1,
"author": "Fadhlan Dhiyaulhaq",
"editor": "wokwi",
"parts": [
{ "type": "board-st-nucleo-c031c6", "id": "nucleo", "top": 10.43, "left": 47.02, "attrs": {} },
{
"type": "wokwi-pushbutton",
"id": "btn2",
"top": -41.8,
"left": -115.2,
"attrs": { "color": "green", "xray": "1", "bounce": "0" }
},
{ "type": "wokwi-vcc", "id": "vcc1", "top": -133.64, "left": 28.8, "attrs": {} },
{ "type": "wokwi-slide-switch", "id": "sw1", "top": 71.6, "left": -102.5, "attrs": {} },
{
"type": "wokwi-resistor",
"id": "r1",
"top": 81.6,
"left": -202.15,
"rotate": 90,
"attrs": { "value": "1000" }
},
{ "type": "wokwi-rgb-led", "id": "rgb1", "top": -82.4, "left": 327.5, "attrs": {} },
{
"type": "wokwi-buzzer",
"id": "bz1",
"top": 88.8,
"left": 405,
"attrs": { "volume": "0.1" }
},
{
"type": "wokwi-resistor",
"id": "r2",
"top": 81.6,
"left": -58.15,
"rotate": 90,
"attrs": { "value": "1000" }
},
{ "type": "wokwi-gnd", "id": "gnd1", "top": 403.2, "left": -48.6, "attrs": {} }
],
"connections": [
[ "$serialMonitor:TX", "nucleo:PA3", "", [] ],
[ "$serialMonitor:RX", "nucleo:PA2", "", [] ],
[ "rgb1:R", "nucleo:PB0.1", "red", [ "v0" ] ],
[ "rgb1:G", "nucleo:PB1", "green", [ "v288", "h-278.4", "v-19.2" ] ],
[ "bz1:2", "nucleo:PB2", "gold", [ "v0" ] ],
[ "vcc1:VCC", "nucleo:5V.1", "green", [ "v0" ] ],
[ "btn2:2.r", "vcc1:VCC", "green", [ "h86.6", "v-95.8" ] ],
[ "r2:2", "nucleo:PA0", "violet", [ "h28.8", "v-1.2", "h124.8", "v144" ] ],
[ "sw1:3", "r2:2", "violet", [ "v0" ] ],
[ "nucleo:GND.2", "gnd1:GND", "black", [ "h0" ] ],
[ "r1:2", "rgb1:COM", "black", [ "v219.6", "h575.9" ] ],
[ "r1:1", "nucleo:PA1", "violet", [ "h48", "v115.2" ] ],
[ "btn2:1.r", "r1:1", "violet", [ "v0", "h29", "v-67.2", "h-124.8", "v297.6" ] ],
[ "r2:1", "btn2:2.r", "green", [ "h0", "v-19.2", "h57.6", "v-163.2" ] ],
[ "sw1:2", "gnd1:GND", "black", [ "v288", "h57.7" ] ],
[ "bz1:1", "rgb1:COM", "black", [ "v19.2", "h-96" ] ]
],
"dependencies": {}
}
Kode main.c
#include "main.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
// Baca input
uint8_t ir_state = HAL_GPIO_ReadPin(PORT_IR_DETECT, PIN_IR_DETECT);
uint8_t mode_state = HAL_GPIO_ReadPin(PORT_BTN_MODE, PIN_BTN_MODE);
// Variabel output
uint8_t red_led = GPIO_PIN_RESET;
uint8_t green_led = GPIO_PIN_RESET;
uint8_t buzzer = GPIO_PIN_RESET;
// ================= LOGIKA =================
// Tidak ada objek + mode aktif → LED ORANGE
if ((ir_state == GPIO_PIN_RESET) && (mode_state == GPIO_PIN_SET))
{
red_led = GPIO_PIN_SET;
green_led = GPIO_PIN_SET;
}
else
{
// Jika objek terdeteksi
if (ir_state == GPIO_PIN_SET)
{
// Mode normal → merah
if (mode_state == GPIO_PIN_RESET)
{
red_led = GPIO_PIN_SET;
}
// Mode alternatif → hijau + buzzer
else
{
green_led = GPIO_PIN_SET;
buzzer = GPIO_PIN_SET;
}
}
}
// ================= OUTPUT =================
HAL_GPIO_WritePin(PORT_LED_STATUS_R, PIN_LED_STATUS_R, red_led);
HAL_GPIO_WritePin(PORT_LED_STATUS_G, PIN_LED_STATUS_G, green_led);
HAL_GPIO_WritePin(PORT_ALARM_BUZZER, PIN_ALARM_BUZZER, buzzer);
HAL_Delay(50);
}
}
// ================= 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();
}
}
// ================= GPIO =================
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// INPUT (Button + IR)
GPIO_InitStruct.Pin = PIN_BTN_MODE | PIN_IR_DETECT;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// OUTPUT (LED + Buzzer)
GPIO_InitStruct.Pin = PIN_LED_STATUS_G | PIN_LED_STATUS_R | PIN_ALARM_BUZZER;
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);
}
// ================= ERROR =================
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
Kode main.h
#ifndef __APP_MAIN_H
#define __APP_MAIN_H
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32c0xx_hal.h"
// ================= ERROR =================
void Error_Handler(void);
// ================= INPUT =================
#define PIN_BTN_MODE GPIO_PIN_0
#define PORT_BTN_MODE GPIOA
#define PIN_IR_DETECT GPIO_PIN_1
#define PORT_IR_DETECT GPIOA
// ================= OUTPUT =================
#define PIN_LED_STATUS_G GPIO_PIN_0
#define PORT_LED_STATUS_G GPIOB
#define PIN_LED_STATUS_R GPIO_PIN_1
#define PORT_LED_STATUS_R GPIOB
#define PIN_ALARM_BUZZER GPIO_PIN_2
#define PORT_ALARM_BUZZER GPIOB
#ifdef __cplusplus
}
#endif
#endif /* __APP_MAIN_H */
5. Video Demo (kembali)
6. Kondisi (kembali)
Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Infrared sensor tidak mendeteksi benda dan switch on, maka LED menyala hijau
7. Video Simulasi (kembali)
8. Download File (kembali)
[MENUJU AWAL]
Komentar
Posting Komentar