1. Prosedur[Kembali]
- Pahami terlebih dahulu kondisi yang akan digunakan
- Buka web Wokwi
- Persiapkan alat dan bahan
- Buat rangkaian sesuai dengan kondisi dan modul
- Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi
- Jalankan simulasi rangkaian.
- Proses selesai
2. Hardware dan Diagram Blok[Kembali]
a. Hardware
STM32 NUCLEO-G474RE
Flame Sensor
Buzzer
LED Red
Relay
Float Sensor
Rangkaian
Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Rangkaian Simulasi
Prinsip Kerja
1. Kondisi awal, Saat sistem dinyalakan:
-
STM32 menjalankan:
-
HAL_Init() → inisialisasi sistem
-
SystemClock_Config() → menggunakan clock HSI internal
-
MX_GPIO_Init() → konfigurasi semua pin
-
Konfigurasi pin:
-
FLAME_PIN & FLOAT_PIN → INPUT (pull-down)
-
LED_PIN, BUZZER_PIN, RELAY_PIN → OUTPUT
2. Pembacaan Sensor (Loop Utama). Di dalam loop while(1):
Sistem membaca dua input:
-
Flame sensor (push button 1) → simulasi deteksi api
-
Float sensor (push button 2) → simulasi level air
Karena menggunakan pull-down:
-
Tidak ditekan → LOW (0)
-
Ditekan → HIGH (1)
3. Logika Kondisi Sistem
Kondisi aman saat: if (flame_state == GPIO_PIN_RESET && float_state == GPIO_PIN_RESET)
Artinya tidak ada api (Flame berlogika low) dan level air aman (Float sensor low)
4. Output Sistem
Kondisi aman terpenuhi saat kondisi berikut terpenuhi:
LED Mati, Buzzer Mati, Relay menyala
4. Flowchart dan Listing Program[Kembali]
Flowchart
Listing Program:
#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);
/* ===== KONDISI UTAMA YANG DIMINTA ===== */
if ((flame_state == GPIO_PIN_RESET) && (float_state == GPIO_PIN_RESET))
{
/* Tidak ada api & tangki belum penuh → pompa ON, LED & buzzer OFF */
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET); // Pompa ON
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET); // LED OFF
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET); // Buzzer OFF
}
else
{
/* Jika ada api ATAU tangki penuh → pompa OFF */
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET);
/* Jika ada api → LED & buzzer ON */
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
{
/* Tangki penuh tapi tidak ada api → LED & buzzer OFF */
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
}
}
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) {}
}
5. Video Demo[Kembali]
6. 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.
Komentar
Posting Komentar