Minggu, 19 April 2026

Percobaan 1



 Kontrol Lampu Lorong 


a. Prosedur [Kembali]

1. Buka software proteus lalu rangkai komponen sesuai dengan gambar yang ada di modul

2. Buka software STM32CubeIDE lalu lakukan konfigurasi pin pada STM untuk menentukan GPIO input dan GPIO output

3. Masukan Program ke dalam software STM32CubeIDE lalu build untuk mendapatkan file .hex

4. Masukan file .hex ke dalam file library STM32F103C8 pada proteus

5. Simulasikan rangkaian

b. Hardware dan Diagram Blok [Kembali]

  • Hardwere
1. STM32F103C8





2. Touch Sensor



3. PIR Sensor



4. LED



5. Buzzer



6. Resistor 


  • Diagram Blog


c. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

  • Rangkaian Simulasi


  • Prinsip Kerja

Pada rangkaian tersebut, sensor PIR berfungsi sebagai pendeteksi gerakan, sedangkan sensor touch digunakan sebagai input tambahan untuk menentukan kondisi sistem. Kedua sensor ini memberikan sinyal input ke mikrokontroler (STM32), yang kemudian memprosesnya untuk mengendalikan LED sebagai output.

Saat sistem aktif, mikrokontroler akan terus membaca kondisi dari sensor PIR dan sensor touch secara berulang. Ketika sensor PIR mendeteksi adanya gerakan, sensor ini akan mengirimkan sinyal logika HIGH ke mikrokontroler. Pada saat yang sama, jika sensor touch tidak disentuh, maka sensor touch berada pada kondisi logika LOW. Kombinasi kondisi ini memenuhi syarat yang telah ditentukan dalam sistem, yaitu PIR aktif dan touch tidak aktif.

Berdasarkan kondisi tersebut, mikrokontroler akan memberikan perintah untuk menyalakan LED. LED akan tetap menyala selama kondisi PIR terus mendeteksi gerakan dan sensor touch tetap tidak disentuh. Sebaliknya, apabila sensor PIR tidak mendeteksi gerakan atau sensor touch disentuh (berubah menjadi HIGH), maka kondisi tidak lagi memenuhi syarat, sehingga mikrokontroler akan mematikan LED.

Dengan demikian, dapat disimpulkan bahwa LED hanya akan menyala pada saat terdapat gerakan yang terdeteksi oleh PIR dan tidak ada interaksi pada sensor touch, sehingga sistem bekerja berdasarkan kombinasi logika kedua sensor tersebut.



d. Flowchart dan Listing Program [Kembali]

  • Flowchart



  • Listing Program

#include "stm32f1xx_hal.h" // Library utama HAL untuk STM32F1


/* ================= VARIABEL ================= */


// Variabel untuk menyimpan waktu terakhir PIR aktif

uint32_t pir_timer;



// Deklarasi fungsi

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

void Error_Handler(void);


/* ================= MAIN ================= */

int main(void)

{

HAL_Init(); // Inisialisasi HAL (hardware abstraction layer)

SystemClock_Config(); // Konfigurasi clock sistem

MX_GPIO_Init(); // Inisialisasi GPIO (input/output)


// Supaya LED tidak langsung nyala saat awal program

pir_timer = HAL_GetTick(); // Ambil waktu awal (ms sejak start)


while (1)

{

uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2);

uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);


// Jika PIR HIGH dan Touch LOW

if ((pir_now == GPIO_PIN_SET) && (touch_now == GPIO_PIN_RESET))

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // LED ON

}

else

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // LED OFF

}

}

}


/* ================= CLOCK ================= */

void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct = {0}; // Struktur konfigurasi oscillator

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // Struktur konfigurasi clock


// Menggunakan HSI (internal clock)

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

RCC_OscInitStruct.HSIState = RCC_HSI_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Tidak pakai PLL


// Terapkan konfigurasi oscillator

if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

Error_Handler(); // Jika gagal, masuk error


// Konfigurasi jenis clock

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |

RCC_CLOCKTYPE_SYSCLK |

RCC_CLOCKTYPE_PCLK1;


// Sumber clock sistem dari HSI

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;


// Pembagi clock

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;


// Terapkan konfigurasi clock

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}; // Struktur konfigurasi GPIO


// Aktifkan clock untuk GPIOA dan GPIOB

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


/* INPUT: PA1 (Touch), PA2 (PIR) */

GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2; // Pin PA1 & PA2

GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // Mode input

GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Pull-down resistor

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // Terapkan ke GPIOA


/* OUTPUT: PB0 (LED), PB1 (Buzzer) */

GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; // Pin PB0 & PB1

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Output push-pull

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Kecepatan rendah

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // Terapkan ke GPIOB


// Set kondisi awal LED dan buzzer mati

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);

}


/* ================= ERROR ================= */

void Error_Handler(void)

{

__disable_irq(); // Nonaktifkan semua interrupt

while(1) {} // Loop tak hingga (program berhenti di sini)

}


#ifdef USE_FULL_ASSERT

void assert_failed(uint8_t *file, uint32_t line)

{

// Fungsi debug jika terjadi error parameter

}

#endif

e. Video Demo [Kembali]


f. Kondisi [Kembali]

Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi ketika PIR mendeteksi gerakan dan sensor Touch tidak mendeteksi sentuhan, maka LED menyala

g. Video Simulasi [Kembali]



h. Download File [Kembali]

File TP [Klik disini]

Vidieo Simulasi [Klik disini]



Kembali ke Halaman Atas

 

 

0 comments:

Posting Komentar