M1-Tugas Pendahuluan 2



1. Prosedur [kembali]

  1. Menyiapkan alat dan bahan.
  2. Merangkai komponen pada breadboard sesuai dengan gambar rangkaian percobaan.
  3. Menghubungkan masing masing pin input output.
  4. Jalankan Rangkaian

2. Hardware dan Diagram Blok [kembali]

  • STM32 NUCLEO-G474RE  
  • Float Switch  
  • Flame Sensor  
  • Relay 
  • Buzzer 
  • LED 
  • Breadboard  
  • Adaptor 

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]


Rangkaian ini merupakan sistem kontrol berbasis mikrokontroler STM32 Nucleo C031C6 yang berfungsi untuk memonitor keberadaan api dan level air dalam tangki, sekaligus mengendalikan pompa sebagai aktuator utama.

Pada kondisi normal, float sensor digunakan untuk mendeteksi ketinggian air dalam tangki. Ketika air belum penuh, mikrokontroler akan mengaktifkan relay sehingga pompa menyala dan mengisi tangki. Sebaliknya, ketika air sudah mencapai batas penuh, float sensor akan memberikan sinyal ke mikrokontroler untuk mematikan relay, sehingga pompa berhenti bekerja.

Namun, sistem ini juga dilengkapi dengan flame sensor sebagai fitur pengaman. Flame sensor memiliki prioritas utama dalam sistem. Ketika flame sensor mendeteksi adanya api, mikrokontroler langsung merespons kondisi tersebut sebagai keadaan darurat, tanpa memperhatikan kondisi level air.

Pada saat terdeteksi api, mikrokontroler akan segera mematikan relay sehingga pompa berhenti, meskipun tangki belum penuh. Selain itu, LED akan menyala dan buzzer akan berbunyi sebagai tanda peringatan bahaya.

4. Flowchart dan Listing Program [kembali]

A. Flowchart


B. Listing Program

main.h
#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32c0xx_hal.h"

/* ================================
   DEFINISI PIN
   ================================ */

/* INPUT */
#define SENSOR_API_PIN       GPIO_PIN_0
#define SENSOR_API_PORT      GPIOA

#define SENSOR_LEVEL_PIN     GPIO_PIN_1
#define SENSOR_LEVEL_PORT    GPIOA

/* OUTPUT */
#define LED_IND_PIN          GPIO_PIN_5
#define LED_IND_PORT         GPIOA

#define RELAY_POMPA_PIN      GPIO_PIN_6
#define RELAY_POMPA_PORT     GPIOA

#define BUZZER_PIN           GPIO_PIN_7
#define BUZZER_PORT          GPIOA

/* Fungsi */
void Error_Handler(void);

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

main.c
 #include "main.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  /* Kondisi awal: pompa dimatikan */
  HAL_GPIO_WritePin(RELAY_POMPA_PORT, RELAY_POMPA_PIN, GPIO_PIN_SET);

  while (1)
  {
    GPIO_PinState api;
    GPIO_PinState level;

    /* Membaca input sensor */
    api   = HAL_GPIO_ReadPin(SENSOR_API_PORT, SENSOR_API_PIN);
    level = HAL_GPIO_ReadPin(SENSOR_LEVEL_PORT, SENSOR_LEVEL_PIN);

    /* ===== INDIKATOR API ===== */
    if (api == GPIO_PIN_RESET)   // LOW = api terdeteksi
    {
      HAL_GPIO_WritePin(LED_IND_PORT, LED_IND_PIN, GPIO_PIN_SET);
      HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);
    }
    else
    {
      HAL_GPIO_WritePin(LED_IND_PORT, LED_IND_PIN, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
    }

    /* ===== LOGIKA POMPA ===== */
    if ((api == GPIO_PIN_RESET) || (level == GPIO_PIN_SET))
    {
      // kondisi bahaya atau tangki penuh
      HAL_GPIO_WritePin(RELAY_POMPA_PORT, RELAY_POMPA_PIN, GPIO_PIN_SET);
    }
    else
    {
      // kondisi normal
      HAL_GPIO_WritePin(RELAY_POMPA_PORT, RELAY_POMPA_PIN, GPIO_PIN_RESET);
    }

    HAL_Delay(60);
  }
}

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

  __HAL_RCC_GPIOA_CLK_ENABLE();

  /* Set awal output */
  HAL_GPIO_WritePin(GPIOA, LED_IND_PIN | RELAY_POMPA_PIN | BUZZER_PIN, GPIO_PIN_RESET);

  /* INPUT */
  GPIO_InitStruct.Pin = SENSOR_API_PIN | SENSOR_LEVEL_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* OUTPUT */
  GPIO_InitStruct.Pin = LED_IND_PIN | RELAY_POMPA_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(GPIOA, &GPIO_InitStruct);
}

void SystemClock_Config(void)
{
  /* Konfigurasi default */
}

void Error_Handler(void)
{
  while (1) {}
}

5. Video Demo [kembali]

6. Kondisi [kembali]

    Percobaan 4 Kondisi 7
Buatlah rangkaian seperti pada gambar percobaan 4 dengan kondisi ketika flame sensor mendeteksi api meskipun tangki belum penuh, maka pompa langsung mati sebagai sistem pengaman.

7. Video Simulasi [kembali]



8. Download File [kembali]











Komentar

Postingan populer dari blog ini

Detektor non-inverting dengan Vref = 0

2.2 Load-Line Analysis

4.19 Practical Applications