TP M1 - P4K1






1. Prosedur [kembali]
  • Rangkai semua komponen 
  • Buat program di website wokwi
  • Jalankan program dan cobakan sesuai kondisi
2. Hardware dan Diagram Blok [kembali]

Hardware :

1. STM32








2. SENSOR PIR


3. LED RGB



4. RESISTOR



5. TOUCH SENSOR











3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]




RANGKAIAN INI MENGGUNAKAN STM32 SEBAGAI MIKROKONTROLLER, DI MANA INPUTNYA ADALAH PIR SENSOR DAN TOUCH SENSOR DENGAN LED RGB SEBAGAI OUTPUT. PADA PROGRAM DAN STM32, PIN PB7 DIATUR SEBAGAI INPUT UNTUK TOUCH SENSOR DAN PIN PB10 SEBAGAI INPUT UNTUK PIR SENSOR. LALU PIN PB0, PA6, DAN PA7 SEBAGAI OUTPUT UNTUK RED, GREEN, DAN BLUE PADA RGB LED. KETIKA PIR BERLOGIKA 1, MAKA LED RGB AKAN BEWARNA MERAH SELAMA 3 DETIK LALU MATI SELAMA 3 DETIK, DAN TERUS BERULANG SAMPAI PIR BERLOGIKA 0. KETIKA TOUCH BERLOGIKA 1, MAKA LED RGB AKAN BEWARNA BIRU SELAMA 3 DETIK LALU MATI SELAMA 3 DETIK, DAN TERUS BERULANG SAMPAI TOUCH SENSOR BERLOGIKA 0. 



4. Flowchart dan Listing Program[Kembali]

 Flowchart:








Listing Program:

#include "main.h" // Definisi pin dan port GPIO #define RED_Pin GPIO_PIN_0 #define GREEN_Pin GPIO_PIN_1 #define BLUE_Pin GPIO_PIN_2 #define PIR_Pin GPIO_PIN_3 #define TOUCH_Pin GPIO_PIN_4 #define RGB_GPIO_Port GPIOA #define PIR_GPIO_Port GPIOB #define TOUCH_GPIO_Port GPIOB void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { uint8_t pir_status = HAL_GPIO_ReadPin(PIR_GPIO_Port, PIR_Pin); uint8_t touch_status = HAL_GPIO_ReadPin(TOUCH_GPIO_Port, TOUCH_Pin); if (touch_status == GPIO_PIN_SET) { // Jika touch sensor aktif -> RGB biru berkedip 3 detik while (HAL_GPIO_ReadPin(TOUCH_GPIO_Port, TOUCH_Pin) == GPIO_PIN_SET) { HAL_GPIO_WritePin(RGB_GPIO_Port, RED_Pin | GREEN_Pin, GPIO_PIN_RESET); // Matikan merah & hijau HAL_GPIO_WritePin(RGB_GPIO_Port, BLUE_Pin, GPIO_PIN_SET); // Nyalakan biru HAL_Delay(3000); HAL_GPIO_WritePin(RGB_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET); // Matikan biru HAL_Delay(3000); } } else if (pir_status == GPIO_PIN_SET) { // Jika PIR mendeteksi gerakan -> RGB merah berkedip 3 detik while (HAL_GPIO_ReadPin(PIR_GPIO_Port, PIR_Pin) == GPIO_PIN_SET) { HAL_GPIO_WritePin(RGB_GPIO_Port, GREEN_Pin | BLUE_Pin, GPIO_PIN_RESET); // Matikan hijau & biru HAL_GPIO_WritePin(RGB_GPIO_Port, RED_Pin, GPIO_PIN_SET); // Nyalakan merah HAL_Delay(3000); HAL_GPIO_WritePin(RGB_GPIO_Port, RED_Pin, GPIO_PIN_RESET); // Matikan merah HAL_Delay(3000); } } else { // Jika tidak ada input dari PIR dan Touch, matikan semua LED HAL_GPIO_WritePin(RGB_GPIO_Port, RED_Pin | GREEN_Pin | BLUE_Pin, GPIO_PIN_RESET); } } } 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(); // Inisialisasi pin LED RGB HAL_GPIO_WritePin(RGB_GPIO_Port, RED_Pin | GREEN_Pin | BLUE_Pin, GPIO_PIN_RESET); GPIO_InitStruct.Pin = RED_Pin | GREEN_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(RGB_GPIO_Port, &GPIO_InitStruct); // Inisialisasi pin sensor PIR dan touch GPIO_InitStruct.Pin = PIR_Pin | TOUCH_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Pull-down untuk kestabilan sinyal HAL_GPIO_Init(PIR_GPIO_Port, &GPIO_InitStruct); } void Error_Handler(void) { __disable_irq(); while (1) { HAL_GPIO_TogglePin(RGB_GPIO_Port, RED_Pin); // Kedipkan LED merah sebagai indikasi error HAL_Delay(500); } }



5. Kondisi[Kembali]


Buatlah rangkaian seperti gambar pada percobaan 4 dengan kondisi ketika PIR mendeteksi gerakan maka LED RGB akan menampilkan warna merah selama 3 detik lalu mati selama 3 detik secara berulang dan ketika Touch mendeteksi sentuhan maka LED RGB akan menampilkan warna biru selama 3 detik lalu mati selama 3 detik secara berulang. 



6. Video Simulasi[Kembali]







7. Download File[Kembali]

Rangkaian [disini]



Tidak ada komentar:

Posting Komentar

    BAHAN PRESENTASI UNTUK MATA KULIAH  ELEKTRONIKA 2022 Nama: Adnan Fauzan    NIM: 2210953001 Elektronika B Dosen Pengampu ; Darwison,M.T R...