Laporan Akhir 2
Percobaan 6
1. Prosedur [Kembali]
- Rangkai semua komponen
- Buat program STM32CUBE IDE
- Jalankan program dan cobakan sesuai kondisi
- Rangkaian

- Prinsip Kerja
Program berfungsi untuk mengontrol LED dan buzzer menggunakan input dari push button serta sensor inframerah (IR) dengan mikrokontroler STM32. Pada awal eksekusi, sistem melakukan serangkaian inisialisasi, dimulai dengan pemanggilan fungsi HAL_Init()
, yang mengaktifkan HAL Library agar dapat digunakan dalam program. Selanjutnya, sistem mengonfigurasi clock melalui fungsi SystemClock_Config()
, di mana HSI (High-Speed Internal Clock) digunakan sebagai sumber clock utama tanpa PLL, serta memastikan bahwa bus sistem seperti AHB, APB1, dan APB2 berjalan pada kecepatan yang sesuai.
Setelah konfigurasi clock, sistem menginisialisasi pin GPIO melalui fungsi MX_GPIO_Init()
. Dalam proses ini, pin untuk LED merah, LED hijau, dan buzzer dikonfigurasi sebagai output, sedangkan push button dan sensor IR dikonfigurasi sebagai input tanpa pull-up atau pull-down. Semua output kemudian diatur ke LOW (mati) untuk memastikan sistem mulai dalam kondisi awal yang stabil.
Dalam fungsi main()
, sistem memasuki loop utama yang terus berjalan untuk membaca status push button dan sensor IR. Status ini diperoleh menggunakan HAL_GPIO_ReadPin()
, di mana nilai yang terbaca dari push button disimpan dalam variabel button_status
, sedangkan nilai dari sensor IR disimpan dalam ir_status
. Jika push button ditekan (GPIO_PIN_SET
), sistem akan menyalakan LED merah dan buzzer, menunjukkan bahwa tombol sedang aktif. Sebaliknya, jika sensor IR mendeteksi keberadaan objek (GPIO_PIN_SET
), sistem akan menyalakan LED hijau dan buzzer sebagai indikasi.
Untuk memastikan stabilitas pembacaan input, program menyertakan HAL_Delay(100)
, yang memberikan jeda 100 milidetik guna mengatasi efek bouncing pada tombol mekanis. Setelah delay ini, sistem kembali ke awal loop untuk membaca status tombol dan sensor secara terus-menerus. Dengan demikian, program ini memungkinkan kontrol sederhana atas LED dan buzzer berdasarkan kondisi input dari push button serta sensor IR, dengan sistem yang berjalan secara real-time dan responsif terhadap perubahan lingkungan.
- Listing Program
#include "main.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); uint8_t button_status = HAL_GPIO_ReadPin(GPIOB, BUTTON_Pin); uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin); HAL_GPIO_WritePin(GPIOA, GREEN_Pin | RED_Pin | BUZZER_Pin, GPIO_PIN_RESET); if (button_status == GPIO_PIN_SET) { HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET); } if (ir_status == GPIO_PIN_SET) { HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET); } HAL_Delay(100); } } 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(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin|BUZZER_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET); GPIO_InitStruct.Pin = RED_Pin|GREEN_Pin|BUZZER_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = BLUE_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = BUTTON_Pin|IR_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } void Error_Handler(void) { __disable_irq(); while (1) { } } #ifdef USE_FULL_ASSERT void assert_failed(uint8_t *file, uint32_t line) { } #endif SystemClock_Config(); MX_GPIO_Init(); while (1) {
Percobaan 6 dengan dimana jika IR Sensor mendeteksi RGB Berwarna Hijau hidup, Push Button ditekan RGB Berwarna Merah hidup dan jika salah satu input aktif atau keduanya aktif maka buzzer aktif.
HTML [Download] Rangkaian [Download]
Komentar
Posting Komentar