Modul 1 Percobaan 3

Modul 1 Percobaan 3

a. Prosedur

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

b. Hardware dan Diagram Blok

  • 1. STM32F103C8

        


    2. Touch Sensor


    3. Infrared Sensor

    4. LED



    5. Buzzer



    6. Resistor

    7. Breadboard


    Diagram Blok



c. Rangkaian Simulasi dan Prinsip Kerja

  • Rangkaian Simulasi

    Prinsip Kerja

    1. Tahap Persiapan (Inisialisasi)

    Saat sistem pertama kali dijalankan, mikrokontroler melakukan inisialisasi:

    • Menentukan pin input:
      • PA0 sebagai sensor infrared (pendeteksi objek/pintu)
      • PA1 sebagai sensor touch (pembuka pintu manual)
    • Menentukan pin output:
      • PB0 sebagai LED indikator pintu
      • PB1 sebagai buzzer

    Selain itu:

    • Sistem awal dalam kondisi aktif
    • Semua output dalam kondisi mati (pintu tertutup)

    Tahap ini memastikan sistem siap digunakan.

     2. Tahap Monitoring Sistem (Loop Utama)

    Setelah inisialisasi selesai, sistem masuk ke loop utama (berjalan terus-menerus).

    Di tahap ini, mikrokontroler akan:

    • Membaca sensor infrared (PA0)
    • Membaca sensor touch (PA1)
    • Menentukan kondisi pintu berdasarkan kedua input

     3. Tahap Deteksi Infrared (Akses Otomatis)

    Sistem mengecek sensor infrared (PA0).

    Jika YA (infrared mendeteksi objek):

    • Pintu dianggap terbuka otomatis
    • LED (PB0) = ON
    • Buzzer (PB1) = ON (sebagai indikator pintu terbuka)

    Jika TIDAK:

    • Sistem lanjut ke pengecekan touch

     4. Tahap Kontrol Manual (Touch)

    Sistem mengecek sensor touch (PA1).

    Jika YA (touch disentuh):

    • Pintu dianggap terbuka secara manual
    • LED (PB0) = ON
    • Buzzer (PB1) = ON

    Jika TIDAK (tidak ada infrared & tidak ada touch):

    • Pintu dianggap tertutup
    • LED (PB0) = OFF
    • Buzzer (PB1) = OFF

     5. Kembali ke Monitoring

    Setelah proses selesai, sistem kembali ke:

    • Tahap monitoring
    • Mengulang pembacaan sensor secara terus-menerus

     

d. Flowchart dan Listing Program

  • Flowchart

  • Listing Program
#include "main.h"

/* ===== PROTOTYPE ===== */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

/* ===== MAIN ===== */
int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();

    while (1)
    {
        GPIO_PinState flame_state;
        GPIO_PinState float_state;

        flame_state = HAL_GPIO_ReadPin(FLAME_PORT, FLAME_PIN);
        float_state = HAL_GPIO_ReadPin(FLOAT_PORT, FLOAT_PIN);

        // ===== KONDISI AMAN =====
        if ((flame_state == GPIO_PIN_RESET) && (float_state == GPIO_PIN_RESET))
        {
            // Pompa ON
            HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);

            // LED & Buzzer OFF
            HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
        }
        else
        {
            // Kondisi bahaya
            HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
            HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);
        }

        HAL_Delay(100);
    }
}

/* ===== GPIO INIT ===== */
static void MX_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    __HAL_RCC_GPIOA_CLK_ENABLE();

    // INPUT
    GPIO_InitStruct.Pin = FLAME_PIN | FLOAT_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    // OUTPUT
    GPIO_InitStruct.Pin = LED_PIN | BUZZER_PIN | RELAY_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    // Default
    HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
    HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
}

/* ===== CLOCK CONFIG (STM32C0 FIX) ===== */
void SystemClock_Config(void)
{
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    // HSI ON
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1;

    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
        Error_Handler();
    }

    // Clock setup
    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();
    }
}

/* ===== ERROR HANDLER ===== */
void Error_Handler(void)
{
    __disable_irq();
    while (1)
    {
    }
}

g. Download File

Komentar

Postingan populer dari blog ini

TUGAS BESAR

Astable Multivibrator D kecil dari 50%

Komparator Non Inverting ,Vref=0