Percobaan 4
LED RGB, PIR & Touch Sensor
- Rangkai sesuai gambar percobaan dengan inputnya yaitu sensor PIR, Touch sensor dan outputnya yaitu LED RGB. Hubungkan LED, touch sensor, dan PIR sensor dengan kabel jumper sesuai pin pada programnya.
- Buatlah program dengan konfigurasi pin input dan output berdasarkan pada pin GP STM32 yang telah dirangkai sebelumnya. Kemudian buatlah program untuk menghasilkan output LED RGB sesuai kondisi yang telah ditentukan.
- Upload program ke STM32.
- Lihat perubahan ketika sensor PIR diberi deteksi gerakan dan touch sensor diberi sentuhan.
2. Hardware dan Diagram Blok[Kembali]
A. Hardware
B. Blok Diagram
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
A. Rangkaian Simulasi
B. Prinsip Kerja
Rangkaian ini bekerja dengan sensor PIR dan sensor touch sebagai input dan LED RGB sebagai output.
Pertama, sensor PIR mendeteksi gerakan dan sensor sentuh mendeteksi sentuhan sehingga output LED RGB berwana biru dan cyan aktif 3 detik dan mati 3 detik berulang.
Kedua, sensor sentuh mendeteksi sentuhan sehingga output LED RGB berwana hijau aktif 3 detik dan mati 3 detik berulang.
Ketiga, sensor sentuh mendeteksi sentuhan sehingga output LED RGB berwana biru aktif.
Keempat, sensor PIR tidak mendeteksi gerakan dan sensor sentuh tidak mendeteksi sentuhan sehingga output LED RGB berwana merah aktif.
4. Flowchart dan Listing Program[Kembali]
#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 pir_status = HAL_GPIO_ReadPin(GPIOB, PIR_Pin);
uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, pir_status);
if (touch_status == GPIO_PIN_SET) {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
HAL_Delay(3000);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_RESET);
HAL_Delay(3000);
} else {
if (pir_status == GPIO_PIN_RESET && touch_status ==
GPIO_PIN_RESET) { HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(GPIOA, RED_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();
HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
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);
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 = PIR_Pin|TOUCH_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)
{
}
}
Kondisi ketika PIR dan Touch sensor mendeteksi LED RGB akan
menampilkan warna biru serta cyan selama 3 detik lalu mati selama 3
detik secara berulang, ketika Touch mendeteksi sentuhan maka LED RGB
akan menampilkan warna hijau selama 3 detik lalu mati selama 3 detik
secara berulang dan PIR mendeteksi gerakan maka LED RGB akan
menampilkan warna biru selama 3 detik lalu mati selama 3 detik secara
berulang
Rangkaian Simulasi Klik Disini
Video Demo Klik Disini
DataSheet STM32 Klik DisiniDataSheet 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