TP 1 MODUL 1 MIKRO
1. Prosedur [kembali]
- Rangkai rangkaian di proteus sesuai dengan kondisi percobaan
- Buat program untuk mikrokontroler STM32F103C8 di software STM32 CubeIDE.
- Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
- Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
- Selesai.
2. Hardware dan Diagram Blok [kembali]
- Hardware :a) Mikrokontroler STM32F103C8c) PIR Sensord) LEDe) Buzzerf) Resistor
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
system_enable, sehingga sistem bisa aktif atau nonaktif. Sementara itu, sensor PIR digunakan untuk mendeteksi adanya gerakan (biasanya dari manusia) yang akan menghasilkan sinyal HIGH ketika ada pergerakan di sekitarnya.Ketika sistem sudah aktif (system_enable = 1) dan PIR mendeteksi gerakan, mikrokontroler akan mengaktifkan LED dan buzzer secara berkedip (ON-OFF dengan delay 100 ms). Kedipan ini menunjukkan adanya deteksi gerakan dalam kondisi sistem aktif. Jika salah satu kondisi tidak terpenuhi (sistem tidak aktif atau tidak ada gerakan), maka LED dan buzzer akan tetap mati. Jadi prinsip utamanya adalah kombinasi logika: Touch sebagai pengaktif sistem, dan PIR sebagai pemicu output (LED & buzzer).
4. Flowchart dan Listing Program [kembali]
#include "stm32f1xx_hal.h" /* === Variabel Global === */ uint8_t system_enable = 0; uint8_t touch_last = 0; /* === 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) { /* Baca input */ uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); /* === Toggle Touch === */ if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET) { system_enable = !system_enable; HAL_Delay(100); // debounce } touch_last = touch_now; /* === KONDISI 6 === */ if (system_enable && pir_now == GPIO_PIN_SET) { /* LED + BUZZER berkedip */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // LED ON HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // BUZZER ON HAL_Delay(100); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // LED OFF HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); // BUZZER OFF HAL_Delay(100); } else { /* Mati jika kondisi tidak terpenuhi */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); } } } /* === 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 CONFIG === */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /* PA0 & PA1 = INPUT */ 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); /* PB0 & PB1 = OUTPUT */ 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) { } }
5. Video Demo [kembali]
7. Video Simulasi [kembali]
Komentar
Posting Komentar