Tugas Pendahuluan 2 (Wokwi)
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
- Hardware
1. STM32 NUCLEO-C031C6
2. Float Switch
3. Infrared Sensor
4. Resistor
5. Buzzer
6. LED
7. Push Button
- Diagram Blog
c) Rangkaian Simulasi dan Prinsip Kerja
- Rangkaian Simulasi
- Prinsip kerja
-Sistem Nonaktif (Switch OFF):
Jika Anda menggeser Slide Switch ke posisi OFF (pin membaca sinyal LOW), mikrokontroler akan mengabaikan sensor. Semua lampu (RGB LED) dan Buzzer akan dipaksa MATI.
-Sistem Aktif & Standby (Switch ON, Button dilepas):
Jika Slide Switch digeser ke ON, sistem mulai bekerja. Karena tidak ada benda yang dideteksi (Push Button tidak ditekan), mikrokontroler akan menyalakan LED warna Kuning sebagai tanda bahwa alat standby dan siap mendeteksi.
-Sistem Mendeteksi Objek (Switch ON, Button ditekan):
Saat benda lewat di depan sensor (Anda menekan dan menahan Push Button), mikrokontroler langsung merespons. LED Kuning akan mati, lalu LED warna Hijau akan menyala sebagai tanda bahwa objek berhasil dideteksi. Saat tombol dilepas, lampu kembali kuning.
- Flowchart
- Listing Program
#include "main.h"
// Deklarasi fungsi
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
// Inisialisasi HAL Library
HAL_Init();
// Konfigurasi sistem clock
SystemClock_Config();
// Inisialisasi GPIO (Input dan Output)
MX_GPIO_Init();
// Loop utama
while (1)
{
// 1. Cek apakah Switch dalam kondisi ON
if (HAL_GPIO_ReadPin(BUTTON_REVERSE_GPIO_Port, BUTTON_REVERSE_Pin) == GPIO_PIN_SET)
{
// 2. Cek apakah Touch / Push Button DITEKAN
// (Menggunakan pin PA1 yang di main.h berlabel IR_SENSOR_Pin)
if (HAL_GPIO_ReadPin(IR_SENSOR_GPIO_Port, IR_SENSOR_Pin) == GPIO_PIN_SET)
{
// KONDISI TERCAPAI: Switch ON & Touch ditekan -> LED HIJAU NYALA
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_SET);
// Memastikan LED Merah dan Buzzer mati
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
}
else
{
// KONDISI: Switch ON, tapi Touch TIDAK ditekan -> Semua mati
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
}
}
else
{
// KONDISI: Switch OFF -> Semua Dimatikan
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
}
// Delay 50ms untuk debounce agar pembacaan lebih stabil
HAL_Delay(50);
}
}
// ==========================================
// FUNGSI 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();
}
}
// ==========================================
// FUNGSI INISIALISASI GPIO PIN
// ==========================================
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Aktifkan Clock untuk GPIOA dan GPIOB
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// Konfigurasi Pin INPUT (PA0 Switch & PA1 Touch)
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 Hijau, PB1 Merah, PB2 Buzzer)
GPIO_InitStruct.Pin = LED_BLUE_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);
// Kondisi awal (saat program pertama jalan): Matikan semua output
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
}
// ==========================================
// FUNGSI ERROR HANDLER
// ==========================================
void Error_Handler(void)
{
// Nonaktifkan semua interrupt
__disable_irq();
while (1)
{
// Jika terjadi error sistem, program akan berhenti di sini
}
}
#ifndef __MAIN_H
#define __MAIN_H
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32c0xx_hal.h"
void Error_Handler(void);
#define BUTTON_REVERSE_Pin GPIO_PIN_0
#define BUTTON_REVERSE_GPIO_Port GPIOA
#define IR_SENSOR_Pin GPIO_PIN_1
#define IR_SENSOR_GPIO_Port GPIOA
#define LED_BLUE_Pin GPIO_PIN_0
#define LED_BLUE_GPIO_Port GPIOB
#define LED_RED_Pin GPIO_PIN_1
#define LED_RED_GPIO_Port GPIOB
#define BUZZER_Pin GPIO_PIN_2
#define BUZZER_GPIO_Port GPIOB
#ifdef __cplusplus
}
#endif
#endif
-
Percobaan 2 Kondisi 4 : Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Infrared sensor tidak mendeteksi benda dan switch on, maka LED menyala hijau
File TP/Link Wokwi [klik disini]
Komentar
Posting Komentar