TUGAS PENDAHULUAN 1
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)
- 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)
- 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]
Hardware
STM32F103C8 |
| Touch Sensor |
PIR Sensor |
LED |
Buzzer LED |
Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Rangkaian Simulasi
Prinsip Kerja
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
#include "main.h"
/* Private variables */
uint8_t touch_state = 0;
uint8_t pir_state = 0;
/* Function prototypes */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* MAIN PROGRAM */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
// Baca sensor
touch_state = HAL_GPIO_ReadPin(GPIOA, TOUCH_Pin);
pir_state = HAL_GPIO_ReadPin(GPIOA, PIR_Pin);
// Jika TOUCH aktif dan PIR mendeteksi gerakan
if ((touch_state == GPIO_PIN_SET) && (pir_state == GPIO_PIN_SET))
{
// LED & buzzer ON
HAL_GPIO_WritePin(GPIOB, LED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_SET);
HAL_Delay(300);
// LED & buzzer OFF
HAL_GPIO_WritePin(GPIOB, LED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET);
HAL_Delay(300);
}
else
{
// Jika kondisi tidak terpenuhi → mati
HAL_GPIO_WritePin(GPIOB, LED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET);
}
}
}
/* CLOCK CONFIG */
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)
{
while(1);
}
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)
{
while(1);
}
}
/* GPIO INIT */
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// Set awal mati
HAL_GPIO_WritePin(GPIOB, LED_Pin | BUZZER_Pin, GPIO_PIN_RESET);
// INPUT: PIR & TOUCH
GPIO_InitStruct.Pin = PIR_Pin | TOUCH_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// OUTPUT: LED & BUZZER
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);
}
/* ERROR HANDLER */
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi sensor Touch aktif dan PIR mendeteksi gerakan serta LED hidup berkedip
- Download File Zip disini
- Download File Rangkaian Proteus disini
- Download Listing Program disini
- Link Vidio Simulasi disini
- Download Datasheet PIR Sensor disini
- Download Datasheet Touch Sensor disini
- Download Datasheet STM32F103C8 disini
- Download Datasheet LED disini
Komentar
Posting Komentar