Tugas Pendahuluan 2



DAFTAR ISI
1. Prosedur
2. Hardware dan diagram blok
3. Rangkaian Simulasi dan prinsip kerja
4. Flowchart dan Listing Program
5. Video demo
6. Kondisi
7. Video Simulasi
8. Download File
  • 1. Prosedur[Kembali]

    1. Buka web WOKWI.COM dan cari STM 32 NUCLEO C031C6

    2. Rangkai komponen sesuai dengan gambar rangkaian di modul

    3. Klik pada Library Manager untuk membuat file baru yang bernama main.h dan main.c

    4. Masukan program yang telah di buat sesuai kondisi pada kedua file tersebut

    5. Simulasikan


    2. Hardware dan Diagram Blok[Kembali]

    1. STM32 NUCLEO-G474RE



    2. Float Switch



    3. Infrared Sensor


    4. Resistor


    5. Buzzer



    6. LED 

    7. Push Button

    • Diagram Blog

    3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]



      1. Saat program mulai, mikrokontroler melakukan inisialisasi sistem, clock, dan GPIO.
      2. Sistem kemudian menunggu tombol (switch) ditekan.
      3. Jika tombol ditekan, sistem menjadi aktif (system_active = 1).
      4. Tepat saat sistem aktif, mikrokontroler langsung membaca IR sensor.
      5. Jika sensor langsung mendeteksi objek (padahal seharusnya area kosong), maka sistem masuk kondisi error (error_state = 1).
      6. Pada kondisi error:
        • LED RGB menyala ungu (merah + biru aktif).
        • Buzzer menyala sebagai tanda kesalahan.
      7. Setelah masuk kondisi error, sistem tetap mempertahankan kondisi tersebut selama sistem masih aktif.

    4. Flowchart dan Listing Program[Kembali]





    • Listing Program
    1. main.c

    #include "main.h"


    void SystemClock_Config(void);

    void MX_GPIO_Init(void);


    uint8_t system_active = 0;

    uint8_t error_state = 0;


    int main(void)

    {

      HAL_Init();

      SystemClock_Config();

      MX_GPIO_Init();


      uint8_t sensor_start;


      while (1)

      {

        uint8_t switch_state = HAL_GPIO_ReadPin(BUTTON_REVERSE_GPIO_Port, BUTTON_REVERSE_Pin);


        // SWITCH ON

        if (switch_state == GPIO_PIN_RESET)

        {

          if (system_active == 0)

          {

            system_active = 1;


            sensor_start = HAL_GPIO_ReadPin(IR_SENSOR_GPIO_Port, IR_SENSOR_Pin);


            if (sensor_start == GPIO_PIN_SET)

            {

              error_state = 1;

            }

          }

        }

        else // SWITCH OFF

        {

          system_active = 0;

          error_state = 0;


          // Matikan LED dan buzzer

          HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);

          HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);

          HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET);

        }


        if (system_active && error_state)

        {

          // LED Ungu = Merah + Biru

          HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);

          HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);

          HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);

        }

      }

    }


    void SystemClock_Config(void)

    {

    }


    void MX_GPIO_Init(void)

    {

      GPIO_InitTypeDef GPIO_InitStruct = {0};


      __HAL_RCC_GPIOA_CLK_ENABLE();

      __HAL_RCC_GPIOB_CLK_ENABLE();


      // Semua mati dulu

      HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin | LED_RED_Pin | BUZZER_Pin, GPIO_PIN_SET);


      // Switch + Sensor

      GPIO_InitStruct.Pin = BUTTON_REVERSE_Pin | IR_SENSOR_Pin;

      GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

      GPIO_InitStruct.Pull = GPIO_PULLUP;

      HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


      // LED RGB

      GPIO_InitStruct.Pin = LED_GREEN_Pin | LED_RED_Pin | BUZZER_Pin;

      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)

    {

      while (1)

      {

      }

    }

              2. Main.h

     

    #ifndef __MAIN_H

    #define __MAIN_H

     

    #ifdef __cplusplus

    extern "C" {

    #endif

     

    #include "stm32c0xx_hal.h"

     

    void Error_Handler(void);

     

    // ===== SWITCH =====

    #define BUTTON_REVERSE_Pin GPIO_PIN_0

    #define BUTTON_REVERSE_GPIO_Port GPIOA

     

    // ===== SENSOR =====

    #define IR_SENSOR_Pin GPIO_PIN_1

    #define IR_SENSOR_GPIO_Port GPIOA

     

    // ===== LED RGB =====

    #define LED_GREEN_Pin GPIO_PIN_0

    #define LED_GREEN_GPIO_Port GPIOB

     

    #define LED_RED_Pin GPIO_PIN_1

    #define LED_RED_GPIO_Port GPIOB

     

    // Pin ini kita pakai sebagai LED Biru (sebelumnya buzzer)

    #define BUZZER_Pin GPIO_PIN_2

    #define BUZZER_GPIO_Port GPIOB

     

    #ifdef __cplusplus

    }

    #endif

     

    #endif

    5. Video Demo[Kembali]


    6. Kondisi[Kembali]

    Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Switch ON dan sensor mendeteksi benda secara instan (0 detik setelah sistem aktif) padahal area harusnya kosong, LED RGB menyala Ungu (Merah + Biru) sebagai tanda error

    8. Download File[Kembali]

    rangkaian percobaan [Klik]



Komentar

Postingan populer dari blog ini