TUGAS PENDAHULUAN 2
PERCOBAAN 4 KONDISI 6
- 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
Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Rangkaian Simulasi
Prinsip Kerja
1. Kondisi awal, Saat sistem dinyalakan:
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):- Flame sensor (push button 1) → simulasi deteksi api
- Float sensor (push button 2) → simulasi level air
- 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)
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
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) {}
}
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.
8. Download File[Kembali]
Rangkaian dan Program Wokwi (Klik Disini)
Video Simulasi (Klik Disini)
HTML (Klik Disini)
Komentar
Posting Komentar