Percobaan 1 Kondisi 4
1. Prosedur [kembali]
1. Jalankan
software Proteus, kemudian susun rangkaian komponen sesuai dengan diagram yang
terdapat pada modul.
2. Buka
STM32CubeIDE, lalu lakukan pengaturan pin pada mikrokontroler untuk menentukan
fungsi sebagai GPIO input maupun GPIO output.
3. Masukkan
kode program ke dalam STM32CubeIDE, kemudian lakukan proses build untuk
menghasilkan file berekstensi .hex.
4. Impor
file .hex tersebut ke dalam library mikrokontroler STM32F103C8 yang
digunakan pada Proteus.
5. Jalankan
simulasi rangkaian untuk melihat hasil dari program yang telah dibuat.
2. Hardware dan Diagram Blok [kembali]
A. Hardware
a) STM32F103C8
b) Touch Sensor
c) PIR Sensor
d) LED
e) Buzzer
f) Resistor 1k ohm
g) Adaptor
h) Breadboard
B. Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
Prinsip
Kerja
Sistem
ini menggunakan sensor PIR untuk mendeteksi gerakan dan sensor touch sebagai
pengontrol aktif atau tidaknya sistem. Ketika sensor touch tidak disentuh,
sistem berada dalam kondisi aktif. Jika PIR mendeteksi gerakan, maka waktu
deteksi terakhir akan diperbarui dan LED akan menyala.
LED akan tetap menyala selama selisih waktu antara deteksi terakhir dan waktu sekarang masih dalam batas waktu tunda (1 detik). Setiap gerakan baru akan mengulang waktu tunda tersebut. Oleh karena itu, jika gerakan terdeteksi secara berulang sebelum waktu tunda habis, LED akan tetap menyala. Sebaliknya, jika tidak ada gerakan dalam waktu tertentu atau sensor touch disentuh, maka LED akan mati.
4. Flowchart dan Listing Program [kembali]
Flowchart:
Listing
Program:
#include
"main.h"
void
SystemClock_Config(void);
static void
MX_GPIO_Init(void);
/* USER CODE BEGIN
PV */
static uint32_t
last_trigger_time = 0;
uint32_t
delay_time = 1000;
/* USER CODE END
PV */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
/* USER CODE BEGIN 3 */
uint8_t pir =
HAL_GPIO_ReadPin(PIR_SENSOR_GPIO_Port, PIR_SENSOR_Pin);
uint8_t touch =
HAL_GPIO_ReadPin(TOUCH_SENSOR_GPIO_Port, TOUCH_SENSOR_Pin);
if (touch == GPIO_PIN_RESET)
{
if (pir == GPIO_PIN_SET)
{
last_trigger_time = HAL_GetTick();
}
if ((HAL_GetTick() - last_trigger_time)
< delay_time)
{
HAL_GPIO_WritePin(LED_GPIO_Port,
LED_Pin, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(LED_GPIO_Port,
LED_Pin, GPIO_PIN_RESET);
}
}
else
{
HAL_GPIO_WritePin(LED_GPIO_Port,
LED_Pin, GPIO_PIN_RESET);
}
/* USER CODE END 3 */
}
}
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(GPIOB, LED_Pin |
BUZZER_Pin, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = PIR_SENSOR_Pin |
TOUCH_SENSOR_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = LED_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(GPIOB, &GPIO_InitStruct);
}
void
Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
5. Video Demo [kembali]
6. Kondisi [kembali]
Percobaan
1 Kondisi 4 (Kontrol Lampu Lorong)
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi PIR mendeteksi gerakan berulang sebelum waktu tunda habis dan sensor Touch tidak disentuh, maka LED tetap menyala.
7. Video Simulasi [kembali]
8. Download File [kembali]
Rangkaian Proteus [Download]
Program [Download]
Vidio [Download]
Datasheet STM32F103C8 [Download]
Datasheet Touch Sensor [Download]
Datasheet PIR Sensor [Download]
Datasheet LED [Download]
HTML [Download]
Comments
Post a Comment