Percobaan 1 Kondisi 2
1. Prosedur [kembali]
- Menyiapkan alat dan bahan.
- Merangkai komponen pada breadboard sesuai dengan gambar rangkaian percobaan.
- Menghubungkan masing masing pin input output.
- Mengunggah program ke mikrokontroler.
- Jalankan Rangkaian
2. Hardware dan Diagram Blok [kembali]
- STM32F103C8
- Touch Sensor
- PIR Sensor
- LED
- Buzzer
- Resistor
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
Rangkaian ini didasarkan pada logika kendali mikrokontroler STM32F103C8 yang memantau sinyal masukan dari dua sensor, yaitu sensor PIR dan sensor Touch. Ketika sensor PIR tidak mendeteksi adanya pergerakan dan sensor Touch tidak menerima sentuhan, kedua sensor tersebut mengirimkan logika rendah (logika 0) ke pin masukan mikrokontroler. Sesuai dengan program yang tertanam di dalam mikrokontroler, kondisi tersebut diterjemahkan sebagai status idle atau siaga, sehingga mikrokontroler akan mempertahankan pin keluarannya pada kondisi tegangan rendah. Akibatnya, tidak ada arus listrik yang cukup untuk mengalir melalui resistor R1 menuju LED (D1) maupun ke buzzer (BUZ1), yang menyebabkan LED tetap dalam keadaan mati dan buzzer tetap diam. Sistem ini baru akan mengubah kondisi keluarannya menjadi aktif, yang ditandai dengan menyalanya LED dan berbunyinya buzzer, apabila mikrokontroler mendeteksi adanya perubahan logika menjadi tinggi (logika 1) pada salah satu atau kedua pin masukan sensor tersebut.
4. Flowchart dan Listing Program [kembali]
#include "main.h"
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
static uint8_t system_enable = 0; /* System enable flag (0=OFF, 1=ON) */
static uint8_t touch_last = 0; /* Previous touch state for edge detection */
static uint8_t pir_first_trigger = 1; /* Flag for first PIR trigger blink */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* MCU Configuration */
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
/* Main infinite loop */
while (1)
{
/* Read sensor states */
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
/* Touch button: Rising edge detection (debounced toggle) */
if (touch_now && !touch_last)
{
system_enable = !system_enable;
if (system_enable)
{
/* System ON: Blink indicator LED */
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(200); /* Debounce delay */
}
touch_last = touch_now;
/* PIR Sensor Logic */
if (pir_now)
{
/* Motion detected: Turn ON status LED */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
if (pir_first_trigger)
{
/* First motion detection: Blink indicator */
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
{
/* No motion */
pir_first_trigger = 1;
if (!system_enable)
{
/* System OFF: Turn OFF status LED */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}
}
/* System Override: Force status LED ON when system enabled */
if (system_enable)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
}
HAL_Delay(50); /* Main loop timing */
}
}
/**
* @brief System Clock Configuration (8MHz HSI)
* @retval None
*/
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_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
/**
* @brief GPIO Initialization Function
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);
/* PA0: PIR Sensor Input (configured as output initially - will be read as input) */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* PA1: Touch Button Input */
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* PB0: Status LED (PIR/System) */
/* PB1: Indicator LED (Feedback) */
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);
}
/**
* @brief Error Handler
* @retval None
*/
void Error_Handler(void)
{
__disable_irq();
while (1)
{
/* Stay here forever if critical fault occurs */
}
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* User can add implementation to report error */
while (1)
{
}
}
#endif /* USE_FULL_ASSERT */
5. Video Demo [kembali]
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi ketika PIR tidak mendeteksi gerakan dan sensor Touch tidak mendeteksi sentuhan, maka LED akan mati
7. Video Simulasi [kembali]
- Download File Rangkaian (klik disini)
- Download Datasheet Touch Sensor (klik disini)
- Download Datasheet Resistor (klik disini)
- Download Datasheet LED (klik disini)
- Download Datasheet Buzzer (klik disini)
- Download Datasheet STM32F103C8 (klik disini)
- Download Datasheet PIR Sensor (klik disini)
Komentar
Posting Komentar