Tugas Pendahuluan 2



                                                Modul 1 Percobaan 4 Kondisi 6

1. Prosedur [Kembali]

  1. Pahami terlebih dahulu kondisi yang akan digunakan
  2. Buka web Wokwi
  3. Persiapkan alat dan bahan
  4. Buat rangkaian sesuai dengan kondisi dan modul
  5. Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi 
  6. Jalankan simulasi rangkaian.  
  7. Proses seles

2. Hardware dan Diagram Blok [Kembali]


STM32 NUCLEO-G474RE


Flame Sensor


Buzzer



LED Red


Resistor 1k dan 220 ohm


Relay


Float Sensor

Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]






Prinsip Kerja

Prinsip Kerja
1. Kondisi awal, Saat sistem dinyalakan:
  • STM32 menjalankan:
    • HAL_Init() → inisialisasi sistem
    • SystemClock_Config() → menggunakan clock HSI internal
    • MX_GPIO_Init() → konfigurasi semua pin
  • Konfigurasi pin:
    • FLAME_PIN & FLOAT_PIN → INPUT (pull-down)
    • LED_PIN, BUZZER_PIN, RELAY_PIN → OUTPUT
2. Pembacaan Sensor (Loop Utama). Di dalam loop while(1):
  • Sistem membaca dua input:
    • Flame sensor (push button 1) → simulasi deteksi api
    • Float sensor (push button 2) → simulasi level air
  • Karena menggunakan pull-down:
    • Tidak ditekan → LOW (0)
    • Ditekan → HIGH (1)
    3. Logika Kondisi Sistem
        Kondisi aman saat: if (flame_state == GPIO_PIN_RESET && float_state == GPIO_PIN_RESET)
        Artinya tidak ada api (Flame berlogika low) dan level air aman (Float sensor low)

    4. Output Sistem
        Kondisi aman terpenuhi saat kondisi berikut terpenuhi:
        LED Mati, Buzzer Mati, Relay menyala

    4. Flowchart dan Listing Program [Kembali]



    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)
        {
        }
    }


    5. Video Demo [Kembali]


    6. Kondisi [Kembali]

    Kondisi 6

    Buatlah rangkaian seperti pada gambar percobaan 4 dengan kondisi ketika flame sensor tidak mendeteksi api dan float switch tidak mendeteksi tangki penuh, maka pompa menyala dan LED serta buzzer dalam kondisi mati.

    7. Video Simulasi [Kembali]


    8. Download File [Kembali]



     

     

    Tidak ada komentar:

    Posting Komentar

      BAHAN PRESENTASI UNTUK MATA KULIAH ELEKTRONIKA 2024 OLEH: Hafiz Fadli Al Anshor 2310951034 Dosen Pengampu: Darwison, M.T Referensi:  1. Da...