Sistem Kontrol Otomatis Tangki Minyak
a. Prosedur [Kembali]
Langkah-langkah percobaan :
1. Siapkan alat dan bahan yaitu dengan komponen utama STM32 NUCLEO-G474RE, touch sensor, PIR sensor, Resistor, LED, Buzzer
2. Rangkai sesuai gambar percobaan
3. Klik pada Library Manager untuk membuat file baru yang bernama main.h dan main.c
4. Masukkan program yang telah dibuat sesuai percobaan
5. Jalankan
b. Hardware dan Diagram Blok [Kembali]
- Hardware
1. STM32 NUCLEO-G474RE
2. Float Switch
3. Flame Sensor
4. Relay
5. Buzzer
6. LED
- Diagram Blog
c. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
- Rangkaian Simulasi
- Prinsip kerja
Rangkaian sistem kontrol berbasis NUCLEO C031C6 ini bekerja dengan mengintegrasikan sensor api (flame sensor) dan sensor pelampung (float sensor) sebagai parameter input untuk mengendalikan LED, buzzer, dan pompa melalui relay. Secara operasional, mikrokontroler terus-menerus membaca status logika pada pin PA0 dan PA1; jika kedua sensor tersebut berada pada kondisi HIGH (artinya api terdeteksi dan tangki air dalam keadaan penuh), maka sistem akan memicu LED dan buzzer sebagai indikator peringatan bahaya, sementara relay akan diputus untuk menghentikan aliran pompa. Namun, dalam kondisi normal atau standby di mana tidak ada api yang terdeteksi, sistem beralih fungsi menjadi pengontrol level air otomatis. Pada mode ini, jika sensor pelampung mendeteksi bahwa air menyusut (LOW), mikrokontroler secara otomatis mengaktifkan relay untuk menghidupkan pompa guna mengisi kembali tangki, dan akan mematikannya kembali setelah air mencapai batas penuh demi memastikan cadangan air selalu tersedia untuk kebutuhan pemadaman.
d. Flowchart dan Listing Program [Kembali]
- Flowchart
- Listing Program
#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 */
#include "main.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
GPIO_PinState flame_state;
GPIO_PinState float_state;
flame_state = HAL_GPIO_ReadPin(FLAME_PORT, FLAME_PIN);
float_state = HAL_GPIO_ReadPin(FLOAT_PORT, FLOAT_PIN);
/* ===== FLAME SENSOR ===== */
if (flame_state == GPIO_PIN_SET)
{
/* Api terdeteksi */
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
}
/* ===== RELAY / POMPA ===== */
if ((flame_state == GPIO_PIN_SET) || (float_state == GPIO_PIN_SET))
{
/* Api ATAU tangki penuh → pompa MATI */
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET);
}
else
{
/* Aman & tangki belum penuh → pompa HIDUP */
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
}
HAL_Delay(100);
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
/* INPUT */
GPIO_InitStruct.Pin = FLAME_PIN | FLOAT_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* OUTPUT */
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);
/* Relay default ON */
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
}
void SystemClock_Config(void)
{
/* Clock default CubeIDE */
}
void Error_Handler(void)
{
while (1) {
e. Video Demo [Kembali]
f. Analisa [Kembali]
g. Download File [Kembali]









0 comments:
Posting Komentar