TP 1 MODUL 1 MIKRO



1. Prosedur [kembali]

  1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan
  2. Buat program untuk mikrokontroler STM32F103C8 di software STM32 CubeIDE.
  3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
  4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
  5. Selesai.

2. Hardware dan Diagram Blok [kembali]

  • Hardware :

    a) Mikrokontroler STM32F103C8



    b) Touch Sensor



    c) PIR Sensor




    d) LED




    e) Buzzer




    f) Resistor



    Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]


Prinsip Kerja: Rangkaian ini bekerja dengan menggabungkan sensor touch dan sensor PIR sebagai input ke mikrokontroler STM32. Sensor touch berfungsi sebagai saklar (enable/disable sistem). Saat sensor touch disentuh, nilai logika berubah dan mikrokontroler akan melakukan toggle pada variabel system_enable, sehingga sistem bisa aktif atau nonaktif. Sementara itu, sensor PIR digunakan untuk mendeteksi adanya gerakan (biasanya dari manusia) yang akan menghasilkan sinyal HIGH ketika ada pergerakan di sekitarnya.

Ketika sistem sudah aktif (system_enable = 1) dan PIR mendeteksi gerakan, mikrokontroler akan mengaktifkan LED dan buzzer secara berkedip (ON-OFF dengan delay 100 ms). Kedipan ini menunjukkan adanya deteksi gerakan dalam kondisi sistem aktif. Jika salah satu kondisi tidak terpenuhi (sistem tidak aktif atau tidak ada gerakan), maka LED dan buzzer akan tetap mati. Jadi prinsip utamanya adalah kombinasi logika: Touch sebagai pengaktif sistem, dan PIR sebagai pemicu output (LED & buzzer).

4. Flowchart dan Listing Program [kembali]

 
Flowchart

Listing Program:

#include "stm32f1xx_hal.h" /* === Variabel Global === */ uint8_t system_enable = 0; uint8_t touch_last = 0; /* === Prototype === */ void SystemClock_Config(void); static void MX_GPIO_Init(void); void Error_Handler(void); /* === MAIN PROGRAM === */ int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { /* Baca input */ uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); /* === Toggle Touch === */ if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET) { system_enable = !system_enable; HAL_Delay(100); // debounce } touch_last = touch_now; /* === KONDISI 6 === */ if (system_enable && pir_now == GPIO_PIN_SET) { /* LED + BUZZER berkedip */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // LED ON HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // BUZZER ON HAL_Delay(100); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // LED OFF HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); // BUZZER OFF HAL_Delay(100); } else { /* Mati jika kondisi tidak terpenuhi */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, 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) Error_Handler(); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) Error_Handler(); } /* === GPIO CONFIG === */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /* PA0 & PA1 = 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 & PB1 = OUTPUT */ GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Default OFF */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET); } /* === ERROR HANDLER === */ void Error_Handler(void) { __disable_irq(); while (1) { } }


5. Video Demo [kembali]


6. Kondisi [kembali]

Percobaan 1 Kondisi 6
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi sensor Touch aktif dan PIR mendeteksi gerakan serta LED hidup berkedip 

7. Video Simulasi [kembali]



8. Download File [kembali]

Download File Rangkaian [Download]
Download Video Simulasi [Download]
Datasheet Mikrokontroler STM32F103C8 [Download]
Datasheet Sensor PIR [Download]
Datasheet Sensor Touch [Download]
Datasheet LED [Download]




Komentar

Postingan populer dari blog ini

2.12 Voltage-Multiplier Circuits

Tugas Besar - Pengamanan ATM

Modul 1- Potensiometer & Tahanan Geser dan Jembatan Wheatstone