Tugas Pendahuluan Modul 1 Percobaan 1 kondisi 3
TP M1 Percobaan 1 kondisi 3
1. Prosedur (kembali)
- Jalankan aplikasi Proteus ISIS → New Project → beri nama project.
Klik tombol P (Pick Devices) lalu cari dan tambahkan:
- STM32 (misal: STM32F103C8 / sesuai gambar)
- PIR Sensor
- Touch Sensor
- LED
- Resistor (220Ω dan 10kΩ)
- Buzzer
- Power (+5V / +3.3V) dan GND
-
Letakkan semua komponen seperti pada gambar:
- PIR di tengah
- Touch sensor di kiri
- STM32 di kanan
- LED dan buzzer di sisi output
-
PIR:
- VCC → +5V
- GND → GND
- OUT → pin input STM32 (misal PA0)
-
Touch Sensor:
- VCC → +5V
- GND → GND
- OUT → pin input STM32 (misal PA1)
-
LED:
- Anoda → resistor 220Ω → pin STM32 (misal PB0)
- Katoda → GND
-
Buzzer:
- Positif → pin STM32 (misal PB1)
- Negatif → GND
- Tambahkan resistor pull-up (10kΩ) jika diperlukan (misal pada NRST)
- Pastikan semua GND tersambung
Memasukkan File HEX ke Proteus
- Kembali ke Proteus
- Klik double klik STM32
-
Pada bagian:
-
Program File → pilih file
.hexhasil build
-
Program File → pilih file
- Klik OK
- Klik tombol Run (Play)
-
Uji kondisi:
- Saat PIR aktif → sistem mendeteksi gerakan
-
Setelah tidak ada gerakan + tidak disentuh:
- LED mati
- Buzzer bunyi
2. Hardware (kembali)
Pir Sensor
Touch Sensor
STM32F103C8
Push button
Resistor
Buzzer
LED
Logic State
3. Rangkaian Simulasi dan Prinsip Kerja (kembali)
Prinsip kerja rangkaian pada gambar tersebut berfokus pada pengolahan sinyal input dari sensor (PIR dan touch) oleh mikrokontroler, kemudian menghasilkan output berupa LED dan buzzer sesuai kondisi yang ditentukan.
Pada bagian input, terdapat dua sensor yaitu PIR (Passive Infrared) dan touch sensor. Sensor PIR berfungsi untuk mendeteksi adanya gerakan berdasarkan perubahan radiasi inframerah di sekitarnya. Ketika ada gerakan, PIR akan memberikan logika HIGH (1) ke pin input mikrokontroler. Setelah beberapa waktu tidak ada gerakan, sinyal akan kembali LOW (0). Sementara itu, touch sensor akan memberikan sinyal HIGH ketika disentuh dan LOW ketika tidak disentuh. Kedua sinyal ini masuk ke mikrokontroler (STM32) sebagai bahan pengambilan keputusan.
Pada bagian proses, mikrokontroler diprogram untuk memantau kondisi kedua input tersebut. Sesuai dengan soal, kondisi yang diinginkan adalah: setelah PIR mendeteksi gerakan selama waktu tertentu lalu berhenti (tidak ada deteksi lagi), dan touch sensor dalam keadaan tidak disentuh, maka mikrokontroler akan mengaktifkan buzzer dan mematikan LED. Logika ini biasanya melibatkan timer internal untuk menghitung durasi deteksi PIR, sehingga sistem tidak langsung bereaksi saat sinyal berubah, tetapi menunggu kondisi stabil sesuai waktu yang ditentukan.
Pada bagian output, LED dan buzzer dikendalikan oleh pin output mikrokontroler. LED terhubung melalui resistor sebagai pembatas arus, sehingga akan menyala atau mati sesuai logika output. Buzzer akan berbunyi ketika mendapatkan sinyal HIGH dari mikrokontroler. Dalam kondisi akhir yang diminta (tidak ada gerakan dan tidak ada sentuhan), mikrokontroler memberikan logika LOW ke LED (LED mati) dan logika HIGH ke buzzer (buzzer aktif).
Secara keseluruhan, rangkaian ini merupakan contoh sistem General Input & Output, di mana mikrokontroler membaca kondisi lingkungan melalui sensor (input), memprosesnya berdasarkan program, lalu mengendalikan perangkat keluaran (output) sesuai logika yang telah dirancang.
4. Flowchart dan Listing Program (kembali)
Listing Program:
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
*/
/* USER CODE END Header */
#include "main.h"
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
uint8_t pir_prev = 0;
uint32_t timer_pir = 0;
/* USER CODE END PV */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
while (1)
{
/* USER CODE BEGIN WHILE */
uint8_t pir = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
uint8_t touch = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
// Saat PIR mendeteksi gerakan
if (pir == 1)
{
pir_prev = 1;
timer_pir = HAL_GetTick();
// LED ON, Buzzer OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}
// Jika sebelumnya ada gerakan, sekarang tidak ada
if (pir_prev == 1 && pir == 0)
{
// Tunggu 5 detik setelah tidak ada gerakan
if (HAL_GetTick() - timer_pir > 5000)
{
if (touch == 0) // Tidak disentuh
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); // LED OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // Buzzer ON
}
else // Jika disentuh
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, 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();
// Output awal OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);
// PA0 = PIR, PA1 = Touch (INPUT)
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);
// PB0 = Buzzer, PB1 = LED (OUTPUT)
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
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);
}
/**
* @brief Error Handler
*/
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
5. Video Demo (kembali)
6. Kondisi (kembali)
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)
[MENUJU AWAL]
Komentar
Posting Komentar