LAPORAN AKHIR 1 MODUL 1 GENERAL INPUT OUTPUT
- Siapkan alat-alat yang diperlukan pada Wokwi Simulation atau perangkat keras nyata
- Hubungkan Sensor PIR:
- VCC ke 5V
- GND ke GND STM32
- OUT ke GPIO PA0
- Hubungkan Sensor Sentuh (Touch Sensor):
- VCC ke 5V
- GND ke GND STM32
- OUT ke GPIO PA1
- Hubungkan LED RGB:
- Anoda LED Merah ke GPIO PB0 melalui resistor 110Ω
- Anoda LED Hijau ke GPIO PB1 melalui resistor 110Ω
- Anoda LED Biru ke GPIO PB2 melalui resistor 110Ω
- Katoda ke GND
- Hubungkan Buzzer:
- Salah satu kaki buzzer ke GND STM32
- Kaki lainnya ke GPIO PA5 melalui resistor 110Ω
- Hubungkan sensor PIR dan sensor sentuh ke sumber daya 3,3V atau 5V sesuai spesifikasi sensor
- Inputkan Listing Program ke STM32CubeIDE
- Jalankan (Running) program dan amati respon sensor serta keluaran LED dan Buzzer
- STM32
- LED RGB
- Buzzer
Buzzer adalah komponen elektronik yang digunakan untuk menghasilkan suara dalam berbagai frekuensi. Buzzer dapat bekerja berdasarkan prinsip piezoelektrik atau elektromagnetik untuk mengubah sinyal listrik menjadi getaran suara. Dalam sistem tertanam, buzzer sering digunakan sebagai alarm, notifikasi audio, atau indikator peringatan dalam perangkat elektronik seperti jam tangan, sistem keamanan, dan mesin industri.
- Infrared Sensor
- Touch Sensor
- Rangkaian Simulasi
- Prinsip Kerja
Rangkaian ini bekerja berdasarkan interaksi antara sensor PIR (Passive Infrared), sensor sentuh (Touch Sensor), mikrokontroler STM32, LED RGB, dan buzzer. Setiap komponen memiliki peran tertentu dalam sistem, yang secara keseluruhan dapat digunakan untuk mendeteksi keberadaan objek dan memberikan respons berupa cahaya dan suara. Berikut adalah prinsip kerja dari rangkaian:
-
Deteksi Gerakan dengan Sensor PIR
- Sensor PIR digunakan untuk mendeteksi gerakan berdasarkan perubahan radiasi inframerah yang diterima.
- Saat ada pergerakan di depan sensor, sensor PIR akan mengirimkan sinyal output digital ke STM32.
- STM32 akan memproses sinyal ini dan dapat mengaktifkan LED RGB atau buzzer sebagai indikator keberadaan objek.
-
Deteksi Sentuhan dengan Touch Sensor
- Sensor sentuh (Touch Sensor) berfungsi untuk mendeteksi sentuhan fisik.
- Ketika pengguna menyentuh sensor, sensor akan mengeluarkan sinyal HIGH (1) ke STM32.
- STM32 kemudian dapat mengontrol LED RGB untuk menyalakan atau mengubah warna sesuai dengan kondisi yang telah diprogram.
-
Kontrol LED RGB
- LED RGB memiliki tiga warna dasar (merah, hijau, dan biru) yang dapat dikombinasikan untuk menghasilkan warna yang berbeda.
- STM32 mengontrol intensitas dari masing-masing warna LED berdasarkan input dari sensor PIR dan sensor sentuh.
- Contohnya, jika sensor PIR mendeteksi gerakan, STM32 dapat mengaktifkan LED berwarna merah sebagai tanda peringatan.
-
Aktivasi Buzzer sebagai Alarm
- Buzzer digunakan sebagai indikator suara yang dikendalikan oleh STM32.
- Ketika sensor PIR mendeteksi gerakan atau sensor sentuh diaktifkan, STM32 dapat menyalakan buzzer dengan pola bunyi tertentu sebagai alarm atau notifikasi.
- Durasi dan pola bunyi buzzer dapat diatur sesuai dengan program yang telah dibuat.
-
Pengolahan Data oleh Mikrokontroler STM32
- Mikrokontroler STM32 berperan sebagai pusat kendali rangkaian.
- STM32 menerima input dari sensor PIR dan sensor sentuh, kemudian memproses data untuk menentukan apakah LED RGB dan buzzer harus diaktifkan atau tidak.
- Logika pemrosesan ini bergantung pada kode program yang ditanamkan dalam STM32, yang dapat dikustomisasi sesuai kebutuhan.
- Listing Program pada STM32
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* Copyright (c) 2025 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
uint8_t pir_status = HAL_GPIO_ReadPin(GPIOB, PIR_Pin);
uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin | RED_Pin | BUZZER_Pin, GPIO_PIN_RESET);
if (pir_status == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, BUZZER_Pin, GPIO_PIN_SET);
}
if (touch_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);
}
/* USER CODE END 3 */
}
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
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();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
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();
}
}
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin|BUZZER_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : RED_Pin GREEN_Pin BUZZER_Pin */
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);
/*Configure GPIO pin : BLUE_Pin */
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);
/*Configure GPIO pins : PIR_Pin TOUCH_Pin */
GPIO_InitStruct.Pin = PIR_Pin|TOUCH_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
}
/* USER CODE BEGIN 4 */
/* USER CODE END 4 */
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
- Listing Program pada modul
- Flowchart
- HTML klik disini
- Download Video Demo klik disini
- DataSheet STM32 Klik Disini
- DataSheet Sensor PIR Klik Disini
- DataSheet Sensor Touch Klik Disini
- DataSheet LED RGB Klik disini
- DataSheet Resistor Klik disini
- Library Sensor PIR Klik Disini
- Library Sensor Touch Klik Disini
Komentar
Posting Komentar