Laporan Akhir 1
1. Prosedur [Kembali]
- Rangkai semua komponen
- Buat program di website wokwi
- Jalankan program dan cobakan sesuai kondisi
- Rangkaian
- Prinsip Kerja
Rangkaian ini menggunakan mikrokontroler STM32 sebagai pengendali utama, dengan sensor inframerah (IR), tombol, LED RGB, dan buzzer sebagai komponen pendukung. Saat sistem dinyalakan, STM32 melakukan inisialisasi perangkat keras, termasuk pengaturan GPIO untuk input (sensor IR dan tombol) serta output (LED dan buzzer). Mikrokontroler kemudian membaca status tombol dan sensor IR melalui GPIOB. Jika tombol ditekan, STM32 akan mengaktifkan LED merah dan buzzer, menandakan bahwa tombol telah ditekan. Jika sensor IR mendeteksi keberadaan objek di depannya, STM32 akan menyalakan LED hijau dan buzzer, menunjukkan bahwa ada benda yang terdeteksi. Sebaliknya, jika tidak ada input dari tombol maupun sensor, LED dan buzzer akan tetap dalam keadaan mati. Program ini berjalan dalam loop tak terbatas (while(1)), dengan jeda waktu 100 ms untuk memastikan stabilitas pembacaan sensor dan tombol. Rangkaian ini dapat digunakan untuk berbagai aplikasi, seperti sistem keamanan atau penghitung objek otomatis berbasis sensor IR.
- 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]
Tidak ada komentar:
Posting Komentar