Laporan Akhir Percobaan 1 (M1)



1. Prosedur [kembali]

1.     Siapkan alat dan bahan seperti STM32F103C8T6, sensor IR, sensor PIR, jumper, breadboard, resistor, buzzer, dan laptop.

2.     Rangkai komponen sesuai dengan gambar percobaan pada modul.

3.     Buka software STM32CubeIDE, kemudian lakukan konfigurasi pin sesuai rangkaian.

4.     Buka file main.c, lalu copy listing program dari modul dan paste ke dalam main.c.

5.     Simpan program kemudian lakukan build (compile).

6.     Hubungkan board STM32F103C8T6 ke laptop menggunakan kabel USB.

7.     Upload program dengan menekan tombol run/debug pada STM32CubeIDE.

8.     Jalankan sistem dan amati apakah rangkaian bekerja sesuai dengan kondisi yang diinginkan.

9.     Jika belum sesuai, lakukan pengecekan pada rangkaian dan program kemudian perbaiki.

2. Hardware dan Diagram Blok [kembali]

A. Hardware

 

a) STM32F103C8

b) Touch Sensor

 

c) PIR Sensor

 

d) LED

 

e) Buzzer



f) Resistor 1k ohm


g) Adaptor

h) Breadboard

B. Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

Prinsip Kerja:

Program ini membaca sensor PIR (PA0) dan sensor touch (PA1) untuk mengontrol LED (PB0) dan buzzer (PB1). Sensor touch bekerja sebagai toggle, mengubah status system enable saat terjadi perubahan dari LOW ke HIGH, dan buzzer berbunyi singkat sebagai indikator. Saat PIR mendeteksi gerakan (HIGH), LED menyala dan buzzer hanya berbunyi sekali pada deteksi awal. Jika tidak ada gerakan, LED mati saat sistem nonaktif. Namun, jika system enable aktif, LED akan tetap menyala atau masuk mode override tanpa bergantung pada PIR.

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]











Comments

Popular posts from this blog