LAPORAN AKHIR 1
MODUL 1
LAPORAN AKHIR 1
1. Prosedur [kembali]
1. Persiapan Kode (Editor Sebelah Kiri)
Pastikan kode program sudah lengkap dan tidak ada error penulisan. Berdasarkan tangkapan layar, kamu sudah mendefinisikan pin berikut:
PA0: Push Button (Gigi Mundur)
PA1: Sensor IR (Objek)
PB0: LED Hijau
PB1: LED Merah
PB2: Buzzer
2. Memulai Simulasi
Klik tombol "Play" (ikon segitiga hijau) yang berada di bagian tengah atas area simulasi.
Wokwi akan melakukan kompilasi kode.
Jika berhasil, status di bagian bawah akan berubah menjadi "Running".
3. Menguji Logika Rangkaian
Setelah simulasi berjalan, kamu bisa melakukan interaksi berikut untuk melihat apakah sistem bekerja sesuai logika if (switchState == HIGH) pada kode:
Langkah A: Aktifkan Sistem (Gigi Mundur) Klik pada Push Button (tombol hijau di kiri atas). Jika ini ditekan, sistem dianggap aktif.
Langkah B: Simulasi Deteksi Objek Klik pada komponen Slide Switch (yang bertindak sebagai Sensor IR di bawah tombol). Geser atau klik untuk mengubah status inputnya.
Langkah C: Amati Output
LED RGB: Perhatikan apakah warna berubah dari Hijau ke Merah saat sensor mendeteksi "objek".
Buzzer: Jika jarak objek terlalu dekat (berdasarkan logika program), komponen bulat hitam di kanan atas akan mengeluarkan animasi gelombang suara.
2. Hardware [kembali]
a) STM32 NUCLEO G474RE
b) LED
c) Buzzer
d) Resistor
e) Flame Sensor
f) Relay
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
Sistem ini dieksekusi secara terus-menerus (dalam blok while(1)) dengan urutan kejadian sebagai berikut:
Langkah 1: Pengecekan Saklar Utama (Tombol) Mikrokontroler STM32 pertama kali akan melihat status tombol di PA0.
Jika tombol TIDAK DITEKAN (LOW), sistem dianggap mati/standby. Mikrokontroler akan secara paksa mematikan aliran listrik ke semua output (LED Merah mati, LED Hijau mati, Buzzer mati) untuk menghemat energi atau memastikan keamanan.
Jika tombol DITEKAN (HIGH), sistem aktif dan lanjut ke Langkah 2.
Langkah 2: Pemantauan Sensor IR Saat sistem aktif, STM32 akan memantau sinyal dari saklar simulasi IR di PA1. Ada dua kemungkinan kondisi:
Kondisi A: Mendeteksi Benda (Bahaya) Jika sensor mensimulasikan ada benda di depannya, ia akan mengirimkan sinyal LOW ke pin PA1.
Respon Sistem: Mikrokontroler mengirimkan tegangan (HIGH) ke pin PB1 dan PB2. Akibatnya, LED Merah menyala dan Buzzer berbunyi sebagai peringatan. Di saat yang sama, tegangan ke PB0 diputus (LOW) sehingga LED Hijau mati.
Kondisi B: Perubahan Menjadi Tidak Mendeteksi Benda (Aman) Sesuai permintaan Anda, jika benda tersebut menjauh dan sensor tidak lagi mendeteksinya, sensor akan mengirimkan sinyal HIGH ke pin PA1.
Respon Sistem: Mikrokontroler langsung memutus tegangan (LOW) dari pin PB1 dan PB2. Akibatnya, LED Merah mati dan Buzzer langsung berhenti berbunyi. Kemudian, tegangan (HIGH) dialirkan ke pin PB0 sehingga LED Hijau menyala, menandakan area sudah aman atau clear.
Singkatnya, tombol berfungsi sebagai izin nyala sistem, sementara sensor (slide switch) bertindak sebagai pemicu untuk menukar kondisi antara "Peringatan (Merah + Bunyi)" dan "Aman (Hijau + Sunyi)".
4. Flowchart dan Listing Program [kembali]
Listing Program :
#include "main.h"
uint8_t system_enable = 1;
uint8_t touch_last = 0;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);
if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)
{
system_enable = !system_enable;
HAL_Delay(200);
}
touch_last = touch_now;
if (system_enable)
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
else
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
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;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
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;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif5. Video Demo [kembali]
6. Kondisi [kembali]
Program ini merepresentasikan sistem proteksi kebakaran + kontrol pompa berbasis dua sensor, yaitu:
- Flame sensor → deteksi api
- Float sensor → deteksi level air (misalnya tangki penuh)
Output yang dikontrol:
- LED → indikator visual
- Buzzer → alarm suara
7. Video Simulasi [kembali]
8. Link Download [kembali]
- Datasheet STM32 NUCLEO-G474RE [Download]
- Datasheet Buzzer [Download]
- Datasheet LED [Download]


Komentar
Posting Komentar