TP M1 P1 K7
2. Hardware dan Diagram Blok[Kembali]
- Hardware
- Diagram Blog
3. Rangkaian Simulasi[Kembali]
- Rangkaian sebelum di running
- Rangkaian Setelah di running
Rangkaian ini merupakan sistem kontrol sederhana berbasis mikrokontroler STM32 yang digunakan untuk mengendalikan LED dan buzzer melalui input berupa push button.
Pada kondisi awal, rangkaian dalam keadaan standby. Push button terhubung ke salah satu pin input pada STM32, dan dilengkapi dengan resistor pull-down yang berfungsi menjaga agar nilai input tetap LOW (0) ketika tombol tidak ditekan. Hal ini penting untuk mencegah kondisi floating yang dapat menyebabkan pembacaan sinyal menjadi tidak stabil.
Ketika tombol tidak ditekan, pin input pada STM32 membaca logika LOW. Dalam kondisi ini, mikrokontroler tidak memberikan sinyal ke output, sehingga LED dalam keadaan mati dan buzzer tidak berbunyi.
Saat push button ditekan, terjadi perubahan kondisi pada input. Tegangan dari VCC akan mengalir melalui tombol ke pin input STM32 sehingga terbaca sebagai logika HIGH (1). Mikrokontroler kemudian memproses perubahan ini sesuai dengan program yang telah ditanamkan.
Sebagai respon terhadap input HIGH tersebut, STM32 mengaktifkan pin output yang terhubung ke LED dan buzzer. Arus listrik mengalir ke LED sehingga LED menyala sebagai indikator visual, dan pada saat yang sama buzzer menerima sinyal sehingga menghasilkan bunyi sebagai indikator suara.
Ketika tombol dilepas kembali, koneksi ke VCC terputus dan resistor pull-down kembali menarik nilai input ke LOW. STM32 mendeteksi perubahan ini dan segera mematikan output, sehingga LED padam dan buzzer berhenti berbunyi.
Dengan demikian, keseluruhan sistem bekerja berdasarkan prinsip dasar logika digital, yaitu perubahan kondisi input (LOW ke HIGH) akan menghasilkan respon pada output. Rangkaian ini menunjukkan hubungan langsung antara perangkat input, proses oleh mikrokontroler, dan perangkat output dalam suatu sistem embedded sederhana.
4. Flowchart dan Listing Program[Kembali]
- Flowchart
- Listing Program
#include "stm32f1xx_hal.h"
/* Function Prototype */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
void Error_Handler(void);
/* MAIN PROGRAM */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t pir_now;
uint8_t touch_now;
// Baca sensor
pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); // PIR
touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); // Touch
// KONDISI:
// PIR DETEKSI (1) dan TOUCH TIDAK DITEKAN (0)
if (pir_now == GPIO_PIN_SET && touch_now == GPIO_PIN_RESET)
{
// LED ON
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
// BUZZER ON (support active & passive)
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
HAL_Delay(1); // bunyi
}
else
{
// LED OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
// BUZZER OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_Delay(50);
}
}
}
/* CLOCK CONFIG */
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;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
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 INIT */
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// INPUT: PIR (PA0) & TOUCH (PA1)
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; // biar stabil
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// OUTPUT: LED (PB0) & BUZZER (PB1)
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// Default OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);
}
/* ERROR HANDLER */
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}








.jpg)


.jpg)
.jpg)
Komentar
Posting Komentar