Rangkaian percobaan 1 Kondisi 10
Tahap Persiapan
Sebelum simulasi dijalankan, mikrokontroler STM32F103C8 (U1) harus terlebih dahulu diisi dengan program (firmware). Caranya adalah dengan melakukan klik dua kali pada komponen mikrokontroler, kemudian pada bagian Program File masukkan file hasil kompilasi dengan ekstensi .hex atau .elf.
Setelah program dimasukkan, jalankan simulasi dengan menekan tombol Play yang ditandai dengan ikon panah hijau pada bagian kiri bawah antarmuka Proteus.
Tahap Pengujian Kondisi 7
Untuk memperoleh kondisi di mana sensor PIR mendeteksi gerakan sementara sensor Touch tidak mendeteksi sentuhan, digunakan komponen Logic State yang terhubung ke pin TestPin masing-masing sensor.
Pengaturan dilakukan sebagai berikut:
-
Sensor Touch (tidak ada sentuhan):
Temukan Logic State yang terhubung ke sensor TOUCH1, kemudian klik hingga menunjukkan nilai 0 (ditandai lingkaran berwarna biru). Hal ini menunjukkan bahwa tidak terjadi sentuhan. -
Sensor PIR (terdeteksi gerakan):
Temukan Logic State yang terhubung ke sensor PIR1, lalu klik hingga bernilai 1 (ditandai lingkaran berwarna merah). Kondisi ini menandakan adanya gerakan yang terdeteksi.
Observasi Hasil
Setelah kedua input diatur dengan kondisi Touch = 0 dan PIR = 1, lakukan pengamatan pada buzzer (BUZ1). Berdasarkan instruksi pada rangkaian, buzzer seharusnya aktif. Indikasinya dapat berupa perubahan warna pada titik logika menjadi merah atau munculnya suara apabila fitur audio pada simulator diaktifkan.
Tahap Akhir
Setelah proses pengamatan selesai, hentikan simulasi dengan menekan tombol Stop (ikon kotak biru di bagian kiri bawah) sebelum melakukan perubahan rangkaian atau kompilasi ulang program.
2. Hardware dan Diagram Blok [Kembali]
Daftar Hardware/Komponen Utama:
Mikrokontroler: Modul STM32F103C8 (sebagai otak/pusat pemrosesan data).
Sensor Input 1: Modul Sensor PIR (mendeteksi adanya gerakan).
Sensor Input 2: Modul Sensor Touch / Sentuh (mendeteksi adanya sentuhan fisik).
Aktuator/Output: Buzzer (sebagai indikator suara) dan LED (sebagai indikator cahaya tambahan).
Komponen Pendukung: Resistor, Push Button, dan Logic State (khusus untuk input simulasi Proteus)
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Fokus utama pada skenario ini adalah kondisi ketika sensor PIR mendeteksi adanya gerakan, kemudian tidak terdapat gerakan lanjutan dalam selang waktu tertentu. Dalam keadaan tersebut, LED akan tetap menyala selama durasi delay yang telah ditentukan, kemudian akan mati secara otomatis. Sementara itu, buzzer hanya aktif pada saat awal terjadinya deteksi gerakan.
Jika dilihat dari indikator logic probe (titik merah/biru pada jalur rangkaian), alur kerja sistem dapat dijelaskan sebagai berikut:
Pembacaan Sensor PIR:
Sensor PIR mendeteksi adanya pergerakan dan mengirimkan sinyal HIGH (logika 1) ke pin input mikrokontroler. Kondisi ini menandakan bahwa terdapat objek yang terdeteksi.
Tidak Ada Gerakan Lanjutan:
Setelah deteksi awal, apabila tidak ada perubahan sinyal (tidak ada gerakan tambahan), maka sistem menganggap kondisi tetap stabil tanpa pemicu baru.
Pemrosesan Logika (Mikrokontroler):
Mikrokontroler membaca sinyal dari sensor PIR dan mengaktifkan logika berbasis waktu (timing/delay). Saat sinyal pertama kali HIGH terdeteksi, sistem memulai penghitung waktu.
Aktuasi Output:
- LED akan menyala ketika deteksi awal terjadi dan tetap aktif selama durasi delay yang telah diprogram. Setelah waktu tersebut habis, LED akan mati secara otomatis.
- Buzzer hanya akan menyala sesaat pada saat pertama kali gerakan terdeteksi, kemudian tidak aktif lagi meskipun LED masih menyala selama periode delay.
4. Flowchart dan Listing Program [Kembali]
#include "main.h"
/* Private variables ---------------------------------------------------------*/
uint8_t system_enable = 1;
uint8_t touch_last = 0;
uint8_t pir_last = 0;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
// =========================
// 1. TOGGLE SYSTEM (PA1)
// =========================
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
system_enable = !system_enable;
HAL_Delay(200); // debounce
}
touch_last = touch_now;
// =========================
// 2. JIKA SYSTEM AKTIF
// =========================
if (system_enable)
{
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
// Rising edge PIR (deteksi awal gerakan)
if (pir_now == GPIO_PIN_SET && pir_last == GPIO_PIN_RESET)
{
// LED ON
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
// Buzzer ON 500 ms
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(500);
// Buzzer OFF 500 ms
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_Delay(500);
// LED OFF
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}
pir_last = pir_now;
}
else
{
// =========================
// 3. SYSTEM OFF → SEMUA MATI
// =========================
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
}
/**
* @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;
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();
}
}
/**
* @brief GPIO Initialization Function
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// Default output LOW
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_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// PB0 (LED) & PB1 (Buzzer) → 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)
{
}
}
Kondisi 10
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi ketika sensor PIR mendeteksi gerakan kemudian tidak ada gerakan lanjutan selama waktu tertentu, maka LED tetap menyala selama delay yang ditentukan dan kemudian mati secara otomatis, sedangkan buzzer hanya berbunyi saat awal deteksi.
Komentar
Posting Komentar