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 pusat kendali yang menerima dua input digital, yaitu dari flame sensor dan float switch (sensor ketinggian air), serta mengendalikan tiga output berupa LED indikator, buzzer, dan relay penggerak pompa air.

    Prinsip kerja sistem ini dirancang berdasarkan logika pengisian air otomatis dan prioritas keselamatan, dengan skenario sebagai berikut:

  1. Kondisi Normal (Aman & Tangki Kosong/Pengisian): Ketika flame sensor tidak mendeteksi api (memberikan sinyal LOW) DAN float switch tidak mendeteksi tangki penuh (memberikan sinyal LOW), sistem mendeteksi kondisi aman dan membutuhkan air. Mikrokontroler akan mengaktifkan relay sehingga pompa menyala untuk mengisi tangki. Pada kondisi ini, sistem alarm tidak diperlukan sehingga LED dan buzzer dalam keadaan mati.

  2. Kondisi Tangki Penuh: Ketika proses pengisian selesai dan float switch mendeteksi bahwa tangki sudah penuh (memberikan sinyal HIGH), mikrokontroler akan memutus sinyal ke relay. Hal ini menyebabkan pompa mati untuk mencegah air meluap (overflow). LED dan buzzer tetap dalam keadaan mati karena tidak ada kondisi bahaya.

  3. Kondisi Darurat (Api Terdeteksi): Jika sewaktu-waktu flame sensor mendeteksi adanya nyala api (memberikan sinyal HIGH), sistem akan mengabaikan status float switch dan langsung beralih ke mode darurat. Mikrokontroler akan segera mematikan relay (pompa mati) sebagai langkah pengamanan. Bersamaan dengan itu, mikrokontroler mengaktifkan LED merah secara visual dan membunyikan buzzer sebagai alarm peringatan kebakaran.

    Dengan demikian, sistem ini memastikan bahwa pompa (aktuator) hanya akan menyala jika kondisi lingkungan benar-benar aman dari api dan tangki memang sedang membutuhkan suplai air.


d. Flowchart dan Listing Program [Kembali]

  • Flowchart

  • Listing Program

#include "main.h" // Header utama program

void SystemClock_Config(void);  // Deklarasi fungsi pengaturan clock
static void MX_GPIO_Init(void); // Deklarasi fungsi pengaturan pin

int main(void) // Program utama
{
  HAL_Init();           // Inisialisasi sistem mikrokontroler
  SystemClock_Config(); // Atur kecepatan sistem
  MX_GPIO_Init();       // Siapkan pin input (sensor) & output (aktuator)

  while (1) // Looping terus-menerus
  {
    GPIO_PinState flame_state; // Variabel penyimpan status api
    GPIO_PinState float_state; // Variabel penyimpan status pelampung
   
    flame_state = HAL_GPIO_ReadPin(FLAME_PORT, FLAME_PIN); // Baca sensor api
    float_state = HAL_GPIO_ReadPin(FLOAT_PORT, FLOAT_PIN); // Baca sensor pelampung
   
    /* ===== KONDISI UTAMA ===== */
    // Jika AMAN (Tidak ada api & Tangki belum penuh)
    if (flame_state == GPIO_PIN_RESET && float_state == GPIO_PIN_RESET)
    {
      HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);     // Nyalakan pompa
      HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);       // Matikan LED
      HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET); // Matikan Buzzer
    }
    else // Jika BAHAYA (Ada api) ATAU Tangki PENUH
    {
      HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET); // Matikan pompa demi keamanan

      // Cek apakah sistem mati karena ada API?
      if (flame_state == GPIO_PIN_SET)
      {
        HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);       // Nyalakan LED alarm
        HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET); // Bunyikan Buzzer alarm
      }
      else // Jika sistem mati cuma karena TANGKI PENUH (Aman)
      {
        HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);       // Pastikan LED mati
        HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET); // Pastikan Buzzer mati
      }
    }
   
    HAL_Delay(100); // Jeda 0.1 detik agar pembacaan sensor stabil
  }
}

static void MX_GPIO_Init(void) // Fungsi pengaturan Pin
{
  GPIO_InitTypeDef GPIO_InitStruct = {0}; // Siapkan wadah konfigurasi pin
 
  __HAL_RCC_GPIOA_CLK_ENABLE(); // Nyalakan arus/clock untuk Port A
 
  /* PENGATURAN INPUT (Sensor) */
  GPIO_InitStruct.Pin = FLAME_PIN | FLOAT_PIN; // Pilih pin sensor
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;      // Set sebagai Input
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;        // Default ke LOW (0) jika tak ada sinyal
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);      // Terapkan ke Port A
 
  /* PENGATURAN OUTPUT (Aktuator) */
  GPIO_InitStruct.Pin = LED_PIN | BUZZER_PIN | RELAY_PIN; // Pilih pin aktuator
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;             // Set sebagai Output
  GPIO_InitStruct.Pull = GPIO_NOPULL;                     // Tanpa resistor pull
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;            // Kecepatan sinyal normal
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);                 // Terapkan ke Port A
 
  /* Relay default ON */
  HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET); // Pompa menyala di awal
}
 
void SystemClock_Config(void)
{
  /* Pengaturan clock bawaan sistem */
}
 
void Error_Handler(void) // Fungsi jika terjadi error sistem
{
  while (1) {} // Sistem berhenti (hang) di sini kalau ada error
}


#ifndef __MAIN_H      // Mencegah file ini dibaca/di-compile lebih dari sekali (Include guard)
#define __MAIN_H      // Menandai bahwa file "main.h" sedang digunakan

#ifdef __cplusplus    // Mengecek apakah program ini dikompilasi menggunakan C++
extern "C" {          // Jika ya, beritahu sistem agar kode C di bawah ini tetap bisa dibaca tanpa error
#endif

#include "stm32c0xx_hal.h" // Memanggil library utama mikrokontroler STM32 seri C0

/* ====== INPUT (Sensor) ====== */
#define FLAME_PIN        GPIO_PIN_0  // Menamai Pin 0 sebagai pin Sensor Api
#define FLAME_PORT       GPIOA       // Sensor Api disambung ke kelompok Port A

#define FLOAT_PIN        GPIO_PIN_1  // Menamai Pin 1 sebagai pin Sensor Pelampung
#define FLOAT_PORT       GPIOA       // Sensor Pelampung disambung ke kelompok Port A

/* ====== OUTPUT (Aktuator) ====== */
#define LED_PIN          GPIO_PIN_5  // Menamai Pin 5 sebagai pin lampu LED
#define LED_PORT         GPIOA       // Lampu LED disambung ke kelompok Port A

#define BUZZER_PIN       GPIO_PIN_6  // Menamai Pin 6 sebagai pin Buzzer (Alarm)
#define BUZZER_PORT      GPIOA       // Buzzer disambung ke kelompok Port A

#define RELAY_PIN        GPIO_PIN_7  // Menamai Pin 7 sebagai pin Relay (Pompa)
#define RELAY_PORT       GPIOA       // Relay disambung ke kelompok Port A

void Error_Handler(void); // Mendeklarasikan fungsi khusus untuk menangani jika sistem error

#ifdef __cplusplus    // Mengecek ulang apakah memakai C++
}                     // Menutup kurung kurawal `extern "C"` di atas
#endif
#endif /* __MAIN_H */ // Menutup blok `#ifndef __MAIN_H` dari baris paling atas

e. Video Demo [Kembali]


f. Kondisi [Kembali]

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.

g. Video Simulasi [Kembali]




h. Download File [Kembali]

File TP [Download]



Kembali ke Halaman Atas

 

 

Komentar

Postingan populer dari blog ini