Laporan Akhir 1

                                                     [KEMBALI KE MENU SEBELUMNYA]



1. Prosedur [Kembali]

 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

 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".

 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 dan Diagram Blok [Kembali]






  1. Microcontroller: STM32 Nucleo-C031C6 (Otak pemrosesan).

  2. Input: * Push Button (Simulasi Sakelar Gigi Mundur).

    • Slide Switch/IR Sensor (Simulasi deteksi halangan).

  3. Output: * LED RGB (Indikator visual: Hijau aman, Merah bahaya).

    • Buzzer (Peringatan suara).

  4. Komponen Pendukung: Resistor (Pull-down untuk input yang stabil).

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]


                                        

Tentu, ini adalah parafrase dari deskripsi sistem STM32 tersebut agar lebih profesional, terstruktur, dan mudah dipahami untuk kebutuhan dokumentasi teknis maupun laporan proyek:


Deskripsi Operasional Sistem Keamanan Berbasis STM32

Sistem ini bekerja secara iteratif dalam siklus Infinite Loop (while(1)), di mana logika kontrol dipisahkan menjadi dua tahapan utama: kendali daya sistem dan kendali peringatan berbasis sensor.

1. Kendali Aktivasi (Main Power Switch)

Mikrokontroler melakukan pemindaian awal pada Pin PA0 untuk menentukan status operasional sistem:

  • Mode Standby (Input LOW): Jika tombol tidak ditekan, sistem memasuki mode non-aktif. Seluruh output pada Port B (PB0, PB1, PB2) dipaksa ke kondisi LOW. Hal ini menjamin LED Merah, LED Hijau, dan Buzzer dalam keadaan mati total untuk efisiensi daya.

  • Mode Aktif (Input HIGH): Jika tombol ditekan, sistem mendapatkan izin operasional untuk melanjutkan ke tahap pemantauan sensor.

2. Logika Deteksi Sensor IR (Monitoring Tahap Kedua)

Ketika sistem dalam posisi aktif, mikrokontroler mengevaluasi sinyal dari simulasi sensor IR pada Pin PA1 dengan pembagian kondisi sebagai berikut:

A. Status Bahaya (Objek Terdeteksi)

Jika sensor mengirimkan sinyal LOW (logika Active Low untuk deteksi benda):

  • Output Peringatan: Pin PB1 (LED Merah) dan PB2 (Buzzer) diatur ke status HIGH (Aktif).

  • Output Indikator: Pin PB0 (LED Hijau) dimatikan (LOW).

  • Hasil: Sistem memberikan peringatan visual dan audio secara simultan.

B. Status Aman (Clear Area)

Jika objek menjauh dan sensor mengirimkan sinyal HIGH:

  • Output Peringatan: Arus ke Pin PB1 dan PB2 segera diputus (LOW), sehingga LED Merah mati dan Buzzer berhenti berbunyi.

  • Output Indikator: Pin PB0 (LED Hijau) diaktifkan (HIGH).

  • Hasil: Sistem memberikan sinyal visual bahwa kondisi telah kembali normal atau aman.



Gemini berkata

Tentu, ini adalah parafrase dari deskripsi sistem STM32 tersebut agar lebih profesional, terstruktur, dan mudah dipahami untuk kebutuhan dokumentasi teknis maupun laporan proyek:

Deskripsi Operasional Sistem Keamanan Berbasis STM32

Sistem ini bekerja secara iteratif dalam siklus Infinite Loop (while(1)), di mana logika kontrol dipisahkan menjadi dua tahapan utama: kendali daya sistem dan kendali peringatan berbasis sensor.

1. Kendali Aktivasi (Main Power Switch)

Mikrokontroler melakukan pemindaian awal pada Pin PA0 untuk menentukan status operasional sistem:

  • Mode Standby (Input LOW): Jika tombol tidak ditekan, sistem memasuki mode non-aktif. Seluruh output pada Port B (PB0, PB1, PB2) dipaksa ke kondisi LOW. Hal ini menjamin LED Merah, LED Hijau, dan Buzzer dalam keadaan mati total untuk efisiensi daya.

  • Mode Aktif (Input HIGH): Jika tombol ditekan, sistem mendapatkan izin operasional untuk melanjutkan ke tahap pemantauan sensor.


2. Logika Deteksi Sensor IR (Monitoring Tahap Kedua)

Ketika sistem dalam posisi aktif, mikrokontroler mengevaluasi sinyal dari simulasi sensor IR pada Pin PA1 dengan pembagian kondisi sebagai berikut:

A. Status Bahaya (Objek Terdeteksi)

