1. Persiapan Alat dan Bahan
- Software Proteus Design Suite
- Mikrokontroler STM32
- Sensor PIR (Passive Infrared)
- Touch Sensor
- LED + Resistor
- Buzzer
- Push button
- Sumber tegangan (VCC & GND)
2. Pembuatan Rangkaian
- Buka Proteus, buat proyek baru.
-
Tambahkan komponen:
- STM32
- PIR Sensor
- Touch Sensor
- LED, resistor, buzzer, push button
- Hubungkan rangkaian:
- Output PIR → pin input STM32
- Output Touch Sensor → pin input STM32
- LED dan buzzer → pin output STM32
- Semua GND disatukan
- VCC disesuaikan (5 V)
3. Pembuatan Program
- Buat program STM32 menggunakan STM32CubeIDE.
-
Konfigurasi:
- Pin PIR dan Touch sebagai GPIO Input
- Pin LED dan Buzzer sebagai GPIO Output
-
Logika program:
- Jika PIR mendeteksi gerakan, lampu menyala.
- Jika Touch Sensor disentuh, lampu ON/OFF manual.
- Buzzer aktif saat PIR mendeteksi objek.
- Compile hingga menghasilkan file .hex
4. Simulasi di Proteus
- Masukkan file program ke STM32 di Proteus.
- Jalankan simulasi.
2. Hardware dan Diagram Blok[Kembali]
1. STM32F103C8
Warna | Panjanggelombang [nm] | Material semikonduktor | |
Gallium arsenide (GaAs)Aluminium gallium arsenide (AlGaAs) | |||
610 < λ < 760 | Aluminium gallium arsenide (AlGaAs)Gallium arsenide phosphide (GaAsP)Aluminium gallium indium phosphide (AlGaInP)Gallium(III) phosphide (GaP) | ||
590 < λ < 610 | Gallium arsenide phosphide (GaAsP)Aluminium gallium indium phosphide (AlGaInP)Gallium(III) phosphide (GaP) | ||
570 < λ < 590 | Gallium arsenide phosphide (GaAsP)Aluminium gallium indium phosphide (AlGaInP)Gallium(III) phosphide (GaP) | ||
500 < λ < 570 | Indium gallium nitride (InGaN) / Gallium(III) nitride (GaN)Gallium(III) phosphide (GaP)Aluminium gallium indium phosphide (AlGaInP)Aluminium gallium phosphide (AlGaP) | ||
450 < λ < 500 | Zinc selenide (ZnSe)Indium gallium nitride (InGaN) | ||
400 < λ < 450 | Indium gallium nitride (InGaN) | ||
multiple types | Dual blue/red LEDs, blue with red phosphor, or white with purple plastic | ||
λ < 400 | Diamond (235 nm) Boron nitride (215 nm) Aluminium nitride (AlN) (210 nm) Aluminium gallium nitride (AlGaN)Aluminium gallium indium nitride (AlGaInN) – (down to 210 nm) | ||
multiple types | Blue with one or two phosphor layers: yellow with red, orange or pink phosphor added afterwards, or white with pink pigment or dye. | ||
White | Broad spectrum | Blue/UV diode with yellow phosphor |
Bagian bagian
Komponen LED tampak seperti lampu yang dipakai dalam sebuah rangkaian elektronika, walaupun sejatinya dia adalah Diode yang berpendar.
Yang harus diperhatikan adalah kaki sebuah LED, dibuat berbeda panjangnya.
Kaki yang panjang menunjukkan kutub positif, sementara yang pendek menunjukkan kutub negatif
3. Resistor
.jpeg)
4. Buzzer
- 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
6. Sensor PIR
Sensor PIR (Passive Infra Red) adalah sensor yang digunakan untuk mendeteksi adanya pancaran sinar infra merah dari suatu object. Sensor PIR bersifat pasif, artinya sensor ini tidak memancarkan sinar infra merah tetapi hanya menerima radiasi sinar infra merah dari luar.
Gambar berikut menunjukkan bagian-bagian dari sensor PIR yang perlu untuk diketahui

