M1-Laporan Akhir 1



1. Prosedur [kembali]

  • Siapkan seluruh komponen yang dibutuhkan seperti STM32F103C8 (Bluepill), ST-LINK, PIR sensor, touch sensor, buzzer, LED, resistor 220Ω, serta kabel jumper.
  • Rangkai komponen sesuai dengan gambar yang ada di modul
  • Pastikan semua koneksi sudah sesuai, tidak ada kabel yang longgar atau terbalik.
  • Hubungkan board STM32 ke komputer menggunakan ST-LINK, lalu lakukan pemrograman sesuai dengan flowchart yang telah dibuat.
  • Setelah program berhasil di-upload, silahkan run untuk memastikan logika dan rangkaian sudah benar.
  • 2. Hardware dan Diagram Blok[kembali]

    a. STM32F103C8


    b. Touch Sensor


    c. PIR Sensor

    d. LED

    e. Buzzer

    f. Resistor


    Diagram Blok

    3. Rangkaian Simulasi dan Prinsip Kerja [kembali]



    Sistem ini terdiri dari sensor PIR sebagai pendeteksi gerakan, sensor touch sebagai input manual, mikrokontroler STM32 sebagai pengendali utama, serta LED yang berfungsi sebagai lampu lorong dan buzzer sebagai indikator tambahan. Ketika sensor PIR mendeteksi adanya gerakan, output-nya akan berubah menjadi HIGH (ditandai warna merah), kemudian sinyal tersebut dibaca oleh mikrokontroler untuk menyalakan LED. Bersamaan dengan itu, mikrokontroler juga mengaktifkan mekanisme waktu tunda (delay timer) yang berfungsi untuk mempertahankan kondisi lampu tetap menyala selama beberapa waktu meskipun tidak ada gerakan lanjutan.

    Pada kondisi yang diberikan, yaitu ketika sensor PIR mendeteksi gerakan secara berulang sebelum waktu tunda habis dan sensor touch tidak disentuh, maka setiap kali PIR mendeteksi gerakan (output HIGH), mikrokontroler akan terus mengulang atau mereset waktu tunda ke awal. Hal ini menyebabkan proses perhitungan waktu tidak pernah mencapai batas akhir untuk mematikan lampu. Karena sensor touch berada pada kondisi LOW (tidak disentuh), maka tidak ada pengaruh tambahan terhadap sistem, sehingga seluruh kendali hanya bergantung pada sensor PIR. Akibatnya, LED akan tetap berada dalam kondisi menyala karena sistem selalu menganggap masih ada aktivitas atau pergerakan di area tersebut. Dengan demikian, prinsip kerja rangkaian ini memastikan bahwa lampu lorong tetap aktif selama masih terdeteksi adanya gerakan, dan hanya akan mati jika tidak ada gerakan sama sekali hingga waktu tunda benar-benar habis.

    4. Flowchart dan Listing Program [kembali]

    Flowchart



    Listing Program 

    #include "stm32f1xx_hal.h"

    uint8_t system_enable = 0;

    uint8_t touch_last = 0;

    uint8_t pir_first_trigger = 1;

    void SystemClock_Config(void);

    static void MX_GPIO_Init(void);

    void Error_Handler(void);

    int main(void)

    {

    HAL_Init();

    SystemClock_Config();

    MX_GPIO_Init();

    while (1)

    {

    uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);

    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;

    if (system_enable)

    {

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

    HAL_Delay(100);

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

    }

    HAL_Delay(200);

    }

    touch_last = touch_now;

    if (pir_now == GPIO_PIN_SET)

    {

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

    if (pir_first_trigger)

    {

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

    HAL_Delay(100);

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

    pir_first_trigger = 0;

    }

    }

    else

    {

    pir_first_trigger = 1;


    if(!system_enable)

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

    }

    if(system_enable)

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

    }

    }

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

    }

    static void MX_GPIO_Init(void)

    {

    GPIO_InitTypeDef GPIO_InitStruct = {0};

    __HAL_RCC_GPIOA_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();

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

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

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);

    }


    void Error_Handler(void)

    {

    __disable_irq();

    while(1)

    {

    }

    }

     

    5. Video Demo [kembali]


    6. Analisa [kembali]


    7. Download File [kembali]
















    Komentar

    Postingan populer dari blog ini

    Detektor non-inverting dengan Vref = 0

    2.2 Load-Line Analysis

    4.19 Practical Applications