LA 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 beroperasi dengan memanfaatkan dua jenis sensor sebagai masukan, yaitu sensor inframerah (IR) dan sensor sentuh yang terhubung ke mikrokontroler STM32. Sensor inframerah menghasilkan sinyal logika rendah (0) ketika tidak mendeteksi adanya objek, sementara sensor sentuh menghasilkan logika tinggi (1) saat menerima sentuhan.

Mikrokontroler secara kontinu memantau kondisi kedua sensor tersebut melalui pin GPIO. Apabila sensor inframerah berada pada kondisi tidak mendeteksi objek (logika 0) dan sensor sentuh mendeteksi sentuhan (logika 1), maka mikrokontroler akan mengirimkan sinyal logika tinggi ke pin output. Sinyal ini digunakan untuk menyalakan LED sebagai indikator. Sebaliknya, jika kondisi tersebut tidak terpenuhi, maka mikrokontroler akan memberikan sinyal logika rendah sehingga LED tetap dalam keadaan mati.

Dengan demikian, prinsip kerja rangkaian ini didasarkan pada logika kombinasi, di mana LED hanya akan menyala ketika syarat IR = 0 dan Touch = 1 terpenuhi.

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