Laporan Akhir 2

 



1. Prosedur [Kembali]

Kondisi Siaga (Standby):
Pada saat simulasi dijalankan, mikrokontroler melakukan pembacaan awal terhadap status pin input, yaitu PA0 yang terhubung ke sensor sentuh dan PA1 yang terhubung ke sensor IR. Dalam kondisi normal, ketika tidak terdapat sentuhan maupun objek yang terdeteksi, kedua sensor berada pada logika LOW (0). Akibatnya, seluruh aktuator seperti LED dan buzzer berada dalam kondisi tidak aktif (OFF).

Kondisi Input Aktif:
Apabila terjadi interaksi, seperti seseorang menyentuh gagang pintu (sensor sentuh aktif) atau melintasi area deteksi sensor IR, maka sensor yang bersangkutan akan menghasilkan sinyal logika HIGH (1) ke mikrokontroler. Kondisi ini dapat terjadi pada salah satu atau kedua input, misalnya PA0 berubah menjadi HIGH terlebih dahulu.

Tahap Pemrosesan:
Mikrokontroler akan mendeteksi perubahan status logika pada pin input dari LOW menjadi HIGH. Berdasarkan algoritma atau program yang telah ditanamkan, sistem kemudian memproses kondisi tersebut dan menentukan bahwa perlu dilakukan aktivasi sistem peringatan.

Pembangkitan Output:
Sebagai respons, mikrokontroler mengeluarkan sinyal logika HIGH melalui pin output PB0 dan PB1, baik secara simultan maupun sesuai urutan yang ditentukan dalam program.

Kondisi Aktif (Alarm):
Dengan adanya sinyal HIGH pada pin output, arus listrik mengalir ke LED sehingga LED merah menyala sebagai indikator visual, sementara buzzer aktif menghasilkan suara sebagai indikator audio. Keadaan ini akan terus berlangsung selama sinyal input dari sensor masih berada pada kondisi HIGH (logika 1).




2. Hardware dan Diagram Blok [Kembali]






                                                        '' gagal diupload. Invalid response: RpcError

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

                                                    


1. Fase Keadaan Statis (Standby Mode)

Saat simulasi diinisialisasi, mikrokontroler berada dalam tahap pemindaian kontinu terhadap Pin PA0 (Sensor Sentuh) dan Pin PA1 (Sensor IR). Dalam kondisi default atau tanpa gangguan:

  • Input sensor berada pada level tegangan LOW (0).

  • Mikrokontroler mempertahankan status LOW pada seluruh terminal output di Port B.

  • Hasil: Seluruh komponen indikator (LED dan Buzzer) berada dalam keadaan non-aktif untuk efisiensi energi.

2. Fase Triggering (Aktivasi Input)

Interaksi fisik, seperti sentuhan pada modul sensor atau keberadaan objek dalam jangkauan deteksi IR, memicu transisi sinyal. Sensor akan melakukan konversi besaran fisik menjadi sinyal elektrik digital dengan level tegangan HIGH (1) yang dikirimkan ke pin input STM32. Perubahan ini menandakan adanya peristiwa yang memerlukan respons sistem.

3. Fase Komputasi dan Pengambilan Keputusan

Mikrokontroler mendeteksi perubahan status logika melalui algoritma yang berjalan di dalam Infinite Loop. CPU melakukan validasi terhadap sinyal yang masuk; jika logika HIGH terdeteksi pada salah satu atau kedua pin input, sistem akan menghentikan prosedur rutin dan mengeksekusi sub-rutin peringatan sesuai instruksi program yang telah dikompilasi.

4. Fase Eksekusi Output (Signal Dispatching)

Sebagai tindakan korektif, unit logika pusat (ALU) pada mikrokontroler memerintahkan Pin PB0 dan Pin PB1 untuk berubah ke status HIGH. Dalam tahap ini, mikrokontroler berperan sebagai sumber tegangan (source) yang menyuplai arus menuju jalur beban di Port B.

5. Fase Peringatan Aktif (Alarm State)

