B. Tugas Pendahuluan 2

 a) Prosedur

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


b) Hardware

  • Hardware

 1. STM32 NUCLEO-C031C6





2. Float Switch



3. Infrared Sensor


4. Resistor


5. Buzzer



6. LED 

7. Push Button


  • Diagram Blog


c) Rangkaian Simulasi dan Prinsip Kerja

  • Rangkaian Simulasi


  • Prinsip kerja
gambar percobaan 2 dengan kondisi ketika infrared sensor mendeteksi benda secara terus-menerus selama lebih dari 15 detik, maka buzzer tetap berbunyi dan LED merah tetap menyala.
  • Flowchart

  • Listing Program
  • Codingan main.h

    #ifndef __MAIN_H

    #define __MAIN_H

     

    #ifdef __cplusplus

    extern "C" {

    #endif

     

    #include "stm32c0xx_hal.h"

     

    void Error_Handler(void);

     

    // ===== INPUT =====

    #define IR_SENSOR_Pin           GPIO_PIN_0

    #define IR_SENSOR_GPIO_Port     GPIOA

     

    // ===== OUTPUT RGB LED + BUZZER =====

    #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

     

    #define LED_BLUE_Pin            GPIO_PIN_2

    #define LED_BLUE_GPIO_Port      GPIOB

     

    #define BUZZER_Pin              GPIO_PIN_3

    #define BUZZER_GPIO_Port        GPIOB

     

    #ifdef __cplusplus

    }

    #endif

     

    #endif /* __MAIN_H */

     

     

    Codingan main.c

    #include "main.h"

     

    void SystemClock_Config(void);

    static void MX_GPIO_Init(void);

     

    #define DETECTION_THRESHOLD_MS  15000   // 15 detik dalam milidetik

     

    int main(void)

    {

      HAL_Init();

      SystemClock_Config();

      MX_GPIO_Init();

     

      uint32_t detect_start_tick = 0;       // waktu mulai deteksi

      uint8_t  is_detecting      = 0;       // flag: sedang deteksi terus-menerus?

      uint8_t  alarm_active      = 0;       // flag: alarm sudah aktif?

     

      /* Pastikan semua output mati di awal */

      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 |

                               GPIO_PIN_2 | GPIO_PIN_3, GPIO_PIN_RESET);

     

      while (1)

      {

        /*

         * IR sensor aktif-LOW (umum):

         *   GPIO_PIN_RESET = benda terdeteksi

         *   GPIO_PIN_SET   = tidak ada benda

         *

         * Jika sensor Anda aktif-HIGH, ganti kondisinya:

         *   GPIO_PIN_SET   = benda terdeteksi

         */

        uint8_t ir_state = HAL_GPIO_ReadPin(IR_SENSOR_GPIO_Port, IR_SENSOR_Pin);

        uint8_t object_detected = (ir_state == GPIO_PIN_RESET); // aktif-LOW

     

        if (object_detected)

        {

          if (!is_detecting)

          {

            /* Benda baru pertama kali terdeteksi → catat waktu mulai */

            detect_start_tick = HAL_GetTick();

            is_detecting = 1;

          }

     

          /* Hitung durasi deteksi terus-menerus */

          uint32_t elapsed = HAL_GetTick() - detect_start_tick;

     

          if (elapsed >= DETECTION_THRESHOLD_MS)

          {

            /* === KONDISI ALARM: deteksi > 15 detik === */

            alarm_active = 1;

     

            HAL_GPIO_WritePin(LED_RED_GPIO_Port,   LED_RED_Pin,   GPIO_PIN_SET);   // LED Merah ON

            HAL_GPIO_WritePin(BUZZER_GPIO_Port,    BUZZER_Pin,    GPIO_PIN_SET);   // Buzzer ON

     

            /* Matikan LED lain agar hanya merah yang menyala */

            HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);

            HAL_GPIO_WritePin(LED_BLUE_GPIO_Port,  LED_BLUE_Pin,  GPIO_PIN_RESET);

          }

          else

          {

            /* Deteksi ada tapi belum 15 detik → LED Hijau sebagai indikator standby */

            if (!alarm_active)

            {

              HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);

              HAL_GPIO_WritePin(LED_RED_GPIO_Port,   LED_RED_Pin,   GPIO_PIN_RESET);

              HAL_GPIO_WritePin(LED_BLUE_GPIO_Port,  LED_BLUE_Pin,  GPIO_PIN_RESET);

              HAL_GPIO_WritePin(BUZZER_GPIO_Port,    BUZZER_Pin,    GPIO_PIN_RESET);

            }

          }

        }

        else

        {

          /* Tidak ada benda → reset timer dan semua output */

          is_detecting      = 0;

          alarm_active      = 0;

          detect_start_tick = 0;

     

          HAL_GPIO_WritePin(GPIOB,

                            GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3,

                            GPIO_PIN_RESET);

        }

     

        HAL_Delay(50); // polling setiap 50ms

      }

    }

     

    /* ------------------------------------------------------------------ */

    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;

     

      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();

     

      /* IR Sensor sebagai INPUT dengan PULLUP (untuk sensor aktif-LOW) */

      GPIO_InitStruct.Pin  = IR_SENSOR_Pin;

      GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

      GPIO_InitStruct.Pull = GPIO_PULLUP;        // ganti PULLDOWN jika sensor aktif-HIGH

      HAL_GPIO_Init(IR_SENSOR_GPIO_Port, &GPIO_InitStruct);

     

      /* LED RGB + Buzzer sebagai OUTPUT */

      GPIO_InitStruct.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;

      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)

    {

      __disable_irq();

      while (1) {}

    }

e) Video Demo

-

f) Kondisi

Percobaan 2 kondisi 6

Buatlah rangkaian seperti gambar percobaan 2 dengan kondisi ketika infrared sensor mendeteksi benda secara terus-menerus selama lebih dari 15 detik, maka buzzer tetap berbunyi dan LED merah tetap menyala.pada 

g) Video Simulasi






h) Download File

File TP/Link Wokwi [klik disini]


Komentar

Postingan populer dari blog ini