Laporan Akhir 2 Modul 1 - General Input Output
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:
1. HAL_Init() → inisialisasi sistem
2. SystemClock_Config() → menggunakan clock HSI internal
3. 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);
/* ===== 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) {}
}
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.
Tidak ada komentar:
Posting Komentar