Tugas Pendahuluan 1 Modul 1


MODUL 1 PERCOBAAN 1 KONDISI 3


1. Prosedur[Kembali]

  1. Membuat project baru di STM32CubeIDE dengan memilih tipe mikrokontroler STM32F103C8 kemudian melakukan konfigurasi pin dengan mengatur PA0 sebagai input untuk sensor PIR, PA1 sebagai input untuk touch sensor, serta PB0 dan PB1 sebagai output untuk LED dan buzzer.
  2. Melakukan generate code menggunakan fitur yang tersedia di STM32CubeIDE, kemudian menambahkan program utama pada file main.c sesuai dengan kondisi percobaan yaitu ketika PIR mendeteksi gerakan selama waktu tertentu kemudian tidak lagi mendeteksi, dan sensor Touch tidak disentuh, LED mati dan Buzzer berbunyi
  3. Melakukan proses build atau kompilasi program untuk menghasilkan file berekstensi .hex yang nantinya akan digunakan pada simulasi di Proteus.
  4. Membuat rangkaian pada Proteus dengan menambahkan komponen STM32F103C8, sensor touch, sensor PIR, LED, buzzer, serta sumber tegangan VCC dan GND, kemudian menghubungkan touch sensor ke pin PA1, sensor PIR ke pin PA0, LED ke pin PB0 melalui resistor, dan buzzer ke pin PB1, serta memastikan semua ground terhubung dengan benar.
  5. Memasukkan file .hex hasil kompilasi ke dalam komponen STM32 pada Proteus melalui pengaturan program file.
  6. Menjalankan simulasi pada Proteus kemudian mengamati kondisi output dimana ketika PIR mendeteksi gerakan selama waktu tertentu kemudian tidak lagi mendeteksi, dan sensor Touch tidak disentuh, maka LED mati dan Buzzer berbunyi

2. Hardware dan Diagram Blok[Kembali]

     1. STM32F103C8

Microcontroller

ARM Cortex-M3

Operating Voltage

3.3 V

Input Voltage (recommended)

5 V 

Input Voltage (limit)

2  3.6 V

Digital I/O Pins

32

PWM Digital I/O Pins

15

Analog Input Pins

10 (dengan resolusi 12-bit ADC)

DC Current per I/O Pin

25 mA

DC Current for 3.3V Pin

150 mA

Flash Memory

64 KB

SRAM

20 KB

EEPROM

Emulasi dalam Flash

Clock Speed

72 MHz


    2. Touch Sensor

    SPESIFIKASI :

  • Konsumsi daya yang rendah
  • Bisa menerima tegangan dari 2 ~ 5.5V DC
  • Dapat menggantikan fungsi saklar tradisional
  • Dilengkapi 4 lobang baut untuk memudahkan pemasangan
  • Tegangan kerja : 2v s/d 5.5v (optimal 3V)
  • Output high VOH : 0.8 VCC (typical)
  • Output low VOL : 0.3 VCC (max)
  • Arus Output Pin Sink (@ VCC 3V, VOL 0.6V) : 8 mA
  • Arus Output pin pull-up (@ VCC=3V, VOH=2.4V) : 4 mA
  • Waktu respon (low power mode): max 220 ms
  • Waktu respon (touch mode): max 60 ms
  • Ukuran: 24 mm x 24 mm x 7.2 mm

    3. PIR Sensor

    4. LED



    5. Buzzer

    6. Resistor

7. Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]



Rangkaian Simulasi
Prinsip Kerja

  • Sistem berpusat pada mikrokontroler STM32F103C8 sebagai pengendali utama
  • Mikrokontroler memproses input dari:
    • Sensor PIR (pendeteksi gerakan)
    • Sensor sentuh (Touch Sensor)
  • Logika kerja sistem:
    • Sensor PIR sempat mendeteksi gerakan lalu berhenti mendeteksi
    • Secara bersamaan, sensor sentuh dalam kondisi tidak disentuh
  • Jika kondisi tersebut terpenuhi, maka:
    • LED (D1) dimatikan
    • Buzzer (BUZ1) diaktifkan sebagai peringatan suara
  • Fungsi komponen pendukung:
    • Resistor R1 → menjaga kestabilan sinyal input
    • Resistor R2 → membatasi arus ke LED agar aman
  • 4. Flowchart dan Listing Program[Kembali]



    Flowchart Rangkaian
    Listing Program
    Listing Program :

    #include "stm32f1xx_hal.h"


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

    uint32_t pir_last_time = 0;

    uint8_t pir_detected = 0;


    #define PIR_TIMEOUT 3000 // 3 detik


    /* ================== PROTOTYPE ================== */

    void SystemClock_Config(void);

    static void MX_GPIO_Init(void);

    void Error_Handler(void);


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

    int main(void)

    {

    HAL_Init();

    SystemClock_Config();

    MX_GPIO_Init();


    while (1)

    {

    uint8_t pir = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);

    uint8_t touch = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);


    /* ====== SAAT PIR MENDETEKSI ====== */

    if (pir == GPIO_PIN_SET)

    {

    pir_detected = 1;

    pir_last_time = HAL_GetTick();


    // LED ON

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);


    // Buzzer OFF

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

    }


    /* ====== SAAT PIR TIDAK MENDETEKSI ====== */

    else

    {

    // Jika sebelumnya ada gerakan

    if (pir_detected == 1)

    {

    // Cek apakah sudah lewat waktu tertentu

    if ((HAL_GetTick() - pir_last_time) > PIR_TIMEOUT)

    {

    // Jika touch TIDAK disentuh

    if (touch == GPIO_PIN_RESET)

    {

    // LED OFF

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);


    // Buzzer ON

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

    }


    pir_detected = 0; // reset status

    }

    }

    }

    }

    }


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

    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 ================== */

    static void MX_GPIO_Init(void)

    {

    GPIO_InitTypeDef GPIO_InitStruct = {0};


    __HAL_RCC_GPIOA_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();


    /* ===== INPUT: PIR (PA0) & TOUCH (PA1) ===== */

    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);


    /* ===== OUTPUT: LED (PB0) & BUZZER (PB1) ===== */

    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_RESET);

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

    }


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

    void Error_Handler(void)

    {

    __disable_irq();

    while (1)

    {

    }

    }

    5. Video Demo[Kembali]

    6. Kondisi[Kembali]

    Percobaan 1 Kontrol Lampu Lorong

    Kondisi 3 : 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

    8. Download File[Kembali]

    Rangkaian dan Program Proteus (Klik Disini)

    Video Simulasi (Klik Disini)

    HTML (Klik Disini)

    Tidak ada komentar:

    Posting Komentar

    Habiburrahman 2310952014

    BAHAN UNTUK PERKULIAHAN TEKNIK ELEKTRO   OLEH :  Habiburrahman 2310952014