Jika sensor mengirimkan sinyal LOW (logika Active Low untuk deteksi benda):

  • Output Peringatan: Pin PB1 (LED Merah) dan PB2 (Buzzer) diatur ke status HIGH (Aktif).

  • Output Indikator: Pin PB0 (LED Hijau) dimatikan (LOW).

  • Hasil: Sistem memberikan peringatan visual dan audio secara simultan.

B. Status Aman (Clear Area)

Jika objek menjauh dan sensor mengirimkan sinyal HIGH:

  • Output Peringatan: Arus ke Pin PB1 dan PB2 segera diputus (LOW), sehingga LED Merah mati dan Buzzer berhenti berbunyi.

  • Output Indikator: Pin PB0 (LED Hijau) diaktifkan (HIGH).

  • Hasil: Sistem memberikan sinyal visual bahwa kondisi telah kembali normal atau aman.


Tabel Ringkasan Logika Pin

KomponenPinFungsiKondisi BahayaKondisi Aman
Tombol UtamaPA0Aktivasi SistemHIGHHIGH
Sensor IRPA1Deteksi ObjekLOWHIGH
LED HijauPB0Indikator AmanOFFON
LED MerahPB1Indikator BahayaONOFF
BuzzerPB2Alarm AudioON

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) { } #endif

5. Video Demo [Kembali]


5. 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. Download File [Kembali]


Gemini berkat

Analisa

1. Strategi Alokasi GPIO pada Development Board

Pemilihan pin GPIO (General Purpose Input Output) memerlukan perencanaan yang matang karena adanya fitur multiplexing, di mana satu pin dapat berfungsi sebagai input analog (ADC), protokol komunikasi (I2C/SPI), atau I/O digital. Integrasi yang tidak tepat dapat menyebabkan konflik periferal. Selain itu, aspek keamanan elektrikal sangat krusial; pengembang harus memastikan pin yang digunakan bersifat 5V-Tolerant jika berhadapan dengan sensor luar, guna menghindari kerusakan permanen akibat perbedaan level logika (3.3V vs 5V).

2. Hierarki Konfigurasi Pin I/O STM32

Berbeda dengan abstraksi sederhana pada Arduino, konfigurasi STM32 melibatkan manajemen sumber daya yang lebih mendalam. Langkah-langkahnya mencakup aktivasi Peripheral Clock Control (melalui RCC), penentuan karakteristik fisik pin (seperti pull-up/pull-down resistor dan output speed), serta inisialisasi melalui Hardware Abstraction Layer (HAL). Pendekatan ini memberikan kendali penuh terhadap konsumsi daya dan performa tiap pin.

3. Dinamika Sinyal Digital (Input/Output)

Secara teknis, mikrokontroler bekerja dengan memetakan level tegangan fisik ke dalam domain logika digital. Ambang tegangan mendekati (3.3V) diterjemahkan sebagai logika 1 (HIGH), sedangkan tegangan mendekati (0V) sebagai logika 0 (LOW). Pada sisi output, efektivitas beban (LED dan Buzzer) bergantung pada kemampuan pin dalam melakukan sourcing (menyuplai arus) atau sinking (menyerap arus) untuk mencapai level tegangan yang diinginkan.

4. Modularitas Kode: Sinergi main.h dan main.c

Pemisahan antara deklarasi (main.h) dan implementasi (main.c) menciptakan struktur kode yang modular. Dengan mendefinisikan alias atau label pin di dalam file header, perubahan tata letak perangkat keras di masa depan tidak akan mengganggu logika utama program. Hal ini mempermudah pemeliharaan kode (maintainability) dan portabilitas sistem.

5. Optimasi Respons: Polling vs Interrupt

Dalam mendeteksi sinyal, metode Polling (pemeriksaan rutin dalam loop) sering kali kurang efisien dan berisiko mengalami latensi. Sebagai alternatif, penggunaan External Interrupt (EXTI) jauh lebih unggul untuk aplikasi kritis seperti alarm. Dengan interrupt, CPU dapat menjalankan tugas lain dan hanya akan beralih ke rutin penanganan (ISR) saat terjadi perubahan transisi sinyal secara instan, sehingga meningkatkan efisiensi daya dan kecepatan respons.

6. Keunggulan Komputasi terhadap Logika Diskrit

Penggunaan mikrokontroler menggeser paradigma dari hard-wired logic ke software-defined logic. Fleksibilitas ini memungkinkan perubahan fungsionalitas sistem hanya melalui pembaruan firmware tanpa modifikasi sirkuit fisik. Selain menyederhanakan desain PCB dan menekan biaya produksi, mikrokontroler mampu menangani algoritma yang jauh lebih kompleks dan adaptif dibandingkan rangkaian gerbang logika konvensional.

                                                    





Komentar

Postingan populer dari blog ini

Kontrol Rumah Kaca pada Greenhouse

modul 1

Modul 2 Mikro