LA M1 PERCOBAAN 2 KONDISI 6

 



1. Prosedur [Kembali]

1. Buka software proteus lalu rangkai komponen sesuai dengan gambar yang ada di modul

2. Buka software STM32CubeIDE lalu lakukan konfigurasi pin pada STM untuk menentukan GPIO input dan GPIO output

3. Masukan Program ke dalam software STM32CubeIDE lalu build untuk mendapatkan file .hex

4. Masukan file .hex ke dalam file library STM32F103C8 pada proteus

5. Simulasikan rangkaian

2. Hardware [Kembali]

1. STM32F103C8


2. Touch Sensor


3. PIR Sensor


4. Resistor


5. Buzzer



6. LED 

7. Push Button
  • Diagram Blog


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]


  • Ketika Sistem pada Mode Otomatis dan sensor PIR mendeteksi gerakan, maka LED Merah ON dan Buzzer ON (sesaat pada deteksi pertama).

  • Ketika Sistem pada Mode Otomatis dan sensor PIR tidak mendeteksi gerakan, maka LED Merah OFF dan Buzzer OFF.

  • Ketika Sistem pada Mode Manual (Touch sensor diaktifkan) dan sensor PIR mendeteksi gerakan atau tidak, maka LED Merah ON (terus-menerus) dan Buzzer OFF.


4. Flowchart [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();

    // Input PA0 & 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 PB0 & 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);

    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]

Rangkaian Simulasi [Klik]

Video Demo [Klik]

Analisa dan Kesimpulan [Klik]


Kembali ke Halaman Atas

Komentar

Postingan populer dari blog ini