Laporan Akhir 2
- Siapkan seluruh komponen yang dibutuhkan.
- Rangkai komponen sesuai dengan gambar yang ada di modul.
- Pastikan semua koneksi sudah sesuai, tidak ada kabel yang longgar atau terbalik.
- Buka software STM32CubeIDE lalu lakukan konfigurasi pin pada STM untuk menentukan GPIO input dan GPIO output
- Masukan Program ke dalam software STM32CubeIDE lalu build untuk memastikan tidak ada program yang error
- Hubungkan board STM32 ke komputer, lalu lakukan pemrograman sesuai dengan flowchart yang telah dibuat.
- Setelah program berhasil di-upload, silahkan run untuk memastikan logika dan rangkaian sudah benar.
2. Hardware dan Diagram Blok[Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
- Rangkaian Simulasi
- Prinsip Kerja
1. Tahap Persiapan (Inisialisasi)
Saat sistem pertama kali dijalankan, mikrokontroler melakukan inisialisasi:
Menentukan pin input:- Flame Sensor (deteksi api)
- Sensor level air (float/tangki)
Menentukan pin output:
- Relay (pompa)
- Buzzer
- LED
Tahap ini memastikan semua komponen siap digunakan
2. Tahap Monitoring Sistem (Loop Utama)
Setelah inisialisasi selesai, sistem masuk ke loop utama (berjalan terus-menerus).
Di tahap ini, mikrokontroler akan terus:- Membaca semua sensor
- Mengambil keputusan berdasarkan kondisi
3. Tahap Pengecekan Keamanan (Prioritas Utama)
Sebelum menjalankan fungsi utama, sistem selalu mengecek kondisi keamanan:
Objek: Flame Sensor
Jika YA (Terdeteksi Api):
- Pompa = OFF
- Buzzer = ON
- LED = ON
- Sistem masuk mode darurat (prioritas utama)
Jika TIDAK (Aman):
- Sistem lanjut ke pengecekan berikutnya (level air)
4. Tahap Pengecekan Level Air (Operasional Normal)
Dilakukan hanya jika kondisi aman dari api.
Kondisi: Sensor Level Air
Jika YA (Tangki Penuh):
- Pompa = OFF (mencegah overflow)
Jika TIDAK (Tangki Belum Penuh):
- Pompa = ON (mengisi tangki)
5. Kembali ke Monitoring
Setelah itu, sistem kembali lagi ke:- Tahap monitoring
- Mengulang proses dari pengecekan keamanan
4. Flowchart dan Listing Program[Kembali]
Listing Program:
#include "main.h"
void SystemClock_Config(void);
void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{GPIO_PinState flame_state = HAL_GPIO_ReadPin(FLAME_PORT, FLAME_PIN);
GPIO_PinState float_state = HAL_GPIO_ReadPin(FLOAT_PORT, FLOAT_PIN);
/* ===== LOGIKA ALARM (FLAME SENSOR) ===== */
// Jika api terdeteksi, LED dan Buzzer menyala
if (flame_state == GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_SET);
}
else
{
// Sebaliknya: Api tidak ada, LED dan Buzzer mati
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
HAL_GPIO_WritePin(BUZZER_PORT, BUZZER_PIN, GPIO_PIN_RESET);
}
/* ===== LOGIKA POMPA (FLOAT SENSOR) ===== */
// Jika float terdeteksi (tangki penuh), pompa MATI
if (float_state == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_RESET);
}
else
{
// Sebaliknya: Float tidak terdeteksi (tangki kosong), pompa HIDUP
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
}
HAL_Delay(100);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/* Voltage scaling */
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
/* HSI Oscillator */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* Clock configuration */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
}
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
/* INPUT: Flame & Float sensor */
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: 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);
/* Relay default ON (pompa hidup) */
HAL_GPIO_WritePin(RELAY_PORT, RELAY_PIN, GPIO_PIN_SET);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
HAL_GPIO_TogglePin(LED_PORT, LED_PIN);
HAL_Delay(200);
}
}
- Download File Rangkaian (klik disini)
- Download Datasheet Touch Sensor (klik disini)
- Download Datasheet Infrared Sensor (klik disini)
- Download Datasheet Resistor (klik disini)
- Download Datasheet LED (klik disini)
- Download Datasheet Buzzer (klik disini)



Tidak ada komentar:
Posting Komentar