LAPORAN AKHIR 1

a. Prosedur

  • Siapkan seluruh komponen yang dibutuhkan seperti STM32F103C8 (Bluepill), ST-LINK, IR transmitter, IR receiver, touch sensor, buzzer, LED, resistor 220Ω, serta kabel jumper.
  • Hubungkan pin VCC dan GND dari semua sensor (IR transmitter, IR receiver, dan touch sensor) ke sumber tegangan dan ground pada board STM32.
  • Sambungkan output dari IR receiver ke salah satu pin input digital pada STM32, yang berfungsi untuk membaca apakah sinar inframerah terputus atau tidak.
  • Hubungkan touch sensor ke pin input digital STM32 sebagai saklar untuk mengaktifkan atau menonaktifkan sistem.
  • Pasang LED dengan menambahkan resistor 220Ω secara seri, kemudian hubungkan ke salah satu pin output STM32 dan ke ground.
  • Sambungkan buzzer ke pin output STM32 dan ground sebagai indikator suara.
  • 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, lakukan pengujian dengan mencoba mengaktifkan touch sensor dan memutus sinyal IR untuk memastikan sistem bekerja dengan baik.
  • b. Hardware dan Diagram Blok

    A. Hardware
    1. STM32F103C8


    2. Touch Sensor


    3. PIR Sensor

    4. LED

    5. Buzzer

    6. Resistor

    B. Diagram Blok

    .

    c. Rangkaian Simulasi dan Prinsip Kerja


    Sistem ini menggunakan sensor PIR untuk mendeteksi gerakan, sensor sentuh sebagai kontrol manual, dan mikrokontroler STM32 sebagai pengendali utama. Saat PIR mendeteksi gerakan, keluarannya menjadi HIGH sehingga mikrokontroler menyalakan LED. Sistem juga menerapkan delay agar lampu tetap menyala dalam waktu tertentu meskipun tidak ada gerakan lanjutan.
    Jika selama waktu tunda PIR terus mendeteksi gerakan, maka timer akan terus di-reset sehingga lampu tetap menyala. Karena sensor touch tidak aktif, seluruh sistem bergantung pada sinyal dari PIR.
    Akibatnya, LED hanya akan mati jika tidak ada gerakan sama sekali hingga waktu delay habis. Buzzer dapat ditambahkan sebagai indikator suara saat sistem aktif atau saat gerakan pertama terdeteksi untuk meningkatkan keamanan.

    d. Flowchart dan Listing Program

    Listing Program:

    #include "main.h"

    uint8_t system_enable = 1;

    uint8_t touch_last = 0;

    void SystemClock_Config(void);

    static void MX_GPIO_Init(void);


    int main(void)

    {

    HAL_Init();

    SystemClock_Config();

    MX_GPIO_Init();


    while (1)

    {

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

    }

    touch_last = touch_now;


    if (system_enable)

    {

    if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)

    {

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

    }

    else

    {

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

    }

    }

    else

    {

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

    }

    }

    }


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

    }

    }


    static void MX_GPIO_Init(void)

    {

    GPIO_InitTypeDef GPIO_InitStruct = {0};


    __HAL_RCC_GPIOD_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();


    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);


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


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

    }


    void Error_Handler(void)

    {

    __disable_irq();

    while (1)

    {

    }

    }


    #ifdef USE_FULL_ASSERT

    void assert_failed(uint8_t *file, uint32_t line)

    {

    }

    #endif

    g. Download File

    datasheet Sensor Pir klik disini
    datasheet Sensor Touch klik disini
    datasheet Stm32f103C8 [klik disini]
    Datasheet LED klik disini

     

    Komentar

    Postingan populer dari blog ini

    kuliah