LAPORAN AKHIR 1
1. Prosedur[kembali]
2. Hardware dan Diagram Blok [kembali]
3. Rangkaian Simulasi Dan Prinsip Kerja [kembali]
| Gambar Rangkaian Simulasi Switch on, PIR mendeteksi, LED on |
| Gambar Rangkaian Simulasi Switch on, PIR tidak mendeteksi, LED off |
Prinsip Kerja:
Prinsip kerja rangkaian ini adalah sistem kontrol lampu lorong berbasis mikrokontroler STM32 yang menggunakan dua input, yaitu sensor PIR dan sensor touch, serta dua output berupa LED dan buzzer. Sensor PIR dan sensor touch masing-masing terhubung ke pin GPIO mikrokontroler sebagai input digital, di mana pin OUT dari kedua sensor akan mengirimkan logika HIGH (1) saat aktif (terdeteksi gerakan atau sentuhan) dan logika LOW (0) saat tidak aktif. Sinyal dari kedua sensor ini kemudian diproses oleh mikrokontroler untuk menentukan kondisi output.
Jika sensor touch mendeteksi sentuhan dan sensor PIR mendeteksi gerakan (keduanya HIGH), maka mikrokontroler akan memberikan logika HIGH pada pin output sehingga LED dan buzzer hidup. Jika touch mendeteksi sentuhan namun PIR tidak mendeteksi maka LED dan buzzer mati, dan jika touch tidak mendeteksi sentuhan, LED dan Buzzer mati. LED terhubung ke pin output melalui resistor sebagai pembatas arus, sedangkan buzzer juga dikendalikan melalui pin output untuk menghasilkan suara sebagai indikator. Dengan demikian, keseluruhan sistem bekerja dengan membaca kondisi input pada pin GPIO dan mengatur output sesuai logika yang telah diprogram.
4. Flowchart dan Listing Program [kembali]
Flowchart
Listing Program
#include "stm32f1xx_hal.h" uint8_t system_enable = 0; uint8_t touch_last = 0; uint8_t pir_first_trigger = 1; void SystemClock_Config(void); static void MX_GPIO_Init(void); void Error_Handler(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET) { system_enable = !system_enable; if (system_enable) { 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); } touch_last = touch_now; if (pir_now == GPIO_PIN_SET) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); 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 { pir_first_trigger = 1;
if(!system_enable) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); } if(system_enable) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); } } 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(); } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 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); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET); }
void Error_Handler(void) { __disable_irq(); while(1) { } }
5. Video Demo [kembali]
6. Analisa [kembali]
7. Download File [kembali]
Komentar
Posting Komentar