Laporan Akhir 2
1. Prosedur [Kembali]
1. Buka software proteus lalu rangkai komponen sesuai dengan gambar yang ada di modul
2. Buka software STM32CubeIDE lalu lakukan konfigurasi pin pada STM untuk menentukan GPIO input dan GPIO output
3. Masukan Program ke dalam software STM32CubeIDE lalu build untuk mendapatkan file .hex
4. Masukan file .hex ke dalam file library STM32F103C8 pada proteus
5. Simulasikan rangkaian
2. Hardware [Kembali]
- Hardware
1. STM32F103C8
2. Touch Sensor
3. PIR Sensor
4. LED
5. Buzzer
6. Resistor
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
- Sensor mendeteksi, maka logicstate berlogika 1
- Salah satu sensor ketika berlogika 1, maka akan diteruskan ke STM32F103C8 sebagai input PA0 dan PA1
- Setelah itu keluarannya dari PB0 dan PB1 akan menghidupkan LED dan Buzzer secara bersamaan
- Pada Touch sensor, outputnya akan ON dan OFF setiap berlogika 1 secara bergantian.
- Pada PIR sensor, outputnya akan ON dan OFF setiap pergantian logika 1 dengan 0
4. Flowchart [Kembali]
- Flowchart
- Listing Program
#include "main.h" // Menghubungkan file ini dengan definisi pin & library
void SystemClock_Config(void); // Deklarasi fungsi konfigurasi clock
static void MX_GPIO_Init(void); // Deklarasi fungsi inisialisasi GPIO
int main(void)
{
HAL_Init(); // Inisialisasi HAL (reset sistem & konfigurasi dasar)
SystemClock_Config(); // Mengatur clock mikrokontroler (pakai HSI internal)
MX_GPIO_Init(); // Mengatur pin sebagai input/output sesuai kebutuhan
while (1) // Loop utama (program berjalan terus menerus)
{
// ================= LOGIKA UTAMA =================
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
// Jika switch OFF (karena pakai pull-down → tidak ditekan = LOW)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
// LED hijau OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
// LED merah OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
// Buzzer OFF
}
else
// Jika switch ON (ditekan = HIGH)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET)
// Jika sensor IR mendeteksi objek (umumnya LOW = terdeteksi)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
// LED hijau ON
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
// LED merah OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);
// Buzzer OFF
}
else
// Jika sensor tidak mendeteksi objek
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
// LED hijau OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
// LED merah ON
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);
// Buzzer ON
}
}
HAL_Delay(50);
// Delay 50 ms untuk menghindari noise/pembacaan tidak stabil
}
}
// ================= KONFIGURASI CLOCK =================
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
// Struktur untuk konfigurasi oscillator (sumber clock)
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// Struktur untuk konfigurasi jalur clock
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
// Menggunakan HSI (internal oscillator)
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
// Mengaktifkan HSI
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
// Kalibrasi default pabrik
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
// Jika konfigurasi oscillator gagal
{
Error_Handler();
// Masuk ke fungsi error
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
// Menentukan jalur clock (CPU, sistem, peripheral)
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
// Sumber clock utama = HSI
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
// Clock tidak dibagi (full speed)
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
// Clock peripheral tidak dibagi
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
// Jika konfigurasi clock gagal
{
Error_Handler();
}
}
// ================= INISIALISASI GPIO =================
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Struktur konfigurasi GPIO
__HAL_RCC_GPIOA_CLK_ENABLE();
// Mengaktifkan clock untuk port A
__HAL_RCC_GPIOB_CLK_ENABLE();
// Mengaktifkan clock untuk port B
// -------- INPUT (PA0 & PA1) --------
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
// PA0 = switch, PA1 = sensor IR
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
// Mode input
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
// Pull-down → default LOW (0)
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// Terapkan konfigurasi ke port A
// -------- OUTPUT (PB0, PB1, PB2) --------
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
// PB0 = LED hijau, PB1 = LED merah, PB2 = buzzer
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
// Output push-pull
GPIO_InitStruct.Pull = GPIO_NOPULL;
// Tanpa resistor pull
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
// Kecepatan rendah (cukup untuk LED & buzzer)
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// Terapkan konfigurasi ke port B
}
// ================= ERROR HANDLER =================
void Error_Handler(void)
{
__disable_irq();
// Menonaktifkan semua interrupt
while (1)
// Loop tak hingga (program berhenti di sini jika error)
{
}
}
// ================= FILE HEADER =================
#ifndef __MAIN_H
#define __MAIN_H
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32c0xx_hal.h"
// Library HAL STM32
void Error_Handler(void);
// Deklarasi fungsi error handler
// -------- INPUT --------
#define BUTTON_REVERSE_Pin GPIO_PIN_0
#define BUTTON_REVERSE_GPIO_Port GPIOA
// Switch di PA0
#define IR_SENSOR_Pin GPIO_PIN_1
#define IR_SENSOR_GPIO_Port GPIOA
// Sensor IR di PA1
// -------- OUTPUT --------
#define LED_GREEN_Pin GPIO_PIN_0
#define LED_GREEN_GPIO_Port GPIOB
// LED hijau di PB0
#define LED_RED_Pin GPIO_PIN_1
#define LED_RED_GPIO_Port GPIOB
// LED merah di PB1
#define BUZZER_Pin GPIO_PIN_2
#define BUZZER_GPIO_Port GPIOB
// Buzzer di PB2
#ifdef __cplusplus
}
#endif
#endif
5. Video Demo [Kembali]
6. Analisa [Kembali]
7. Download File [Kembali]
Rangkaian Simulasi [Klik]
Video Simulasi [Klik]








Komentar
Posting Komentar