Tugas Pendahuluan 2



Sistem Kontrol Otomatis Tangki Minyak

a. 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

b. Hardware dan Diagram Blok [Kembali]

  • Hardware

 1. STM32 NUCLEO-G474RE



2. Float Switch



3. Flame Sensor



4. Relay



5. Buzzer



6. LED 

7. Push Button


  • Diagram Blog




c. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

  • Rangkaian Simulasi


  • Prinsip kerja

Rangkaian ini menggunakan mikrokontroler (STM32 Nucleo C031C6) sebagai pengendali utama yang menerima input dari flame sensor dan mengontrol output berupa LED indikator, buzzer, dan relay (pompa).

Pada kondisi normal (tidak ada api), flame sensor memberikan sinyal LOW ke mikrokontroler sehingga seluruh output dalam keadaan tidak aktif, yaitu LED mati, buzzer tidak berbunyi, dan relay tidak mengaktifkan pompa. Ketika flame sensor mendeteksi adanya nyala api, sensor akan mengirimkan sinyal HIGH ke mikrokontroler. Sinyal ini kemudian diproses sesuai program yang telah dibuat. Dalam kondisi yang ditentukan, yaitu pompa dalam keadaan mati, mikrokontroler tidak mengaktifkan relay sehingga pompa tetap tidak bekerja.

Sebagai respon terhadap deteksi api tersebut, mikrokontroler akan:

  • Mengaktifkan LED merah sebagai indikator visual bahwa terdapat kebakaran
  • Mengaktifkan buzzer sehingga berbunyi sebagai alarm peringatan
  • Tidak mengaktifkan relay, sehingga pompa tetap dalam kondisi mati

Dengan demikian, meskipun terjadi deteksi api, sistem hanya memberikan peringatan berupa cahaya dan suara, tanpa melakukan aksi pemadaman (pompa tidak menyala). Hal ini menunjukkan bahwa logika sistem memprioritaskan alarm peringatan tanpa mengaktifkan aktuator utama (pompa).

d. Flowchart dan Listing Program [Kembali]

  • Flowchart
  • Listing Program

#include "main.h"

// Deklarasi fungsi konfigurasi
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void)
{
  // Inisialisasi HAL (hardware abstraction layer)
  HAL_Init();

  // Konfigurasi clock sistem
  SystemClock_Config();

  // Inisialisasi GPIO (input & output)
  MX_GPIO_Init();

  // Loop utama program
  while (1)
  {
    // Variabel untuk membaca kondisi sensor
    GPIO_PinState flame_state; // sensor api
    GPIO_PinState float_state; // sensor level air (float switch)

    // Membaca kondisi pin sensor
    flame_state = HAL_GPIO_ReadPin(FLAME_PORT, FLAME_PIN);
    float_state = HAL_GPIO_ReadPin(FLOAT_PORT, FLOAT_PIN);

    /* ===== PRIORITAS: FLAME (API) ===== */
    if (flame_state == GPIO_PIN_SET)
    {
      // Jika sensor api aktif → terdeteksi api (kondisi darurat)

      // Nyalakan LED sebagai indikator
      HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);

      // Nyalakan buzzer sebagai alarm
      HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);

      // Pompa harus dimatikan (relay OFF)
      HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET);
    }
    else
    {
      // Jika tidak ada api → kondisi normal

      // Matikan LED
      HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);

      // Matikan buzzer
      HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);

      /* ===== KONTROL POMPA BERDASARKAN FLOAT ===== */
      if (float_state == GPIO_PIN_SET)
      {
        // Jika float HIGH → tangki penuh

        // Matikan pompa
        HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET);
      }
      else
      {
        // Jika float LOW → tangki belum penuh

        // Nyalakan pompa
        HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
      }
    }

    // Delay 100 ms untuk stabilitas pembacaan
    HAL_Delay(100);
  }
}

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

  // Mengaktifkan clock GPIOA
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /* INPUT */
  GPIO_InitStruct.Pin = FLAME_PIN | FLOAT_PIN;   // Pin sensor api & float
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;        // Mode input
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;          // Default LOW (sesuai wiring)
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* OUTPUT */
  GPIO_InitStruct.Pin = LED_PIN | BUZZER_PIN | RELAY_PIN; // Pin output
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;             // Output push-pull
  GPIO_InitStruct.Pull = GPIO_NOPULL;                     // Tanpa pull resistor
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;            // Kecepatan rendah
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* Default: pompa ON (opsional) */
  // Relay aktif → pompa menyala saat awal
  HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
}

/* ================= CLOCK ================= */
void SystemClock_Config(void)
{
  // Menggunakan konfigurasi default (tidak diubah)
}

/* ================= ERROR ================= */
void Error_Handler(void)
{
  // Jika terjadi error → program berhenti di loop ini
  while (1) {}
}



#ifndef __MAIN_H
#define __MAIN_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#include "stm32c0xx_hal.h"
 
/* ====== INPUT ====== */
#define FLAME_PIN        GPIO_PIN_0
#define FLAME_PORT       GPIOA
 
#define FLOAT_PIN        GPIO_PIN_1
#define FLOAT_PORT       GPIOA
 
/* ====== OUTPUT ====== */
#define LED_PIN          GPIO_PIN_5
#define LED_PORT         GPIOA
 
#define BUZZER_PIN       GPIO_PIN_6
#define BUZZER_PORT      GPIOA
 
#define RELAY_PIN        GPIO_PIN_7
#define RELAY_PORT       GPIOA
 
void Error_Handler(void);
 
#ifdef __cplusplus
}
#endif
#endif /* __MAIN_H */

e. Video Demo [Kembali]


f. Kondisi [Kembali]

Buatlah rangkaian seperti pada gambar percobaan 4 dengan kondisi ketika flame sensor mendeteksi adanya nyala api dan pompa dalam keadaan mati, maka LED indikator merah menyala dan buzzer berbunyi sebagai alarm peringatan, sedangkan pompa tetap dalam kondisi mati.

g. Video Simulasi [Kembali]



h. Download File [Kembali]

File TP [Klik disini]



Kembali ke Halaman Atas

 

 

Komentar

Postingan populer dari blog ini