- Pengatur Waktu Jeda : Digunakan untuk mengatur lama pulsa high setelah terdeteksi terjadi gerakan dan gerakan telah berahir. *
- Pengatur Sensitivitas : Pengatur tingkat sensitivitas sensor PIR *
- Regulator 3VDC : Penstabil tegangan menjadi 3V DC
- Dioda Pengaman : Mengamankan sensor jika terjadi salah pengkabelan VCC dengan GND
- DC Power : Input tegangan dengan range (3 – 12) VDC (direkekomendasikan menggunakan input 5VDC).
- Output Digital : Output digital sensor
- Ground : Hubungkan dengan ground (GND)
- BISS0001 : IC Sensor PIR
- Pengatur Jumper : Untuk mengatur output dari pin digital.
7. Vcc / Batrey
- Input voltage: ac 100~240v / dc 10~30v
- Output voltage: dc 1~35v
- Max. Input current: dc 14a
- Charging current: 0.1~10a
- Discharging current: 0.1~1.0a
- Balance current: 1.5a/cell max
- Max. Discharging power: 15w
- Max. Charging power: ac 100w / dc 250w
- Jenis batre yg didukung: life, lilon, lipo 1~6s, lihv 1-6s, pb 1-12s, nimh, cd 1-16s
- Ukuran: 126x115x49mm
- Berat: 460gr

