- Rangkaian
Rangkaian ini terdiri dari sensor inframerah (IR), sensor
sentuh, mikrokontroler STM32F103C8, dan LED indikator. Sensor IR mendeteksi
keberadaan objek berdasarkan pantulan sinyal inframerah, sedangkan sensor
sentuh merespons ketika disentuh. Kedua sensor ini memberikan sinyal keluaran
yang dihubungkan ke pin GPIO mikrokontroler STM32, yang kemudian memproses
sinyal tersebut untuk mengendalikan LED indikator. Jika salah satu sensor
mendeteksi perubahan kondisi, STM32 akan mengaktifkan atau menonaktifkan LED melalui
resistor pembatas arus. Rangkaian ini mendapatkan tegangan +5V untuk
mengoperasikan komponen-komponennya, dengan jalur GND sebagai referensi
potensial.
Rangkaian ini bekerja dengan memanfaatkan sensor inframerah (IR) dan sensor sentuh sebagai input untuk mengendalikan LED melalui mikrokontroler STM32F103C8. Sensor inframerah mendeteksi keberadaan objek berdasarkan pantulan sinyal IR. Ketika sebuah objek berada dalam jangkauan sensor, modul IR akan mengirimkan sinyal digital ke mikrokontroler melalui salah satu pin GPIO. Begitu juga dengan sensor sentuh, yang akan memberikan sinyal digital ketika disentuh.
Mikrokontroler STM32F103C8 memproses sinyal dari kedua sensor dan menentukan apakah LED harus menyala atau mati. Jika salah satu sensor aktif, STM32 akan mengaktifkan pin output yang terhubung ke LED. Arus yang mengalir ke LED dikontrol oleh resistor pembatas arus, yang bertujuan untuk melindungi LED dari arus berlebih dan memastikan nyala LED yang stabil.
Sumber daya +5V digunakan untuk memberi daya ke seluruh rangkaian, termasuk sensor IR, sensor sentuh, dan mikrokontroler. GND berfungsi sebagai referensi tegangan untuk memastikan rangkaian bekerja dengan benar. Dengan demikian, rangkaian ini memungkinkan pendeteksian objek melalui sensor IR serta aktivasi LED melalui sentuhan pada sensor sentuh, menjadikannya sistem sederhana untuk kontrol berbasis sensor.
#include "main.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t ir_status =
HAL_GPIO_ReadPin(GPIOB, IR_Pin); //
Membaca IR sensor
(PB10)
uint8_t
touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin); // Membaca
Touch Sensor (PB6)
// LED Biru menyala
jika IR aktif
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);
// LED Hijau
menyala jika Touch aktif
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);
// LED Merah
menyala jika tidak ada sensor yang aktif
if (ir_status ==
GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET); // Nyalakan LED
RED
} else {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET); // Matikan LED
RED
}
HAL_Delay(10); // Delay kecil untuk stabilisasi pembacaan
sensor
}
}
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();
}
static void MX_GPIO_Init(void)
{
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();
}
}
GPIO_InitTypeDef GPIO_InitStruct = {0};
__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, 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 */
GPIO_InitStruct.Pin = RED_Pin|GREEN_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);
void Error_Handler(void)
{
/*Configure GPIO pins : IR_Pin TOUCH_Pin */
GPIO_InitStruct.Pin = IR_Pin|TOUCH_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
Rangkaian [disini]
Listing Program [disini]
Video [disini]
Datasheet Sensor Infrared [disini]
Datasheet Touch Sensor [disini]
Datasheet STM32103C8 [disini]
Tidak ada komentar:
Posting Komentar