Laporan Akhir 2 Modul 1
(Percobaan 4)
- Rangkai sesuai gambar percobaan dengan inputnya PIR danTouch sensor, untuk 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.
- Upload program ke STM32.
- Lihat perubahan ketika sensor PIR diberi deteksi gerakan dan touch sensor diberi sentuhan.
3. Rangkaian Simulasi dan Prinsip Kerja
[Kembali]
Rangkaian Simulasi :
Prinsip Kerja :
4. Flowchart dan Listing Program
[Kembali]
Flowchart :
Listing Program :
#include "main.h"
// Prototype fungsi
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
// Inisialisasi HAL Library
HAL_Init();
// Konfigurasi sistem clock
SystemClock_Config();
// Inisialisasi GPIO
MX_GPIO_Init();
while (1)
{
// Baca status sensor PIR dan sensor sentuh
uint8_t pir_status = HAL_GPIO_ReadPin(GPIOB, PIR_Pin);
uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);
// LED biru mengikuti status PIR secara langsung
// Jika pir_status == GPIO_PIN_SET, LED biru menyala, sebaliknya mati
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, pir_status);
// Jika sensor sentuh terdeteksi (HIGH)
if (touch_status == GPIO_PIN_SET)
{
// Matikan LED merah, nyalakan LED hijau
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
// Tahan LED hijau selama 3 detik
HAL_Delay(3000);
// Matikan LED hijau
HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_RESET);
// Tunda lagi 3 detik (opsional, jika memang diinginkan jeda)
HAL_Delay(3000);
}
else
{
// Jika sensor sentuh tidak aktif dan PIR tidak mendeteksi gerakan
// maka LED merah menyala
if ((pir_status == GPIO_PIN_RESET) && (touch_status == GPIO_PIN_RESET))
{
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
}
else
{
// Jika sensor PIR mendeteksi gerakan, LED merah dimatikan
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);
}
}
}
}
// Konfigurasi clock dasar dengan HSI sebagai sumber clock
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// Mengaktifkan HSI (High Speed Internal)
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();
}
// Mengatur sumber clock dan pembagian clock
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;
// Terapkan konfigurasi clock
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
// Inisialisasi GPIO
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Aktifkan clock untuk port yang digunakan
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// Set default state untuk LED merah dan hijau (mati)
HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin, GPIO_PIN_RESET);
// Set default state untuk LED biru (mati)
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
// Konfigurasi pin LED merah dan hijau (PAx) sebagai output push-pull
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);
// Konfigurasi pin LED biru (Px) sebagai output push-pull
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);
// Konfigurasi pin PIR dan TOUCH (PBx) sebagai input
GPIO_InitStruct.Pin = PIR_Pin | TOUCH_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
// Fungsi penanganan error
void Error_Handler(void)
{
__disable_irq();
while (1)
{
// Di sini dapat ditambahkan penanganan error sesuai kebutuhan
}
}
5. Kondisi
[Kembali]
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
6. Video Demo [Kembali]
7. Download File
[Kembali]
Datasheet LED RGB Download
Datasheet Resistor Download
Datasheet Sensor Touch Download
Tidak ada komentar:
Posting Komentar