Logika HIGH pada pin output memicu reaksi berantai pada komponen periferal:

  • LED Merah: Mendapatkan beda potensial yang cukup sehingga memancarkan cahaya sebagai peringatan visual.

  • Buzzer: Mengaktifkan elemen piezoelektrik untuk menghasilkan sinyal suara sebagai peringatan audio.

  • Durasi: Status alarm ini bersifat real-time, yang berarti peringatan akan terus aktif selama kondisi pada sisi input (sensor) tetap terbaca dalam logika HIGH.


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]

                                            

6. Kondisi [Kembali]

Program memiliki 2 kondisi utama (state):

  • System Enable = 1 (aktif)
  • System Enable = 0 (nonaktif)

Status ini dikontrol oleh touch sensor di PA1.

7. Video Simulasi [Kembali]


8. Download File [Kembali]




ANALISA

1. Optimalisasi Seleksi GPIO pada Development Board

Pemilihan pin GPIO (General Purpose Input Output) memerlukan ketelitian karena adanya fitur multiplexing, di mana setiap pin sering kali berbagi jalur dengan periferal lain seperti ADC, I2C, SPI, atau UART. Integrasi yang tidak cermat dapat mengakibatkan konflik sumber daya. Selain itu, aspek keamanan elektrikal sangat krusial; pengembang harus membedakan pin yang bersifat 5V-Tolerant dengan pin standar 3.3V guna mencegah degradasi komponen atau kerusakan permanen akibat overvoltage.

2. Hierarki Konfigurasi I/O pada Ekosistem STM32

Arsitektur STM32 menawarkan kontrol yang lebih presisi namun kompleks dibandingkan platform hobi lainnya. Proses inisialisasi wajib mengikuti urutan teknis: pengaktifan Peripheral Clock Control (RCC), penentuan parameter spesifik (seperti mode, pull-up/pull-down resistor, dan output speed), serta penerapan konfigurasi melalui Hardware Abstraction Layer (HAL). Pendekatan ini menjamin efisiensi penggunaan daya pada tingkat register.

3. Dinamika Level Logika Digital

Secara teknis, interaksi input/output didasarkan pada ambang batas tegangan. Pada fase input, sistem memetakan tegangan mendekati $V_{DD}$ sebagai logika HIGH (1) dan tegangan mendekati $V_{SS}$ sebagai logika LOW (0). Pada fase output, mikrokontroler bertindak sebagai elemen pengendali yang menyuplai arus (sourcing) untuk logika HIGH atau mengalirkannya ke ground (sinking) untuk logika LOW.

4. Modularitas Arsitektur Kode (main.h vs main.c)

Pemisahan antara deklarasi pada header (main.h) dan implementasi pada file sumber (main.c) menciptakan struktur program yang modular. Dengan mendefinisikan label pin secara abstrak pada file header, perubahan tata letak perangkat keras di masa depan menjadi lebih efisien. Hal ini memungkinkan pembaruan konfigurasi tanpa harus melakukan perombakan pada alur logika utama, sehingga meningkatkan maintainability kode.

5. Strategi Respons: Polling vs External Interrupt (EXTI)

Pemilihan metode pembacaan input sangat mempengaruhi performa sistem. Metode Polling melakukan pengecekan status secara siklis, yang berisiko membebani CPU dan mengalami latensi. Sebaliknya, metode Interrupt (EXTI) memungkinkan CPU menjalankan instruksi lain dan hanya merespons saat terjadi transisi sinyal secara instan. Metode interrupt jauh lebih efektif untuk aplikasi kritis yang membutuhkan respons cepat, seperti deteksi bahaya atau sistem alarm.

6. Keunggulan Komputasi Tersemat terhadap Logika Diskrit

Implementasi berbasis mikrokontroler memberikan fleksibilitas melalui Software-Defined Logic. Dibandingkan dengan rangkaian gerbang logika konvensional, satu unit mikrokontroler mampu menggantikan puluhan komponen diskrit, sehingga menyederhanakan desain PCB dan menekan biaya produksi. Selain itu, sistem ini bersifat adaptif, di mana fungsionalitas dapat diperbarui melalui modifikasi perangkat lunak tanpa mengubah infrastruktur fisik sirkuit.


                





Komentar

Postingan populer dari blog ini

Kontrol Rumah Kaca pada Greenhouse

modul 1

Modul 2 Mikro