TP 2 M1



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. 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 menggunakan dua sensor utama, yaitu flame sensor untuk mendeteksi adanya api dan float sensor untuk mendeteksi ketinggian air (level tangki), yang semuanya dikendalikan oleh mikrokontroler STM32 Nucleo. Float sensor berfungsi untuk menentukan apakah tangki sudah penuh atau belum, sedangkan flame sensor berfungsi sebagai sistem pengaman ketika terjadi kebakaran. Dalam kondisi normal, ketika tidak ada api terdeteksi oleh flame sensor, sistem akan bekerja berdasarkan float sensor. Jika tangki belum penuh, maka mikrokontroler akan mengaktifkan relay sehingga pompa air menyala untuk mengisi tangki. Sebaliknya, jika tangki sudah penuh, maka relay akan dimatikan sehingga pompa berhenti bekerja.

    Namun, sistem ini dilengkapi dengan fitur pengaman prioritas. Ketika flame sensor mendeteksi adanya api, mikrokontroler akan langsung memberikan perintah untuk mematikan relay tanpa memperhatikan kondisi tangki. Hal ini menyebabkan pompa air langsung berhenti meskipun tangki belum penuh. Tujuannya adalah untuk mencegah potensi bahaya yang lebih besar, seperti kerusakan sistem atau risiko kebakaran yang semakin meluas.

4. Flowchart dan Listing Program [kembali]

#include "main.h"

/* Prototipe fungsi inisialisasi lokal */
static void MX_GPIO_Init(void);
 
int main(void)
{
  /* 1. Inisialisasi dasar sistem */
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
 
  while (1)
  {
    GPIO_PinState flame_state;
    GPIO_PinState float_state;
 
    /* 2. Baca status sensor saat ini */
    flame_state = HAL_GPIO_ReadPin(FLAME_PORT, FLAME_PIN);
    float_state = HAL_GPIO_ReadPin(FLOAT_PORT, FLOAT_PIN);
 
    /* 3. LOGIKA UTAMA:
     * JIKA Tangki Kosong (RESET/0) DAN Tidak Ada Api (RESET/0)
     */
    if (flame_state == GPIO_PIN_RESET && float_state == GPIO_PIN_RESET)
    {
      /* Pompa MENYALA untuk proses pengisian */
      HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
     
      /* Pastikan LED & BUZZER tetap MATI */
      HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
    }
    /* 4. KONDISI KEAMANAN (Api terdeteksi) ATAU TANGKI PENUH */
    else
    {
      /* Pompa harus MATI */
      HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET);
 
      /* Jika terdeteksi api, nyalakan alarm visual dan suara */
      if (flame_state == GPIO_PIN_SET)
      {
        HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
        HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);
      }
      else
      {
        /* Jika hanya karena tangki penuh, alarm tidak perlu nyala */
        HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
      }
    }
 
    HAL_Delay(100); // Jeda untuk stabilitas pembacaan sensor
  }
}
 
/* KONFIGURASI GPIO */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 
  __HAL_RCC_GPIOA_CLK_ENABLE();
 
  /* Konfigurasi Input: Flame & Float Sensor */
  GPIO_InitStruct.Pin = FLAME_PIN | FLOAT_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Menangani resistor pull-down eksternal
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
  /* Konfigurasi Output: LED, Buzzer, Relay */
  GPIO_InitStruct.Pin = LED_PIN | BUZZER_PIN | RELAY_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);
 
  /* Kondisi awal saat sistem menyala: Semua Aktuator MATI */
  HAL_GPIO_WritePin(GPIOA, LED_PIN | BUZZER_PIN | RELAY_PIN, GPIO_PIN_RESET);
}
 
/* KONFIGURASI CLOCK STANDAR */
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;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
}



#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 */









5. Video Demo [kembali]



6. Kondisi [kembali]

    Percobaan 4 

Buatlah rangkaian seperti pada gambar percobaan 4 dengan kondisi ketika float switch mendeteksi tidak adanya aliran minyak (tangki kosong) dan flame sensor tidak mendeteksi api, maka pompa menyala untuk memulai proses pengisian, LED indikator mati, dan buzzer tidak berbunyi.

7. Video Simulasi [kembali]






8. Download File [kembali]










Komentar

Postingan Populer