Percobaan 4 Kondisi 7



 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]


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]


#include "stm32c0xx_hal.h"

// INPUT
#define FLAME_PIN       GPIO_PIN_0  // PA0: Sensor Api
#define FLOAT_PIN       GPIO_PIN_1  // PA1: Sensor Pelampung (Tangki)
#define GPIO_PORT       GPIOA

// OUTPUT
#define LED_PIN         GPIO_PIN_5  // PA5: Indikator Api (LED)
#define RELAY_PIN       GPIO_PIN_6  // PA6: Pompa (Relay) - Pink Tengah
#define BUZZER_PIN      GPIO_PIN_7  // PA7: Alarm (Buzzer) - Pink Bawah

/* Prototipe Fungsi */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

/* ==========================================================
   2. PROGRAM UTAMA
   ========================================================== */
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1)
  {
    // Membaca input sensor
    GPIO_PinState ada_api = HAL_GPIO_ReadPin(GPIO_PORT, FLAME_PIN);
    GPIO_PinState tangki_penuh = HAL_GPIO_ReadPin(GPIO_PORT, FLOAT_PIN);

    /* --- LOGIKA 1: ALARM (LED & BUZZER) --- */
    // Buzzer & LED HANYA hidup jika ada API.
    // Jika hanya Tangki Penuh, Buzzer & LED harus MATI.
    if (ada_api == GPIO_PIN_SET)
    {
      HAL_GPIO_WritePin(GPIO_PORT, LED_PIN, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIO_PORT, BUZZER_PIN, GPIO_PIN_SET);
    }
    else
    {
      HAL_GPIO_WritePin(GPIO_PORT, LED_PIN, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(GPIO_PORT, BUZZER_PIN, GPIO_PIN_RESET);
    }

    /* --- LOGIKA 2: PENGAMAN POMPA (RELAY) --- */
    // Pompa MATI (RESET) jika: Ada Api ATAU Tangki Penuh.
    // Ini adalah sistem interlock pengaman.
    if ((ada_api == GPIO_PIN_SET) || (tangki_penuh == GPIO_PIN_SET))
    {
      // Kondisi Berhenti (Safety / Full)
      HAL_GPIO_WritePin(GPIO_PORT, RELAY_PIN, GPIO_PIN_RESET);
    }
    else
    {
      // Kondisi Jalan (Aman & Belum Penuh)
      HAL_GPIO_WritePin(GPIO_PORT, RELAY_PIN, GPIO_PIN_SET);
    }

    HAL_Delay(50); // Stabilitas pembacaan
  }
}

/* ==========================================================
   3. KONFIGURASI HARDWARE
   ========================================================== */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOA_CLK_ENABLE();

  // Reset Output awal (Semua OFF)
  HAL_GPIO_WritePin(GPIO_PORT, LED_PIN | RELAY_PIN | BUZZER_PIN, GPIO_PIN_RESET);

  // Konfigurasi INPUT (PA0 & PA1)
  GPIO_InitStruct.Pin = FLAME_PIN | FLOAT_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Menggunakan internal pull-down agar tidak floating
  HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStruct);

  // Konfigurasi OUTPUT (PA5, PA6, PA7)
  GPIO_InitStruct.Pin = LED_PIN | RELAY_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(GPIO_PORT, &GPIO_InitStruct);
}

void SystemClock_Config(void)
{
  // Konfigurasi clock standar Nucleo di Wokwi
}






#ifndef __MAIN_H
#define __MAIN_H

#include "stm32c0xx_hal.h"

/* ====== INPUT PINS (PA0 & PA1) ====== */
#define FLAME_PIN       GPIO_PIN_0
#define FLAME_PORT      GPIOA
#define FLOAT_PIN       GPIO_PIN_1
#define FLOAT_PORT      GPIOA

/* ====== OUTPUT PINS (PA5, PA6, PA7) ====== */
#define LED_PIN         GPIO_PIN_5
#define LED_PORT        GPIOA
#define RELAY_PIN       GPIO_PIN_6  // Jalur Pink Tengah di Gambar
#define RELAY_PORT      GPIOA
#define BUZZER_PIN      GPIO_PIN_7  // Jalur Pink Bawah di Gambar
#define BUZZER_PORT     GPIOA

void Error_Handler(void);

#endif /* __MAIN_H */



 5. Video Demo [kembali]

 6. Kondisi [kembali] 

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