D. Laporan Akhir 2
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
c. Rangkaian Simulasi dan Prinsip Kerja
- Rangkaian Simulasi
- Prinsip Kerja
Jadi pada percobaan ini, apabila infrared sensor mendeteksi adanya objek dan touch sensor tidak mendeteksi adanya sentuhan, maka LED akan menyala terus dan buzzer tetap mati. Jadi disini, ketika infrared sensor berlogika 1, ia akan mengirimkan sinyal ke STM32 berupa tegangan sebesar 5V, sedangkan touch sensor tidak mengirimkan sinyal alias bertengan 0V. Sinyal berupa tegangan ini akan masuk ke pin input STM32 dan akan diproses di STM32 yang mana sudah dijalankan oleh program yang kita buat sebelumnya. Program ini akan menginisiasi keluaran berupa tegangan yang dikeluarkan mejunu LED, sehingga LED bisa menyala. Namun, tidak ada tegangan yang menuju buzzer, sehingga buzzer tidak menyala.
d. Flowchart dan Listing Program
- Flowchart
- Listing Program
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
uint8_t system_enable = 0;
uint8_t touch_last = 0;
uint8_t pir_first_trigger = 1;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/**
* @brief The application entry point.
*/
int main(void)
{
/* MCU Configuration */
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
// --- LOGIKA TOUCH SENSOR (Toggle System) ---
// Mendeteksi transisi dari LOW ke HIGH (Rising Edge)
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
system_enable = !system_enable;
// Feedback visual/suara saat sistem berubah status
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_Delay(250); // Debounce delay tambahan
}
touch_last = touch_now;
// --- LOGIKA PIR & OUTPUT (PIN B0) ---
if (system_enable)
{
// Jika sistem ENABLE: Output B0 selalu ON (Force ON)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
pir_first_trigger = 1; // Reset trigger PIR agar siap saat sistem OFF nanti
}
else
{
// Jika sistem DISABLE: Output B0 mengikuti sensor PIR
if (pir_now == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
// Bunyi/Indikator sekali saja saat pertama kali terdeteksi gerakan
if (pir_first_trigger)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
pir_first_trigger = 0;
}
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
pir_first_trigger = 1; // Siapkan trigger untuk deteksi berikutnya
}
}
HAL_Delay(10); // Stabilitas pembacaan sensor
/* USER CODE END WHILE */
}
/* USER CODE BEGIN 3 */
/* USER CODE END 3 */
}
/**
* @brief GPIO Initialization Function
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* Reset Output */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);
/* PA0 (PIR), PA1 (TOUCH) sebagai INPUT */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Disarankan PULLDOWN untuk sensor digital
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* PB0 (LOAD/RELAY), PB1 (BUZZER/LED) sebagai OUTPUT */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
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);
}
// Fungsi SystemClock_Config dan Error_Handler tetap sama...
void SystemClock_Config(void) { /* Sesuai standar CubeMX */ }
void Error_Handler(void) { while(1); }
g. Download File
- Download file semua modul 1(klik disini)
- Download File Rangkaian (klik disini)
- Download Datasheet Touch Sensor (klik disini)
- Download Datasheet Infrared Sensor (klik disini)
- Download Datasheet Resistor (klik disini)
- Download Datasheet LED (klik disini)
- Download Datasheet Buzzer (klik disini)



Komentar
Posting Komentar