1. Prosedur [kembali]
- Membuat
project baru di STM32CubeIDE dengan memilih tipe mikrokontroler
STM32F103C8 kemudian melakukan konfigurasi pin dengan mengatur PA0 sebagai
input untuk sensor PIR, PA1 sebagai input untuk touch sensor, serta PB0
dan PB1 sebagai output untuk LED dan buzzer.
- Melakukan generate code menggunakan fitur yang tersedia di STM32CubeIDE, kemudian menambahkan program utama pada file main.c sesuai dengan kondisi percobaan yaitu ketika PIR mendeteksi gerakan selama waktu tertentu kemudian tidak lagi mendeteksi, dan sensor Touch tidak disentuh, LED mati dan Buzzer berbunyi
- Melakukan proses build atau kompilasi program untuk menghasilkan file berekstensi .hex yang nantinya akan digunakan pada simulasi di Proteus.
- Membuat rangkaian pada Proteus dengan menambahkan komponen STM32F103C8, sensor touch, sensor PIR, LED, buzzer, serta sumber tegangan VCC dan GND, kemudian menghubungkan touch sensor ke pin PA1, sensor PIR ke pin PA0, LED ke pin PB0 melalui resistor, dan buzzer ke pin PB1, serta memastikan semua ground terhubung dengan benar.
- Memasukkan file .hex hasil kompilasi ke dalam komponen STM32 pada Proteus melalui pengaturan program file.
- Menjalankan simulasi pada Proteus kemudian mengamati kondisi output dimana ketika PIR mendeteksi gerakan selama waktu tertentu kemudian tidak lagi mendeteksi, dan sensor Touch tidak disentuh, maka LED mati dan Buzzer berbunyi
2. Hardware dan Diagram Blok [kembali]
1. STM32F103C8
|
Microcontroller |
ARM Cortex-M3 |
|
Operating Voltage |
3.3 V |
|
Input Voltage (recommended) |
5 V |
|
Input Voltage (limit) |
2 – 3.6 V |
|
Digital I/O Pins |
32 |
|
PWM Digital I/O Pins |
15 |
|
Analog Input Pins |
10 (dengan resolusi 12-bit ADC) |
|
DC Current per I/O Pin |
25 mA |
|
DC Current for 3.3V Pin |
150 mA |
|
Flash Memory |
64 KB |
|
SRAM |
20 KB |
|
EEPROM |
Emulasi dalam Flash |
|
Clock Speed |
72 MHz |
2. Touch Sensor
SPESIFIKASI:
- Konsumsi
daya yang rendah
- Bisa menerima tegangan dari 2 ~ 5.5V
DC
- Dapat
menggantikan fungsi saklar tradisional
- Dilengkapi 4 lobang baut untuk
memudahkan pemasangan
- Tegangan
kerja : 2v s/d 5.5v (optimal 3V)
- Output
high VOH : 0.8 VCC (typical)
- Output
low VOL : 0.3 VCC (max)
- Arus
Output Pin Sink (@ VCC 3V, VOL 0.6V) : 8 mA
- Arus
Output pin pull-up (@ VCC=3V, VOH=2.4V) : 4 mA
- Waktu
respon (low power mode): max 220 ms
- Waktu
respon (touch mode): max 60 ms
- Ukuran: 24 mm x 24 mm x 7.2 mm
3.
PIR Sensor
4. LED
5. Buzzer
6. Resistor
7. Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
Prinspi Kerja :
Prinsip kerja rangkaian pada
Gambar Percobaan 1 Kondisi 3 ini berpusat pada mikrokontroler STM32F103C8 yang
memproses input dari sensor PIR dan sensor sentuh untuk mengendalikan indikator
output. Sistem bekerja dengan logika spesifik di mana setelah sensor PIR sempat
mendeteksi gerakan selama waktu tertentu lalu berhenti mendeteksi, dan secara
bersamaan sensor sentuh (Touch Sensor) berada dalam kondisi tidak disentuh,
maka mikrokontroler akan mengirimkan instruksi untuk mematikan LED (D1) dan
mengaktifkan Buzzer (BUZ1) sebagai sinyal peringatan suara. Komponen pendukung
seperti resistor R1 berfungsi menjaga kestabilan sinyal input, sementara R2
bertugas membatasi arus yang mengalir ke LED agar tetap aman selama operasional
alat.
4. Flowchart dan Listing Program [kembali]
Flowchart:
#include "stm32f1xx_hal.h"
/* ================== VARIABEL ================== */
uint32_t pir_last_time = 0;
uint8_t pir_detected = 0;
#define PIR_TIMEOUT 3000 // 3 detik
/* ================== PROTOTYPE ================== */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
void Error_Handler(void);
/* ================== MAIN ================== */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t pir = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
uint8_t touch = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
/* ====== SAAT PIR MENDETEKSI ====== */
if (pir == GPIO_PIN_SET)
{
pir_detected = 1;
pir_last_time = HAL_GetTick();
// LED ON
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
// Buzzer OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
/* ====== SAAT PIR TIDAK MENDETEKSI ====== */
else
{
// Jika sebelumnya ada gerakan
if (pir_detected == 1)
{
// Cek apakah sudah lewat waktu tertentu
if ((HAL_GetTick() - pir_last_time) > PIR_TIMEOUT)
{
// Jika touch TIDAK disentuh
if (touch == GPIO_PIN_RESET)
{
// LED OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
// Buzzer ON
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
}
pir_detected = 0; // reset status
}
}
}
}
}
/* ================== CLOCK ================== */
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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
Error_Handler();
}
/* ================== GPIO ================== */
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* ===== INPUT: PIR (PA0) & TOUCH (PA1) ===== */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* ===== OUTPUT: LED (PB0) & BUZZER (PB1) ===== */
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* Default OFF */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
/* ================== ERROR ================== */
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
5. Video Demo [kembali]
6. Kondisi [kembali]
Percobaan 1 Kontrol Lampu
Lorong
Kondisi 3 : Buatlah
rangkaian seperti pada gambar percobaan 1 dengan kondisi ketika PIR mendeteksi
gerakan selama waktu tertentu kemudian tidak lagi mendeteksi, dan sensor Touch
tidak disentuh, LED mati dan Buzzer berbunyi
7. Video Simulasi [kembali]
8. Download File [kembali]
- Download File Rangkaian klik disini
- Download Program klik disini
- Download Library PIR Sensor klik disini
- Download Library Touch Sensor klik disini

Tidak ada komentar:
Posting Komentar