Prinsip kerja push button pada dasarnya adalah untuk menghubungkan dan memutuskan aliran listrik. Namun, tombol tekan tidak memiliki kunci dan akan kembali ke posisi semula setelah ditekan.
Ketika tombol tekan ditekan, nilainya menjadi HIGH dan mengalirkan arus listrik. Namun, setelah dilepas, tombol akan bernilai LOW dan memutuskan arus listrik.
Namun, bagaimana tombol tekan bekerja bisa berbeda tergantung dari jenis tombol tersebut, apakah itu NO atau NC.
Oleh karena itu, penting untuk memahami konsep dasar dan spesifikasi dari tombol tekan yang akan digunakan pada setiap proyek.
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Rangkaian Simulasi
Prinsip kerja rangkaian kontrol lampu lorong didasarkan pada pengolahan logika dua buah sensor, yaitu touch sensor dan sensor PIR, yang dikendalikan oleh mikrokontroler STM32F103C8. Pada kondisi awal, ketika rangkaian diberi catu daya, STM32F103C8 akan melakukan inisialisasi pin GPIO, di mana pin yang terhubung ke touch sensor dan PIR diset sebagai input, sedangkan pin LED dan buzzer diset sebagai output. Mikrokontroler kemudian membaca kondisi logika dari kedua sensor secara terus-menerus.
Touch sensor akan menghasilkan logika HIGH ketika disentuh oleh pengguna, sedangkan sensor PIR akan menghasilkan logika HIGH ketika mendeteksi adanya pergerakan manusia di area lorong. STM32F103C8 memproses kedua sinyal input tersebut menggunakan logika AND melalui pemrograman. Artinya, sistem hanya menganggap kondisi valid apabila kedua sensor, yaitu touch sensor dan PIR, sama-sama berada pada kondisi aktif (HIGH) secara bersamaan.
Apabila kedua sensor aktif secara bersamaan, STM32F103C8 akan mengaktifkan output LED dengan pola berkedip. Kedipan LED dihasilkan dengan cara mikrokontroler mengatur pin output LED menjadi HIGH dan LOW secara bergantian dengan selang waktu tertentu menggunakan fungsi delay pada program. Selama kedua sensor tetap aktif, LED akan terus berkedip sebagai indikator bahwa sistem bekerja sesuai kondisi yang diinginkan.
Pada kondisi tersebut, buzzer tidak diaktifkan. Hal ini dikarenakan pada pemrograman STM32F103C8, pin buzzer dipertahankan dalam kondisi LOW sehingga tidak menghasilkan bunyi, meskipun LED sedang berkedip. Jika salah satu sensor tidak aktif atau kembali ke kondisi LOW, maka STM32F103C8 akan segera mematikan LED dan memastikan buzzer tetap dalam keadaan mati. Dengan demikian, sistem hanya menyalakan LED berkedip ketika kedua sensor aktif secara bersamaan, sedangkan buzzer selalu berada dalam kondisi diam.
4. Flowchart dan LIsting Program[Kembali]
Flowchart
Listing Program :
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Final Program - Touch + PIR -> LED Blink
******************************************************************************
* @attention
*
* STM32F103 - STM32CubeIDE
*
******************************************************************************
*/
/* USER CODE END Header */
#include "main.h"
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
GPIO_PinState touch_state = HAL_GPIO_ReadPin(GPIOA, TOUCH_Pin);
GPIO_PinState pir_state = HAL_GPIO_ReadPin(GPIOA, PIR_Pin);
if ((touch_state == GPIO_PIN_SET) && (pir_state == GPIO_PIN_SET))
{
// LED berkedip jika Touch & PIR aktif
HAL_GPIO_TogglePin(GPIOB, BLUE_Pin);
HAL_Delay(300);
}
else
{
// LED mati jika salah satu sensor tidak aktif
HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_RESET);
}
}
/* USER CODE END WHILE */
}
/**
* @brief System Clock Configuration
*/
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;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
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;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
}
/**
* @brief GPIO Initialization
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* PIR & Touch as Input */
GPIO_InitStruct.Pin = PIR_Pin | TOUCH_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* LED & Buzzer as Output */
GPIO_InitStruct.Pin = BLUE_Pin | BUZZER_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB, BLUE_Pin | BUZZER_Pin, GPIO_PIN_RESET);
}
/**
* @brief Error Handler
*/
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
Penjelasan Per Baris
/* USER CODE BEGIN Header */
Bagian komentar header program yang biasanya diisi otomatis oleh STM32CubeIDE.
/** */
Komentar dokumentasi program.
/* @file : main.c */
Menunjukkan bahwa file ini adalah file utama program.
/* @brief : Final Program - Touch + PIR -> LED Blink */
Penjelasan singkat fungsi program, yaitu LED akan berkedip jika sensor Touch dan PIR aktif.
/* STM32F103 - STM32CubeIDE */
Menunjukkan tipe mikrokontroler dan IDE yang digunakan.
/* USER CODE END Header */
Penutup bagian header.
#include "main.h"
Memanggil file header main.h yang berisi definisi pin, library HAL, dan deklarasi fungsi.
void SystemClock_Config(void);
Deklarasi fungsi untuk mengatur konfigurasi clock sistem STM32.
static void MX_GPIO_Init(void);
Deklarasi fungsi untuk menginisialisasi GPIO (input dan output).
int main(void)
Fungsi utama yang pertama kali dijalankan oleh mikrokontroler.
HAL_Init();
Menginisialisasi HAL Library, mereset peripheral, dan mengaktifkan sistem timer.
SystemClock_Config();
Mengatur sumber dan pembagian clock sistem menggunakan oscillator internal.
MX_GPIO_Init();
Mengatur pin GPIO sebagai input dan output sesuai kebutuhan program.
while (1)
Loop tak berhingga, program akan terus berjalan selama mikrokontroler aktif.
GPIO_PinState touch_state = HAL_GPIO_ReadPin(GPIOA, TOUCH_Pin);
Membaca kondisi sensor Touch pada pin GPIOA.
Nilai GPIO_PIN_SET berarti aktif (HIGH), GPIO_PIN_RESET berarti tidak aktif (LOW).
GPIO_PinState pir_state = HAL_GPIO_ReadPin(GPIOA, PIR_Pin);
Membaca kondisi sensor PIR pada pin GPIOA.
if ((touch_state == GPIO_PIN_SET) && (pir_state == GPIO_PIN_SET))
Kondisi logika: program masuk ke IF jika sensor Touch DAN PIR sama-sama aktif.
HAL_GPIO_TogglePin(GPIOB, BLUE_Pin);
Mengubah (toggle) kondisi LED biru pada GPIOB, sehingga LED berkedip.
HAL_Delay(300);
Memberikan delay selama 300 ms untuk mengatur kecepatan kedip LED.
else
Blok ini dijalankan jika salah satu atau kedua sensor tidak aktif.
HAL_GPIO_WritePin(GPIOB, BLUE_Pin, GPIO_PIN_RESET);
Mematikan LED biru jika kondisi IF tidak terpenuhi.
void SystemClock_Config(void)
Fungsi untuk mengatur clock sistem STM32.
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
Struktur untuk konfigurasi oscillator.
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
Struktur untuk konfigurasi clock bus sistem.
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
Menggunakan oscillator internal HSI (High Speed Internal).
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
Mengaktifkan oscillator HSI.
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
Menggunakan nilai kalibrasi default HSI.
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
PLL tidak digunakan.
HAL_RCC_OscConfig(&RCC_OscInitStruct);
Menerapkan konfigurasi oscillator ke sistem.
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_SYSCLK |
RCC_CLOCKTYPE_PCLK1 |
RCC_CLOCKTYPE_PCLK2;
Menentukan jenis clock yang akan dikonfigurasi.
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
Sumber clock sistem berasal dari HSI.
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
Clock AHB tidak dibagi.
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
Clock APB1 tidak dibagi.
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
Clock APB2 tidak dibagi.
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
Menerapkan konfigurasi clock sistem dengan latency flash 0.
static void MX_GPIO_Init(void)
Fungsi untuk mengatur pin GPIO.
GPIO_InitTypeDef GPIO_InitStruct = {0};
Struktur konfigurasi GPIO.
__HAL_RCC_GPIOA_CLK_ENABLE();
Mengaktifkan clock untuk GPIOA.
__HAL_RCC_GPIOB_CLK_ENABLE();
Mengaktifkan clock untuk GPIOB.
GPIO_InitStruct.Pin = PIR_Pin | TOUCH_Pin;
Menentukan pin PIR dan Touch sebagai input.
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
Mengatur pin sebagai input.
GPIO_InitStruct.Pull = GPIO_NOPULL;
Tidak menggunakan pull-up atau pull-down.
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
Menerapkan konfigurasi input ke GPIOA.
GPIO_InitStruct.Pin = BLUE_Pin | BUZZER_Pin;
Menentukan pin LED biru dan buzzer sebagai output.
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
Mengatur pin sebagai output push-pull.
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
Mengatur kecepatan switching output rendah.
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
Menerapkan konfigurasi output ke GPIOB.
HAL_GPIO_WritePin(GPIOB, BLUE_Pin | BUZZER_Pin, GPIO_PIN_RESET);
Memastikan LED dan buzzer dalam kondisi mati saat awal program.
void Error_Handler(void)
Fungsi yang dijalankan jika terjadi kesalahan sistem.
__disable_irq();
Menonaktifkan seluruh interrupt.
while (1)
Program berhenti di loop tak berhingga sebagai indikasi error.
1. Download HTML [disini]
2. Download Rangkaian Proteus [disini]
3. Download Vidio Rangkaian [disini]
4. Download Datasheet Sensor:
5. Download library Komponen:
6. Download datasheet Relay [disini]
7. Download datasheet Motor [disini]
8. Download datasheet Led [disini]
9. Download listing program [disini]
10. Download data sheet [disini]
Video Rangkaian [tekan disini]
Download LA [disini]





.png)
.jpeg)



Tidak ada komentar:
Posting Komentar