Modul 4 Mikroprocessor dan Mikrokontroler
Pengembangan Sistem Pemantauan dan Perlindungan Panel Surya PV Berbasis STM32 ARM Cortex untuk Kondisi Pascabencana
Energi terbarukan seperti Pembangkit Listrik Tenaga Surya (PLTS) menjadi infrastruktur krusial dalam kondisi pasca-bencana (post-disaster), terutama di daerah seperti Batu Busuk, Padang, yang rentan terhadap gangguan jaringan listrik utama akibat aktivitas tektonik. Pada situasi darurat, keandalan suplai daya dari panel surya sangat bergantung pada kondisi kesehatan komponen di dalam panel box (seperti inverter, Solar Charge Controller, dan baterai).
Namun, panel box PLTS sering kali mengalami beban kerja ekstrem pasca-bencana yang memicu risiko overheating (suhu berlebih), kerusakan isolasi akibat overload arus, hingga potensi bahaya kebakaran dini akibat hubungan arus pendek. Oleh karena itu, proyek ini berfokus pada pengembangan sistem monitoring dan proteksi real-time pada panel box PLTS pak Zaini di Batu Busuk. Dengan menggunakan mikrokontroler STM32 berbasis ARM Cortex, sistem ini dirancang untuk mendeteksi anomali arus dan suhu secara cepat, serta mengeksekusi tindakan preventif berupa pengaktifan kipas pendingin, pemutusan arus via relay, dan bunyi alarm peringatan demi menjaga kontinuitas daya di wilayah terdampak bencana.
- Merancang dan membuat prototipe sistem monitoring serta proteksi panel box PLTS berbasis STM32 ARM Cortex untuk kondisi pasca-bencana.
- Mengintegrasikan sensor ACS712 dan modul XH-W3001 dengan STM32 untuk mendeteksi kondisi overload arus dan overheating secara real-time.
- Mengaplikasikan konsep ADC, GPIO, Interrupt, Non-blocking delay (
HAL_GetTick), dan komunikasi I2C pada arsitektur pemrograman STM32CubeIDE.
ALAT
4.1General Input Output Input adalah semua data dan perintah yang dimasukkan ke dalam memori untuk diproses lebih lanjut oleh mikroprosesor. Sebuah perangkat input adalah komponen piranti keras yang memungkinkan user atau pengguna memasukkan data ke dalam mikroprosesor. Output adalah data hasil yang telah diproses. Perangkat output adalah semua komponen piranti keras yang menyampaikan informasi kepada orang-orang yang menggunakannya. Pada STM32 dan Raspberry Pi Pico pin input/output terdiri dari digital dan analog yang jumlah pin-nya tergantung jenis mikrokontroller yang digunakan. Input digital digunakan untuk mendeteksi perubahan logika biner pada pin tertentu. Adanya input digital memungkinkan mikrokontroler untuk dapat menerjemahkan 0V menjadi logika LOW dan 5V menjadi logika HIGH. Membaca sinyal digital pada mikrokontroller dapat menggunakan sintaks digitalRead(pin): Output digital terdiri dari dua buah logika, yaitu kondisi logika HIGH dan kondisi logika LOW. Untuk menghasilkan output kita dapat menggunakan sintaks digitalWrite(pin,nilai); yang sebelumnya pin sudah diset ke mode OUTPUT, lalu parameter kedua adalah set nilai HIGH atau LOW. Apabila pin diset dengan nilai HIGH, maka voltase pin tersebut akan diset ke 5V atau 3.3V dan bila pin diset ke LOW, maka voltase pin tersebut akan diset ke 0V.
4.2 PWM PWM (Pulse Width Modulation) adalah salah satu teknik modulasi dengan mengubah lebar pulsa (duty cylce) dengan nilai amplitudo dan frekuensi yang tetap. Satu siklus pulsa merupakan kondisi high kemudian berada di zona transisi ke kondisi low. Lebar pulsa PWM berbanding lurus dengan amplitudo sinyal asli yang belum termodulasi. Duty Cycle adalah perbandingan antara waktu ON (lebar pulsa High) dengan perioda. Duty Cycle biasanya dinyatakan dalam bentuk persen (%). Gambar 1. Duty Cycle
Duty Cycle = tON / ttotalTon = Waktu ON atau Waktu dimana tegangan keluaran berada pada posisi tinggi (high atau 1) Toff = Waktu OFF atau Waktu dimana tegangan keluaran berada pada posisi rendah (low atau 0) Ttotal = Waktu satu siklus atau penjumlahan antara Ton dengan Toff atau disebut juga dengan “periode satu gelombang”
Pada Raspberry Pi Pico, terdapat blok PWM yang terdiri dari 8 unit (slice), dan masing-masing slice dapat mengendalikan dua sinyal PWM atau mengukur frekuensi serta duty cycle dari sinyal input. Dengan total 16 output PWM yang dapat dikontrol, semua 30 pin GPIO bisa digunakan untuk PWM. Setiap slice memiliki fitur utama seperti penghitung 16-bit, pembagi clock presisi, dua output independen dengan duty cycle 0–100%, serta mode pengukuran frekuensi dan duty cycle. PWM pada Raspberry Pi Pico juga mendukung pengaturan fase secara presisi serta dapat diaktifkan atau dinonaktifkan secara bersamaan melalui satu register kontrol global, sehingga memungkinkan sinkronisasi beberapa output untuk aplikasi yang lebih kompleks.
4.3 ADC ADC atau Analog to Digital Converter merupakan salah satu perangkat elektronika yang digunakan sebagai penghubung dalam pemrosesan sinyal analog oleh sistem digital. Fungsi utama dari fitur ini adalah mengubah sinyal masukan yang masih dalam bentuk sinyal analog menjadi sinyal digital dengan bentuk kode-kode digital. Raspberry Pi Pico memiliki empat ADC (Analog-to-Digital Converter) 12-bit dengan metode SAR, tetapi hanya tiga kanal yang dapat digunakan secara eksternal, yaitu ADC0, ADC1, dan ADC2, yang terhubung ke pin GP26, GP27, dan GP28. Kanal keempat (ADC4) digunakan secara internal untuk membaca suhu dari sensor suhu bawaan. Konversi ADC dapat dilakukan dalam tiga mode: polling, interrupt, dan FIFO dengan DMA. Kecepatan konversi ADC adalah 2μs per sampel atau 500 ribu sampel per detik (500kS/s). Mikrocontroller RP2040 berjalan pada frekuensi 48MHz yang berasal dari USB PLL, dan setiap konversi ADC membutuhkan 96 siklus CPU, sehingga waktu samplingnya adalah 2μs per sampel.
4.4 Interrupt Interrupt adalah mekanisme yang memungkinkan suatu instruksi atau perangkat I/O untuk menghentikan sementara eksekusi normal prosesor agar dapat diproses lebih dulu seperti memiliki prioritas tertinggi. Misalnya, saat prosesor menjalankan tugas utama, ia juga dapat terus memantau apakah ada kejadian atau sinyal dari sensor yang memicu interrupt. Ketika terjadi interrupt eksternal, prosesor akan menghentikan sementara tugas utamanya untuk menangani interrupt terlebih dahulu, kemudian melanjutkan eksekusi normal setelah selesai menangani interrupt tersebut. Fungsi yang menangani interrupt disebut Interrupt Service Routine (ISR), yang dieksekusi secara otomatis setiap kali interrupt terjadi. Pada RP2040, setiap inti prosesor dilengkapi dengan ARM Nested Vectored Interrupt Controller (NVIC) yang memiliki 32 jalur interrupt. Namun, hanya 26 jalur pertama yang digunakan, sedangkan jalur IRQ 26 hingga 31 tidak aktif. Setiap NVIC menerima interrupt yang sama, kecuali untuk GPIO, di mana setiap bank GPIO memiliki satu interrupt per inti. Ini berarti, misalnya, core 0 dapat menerima interrupt dari GPIO 0 di bank 0, sementara core 1 menerima interrupt dari GPIO 1 di bank yang sama secara independen. Jika diperlukan, inti prosesor masih bisa dipaksa masuk ke interrupt handler dengan menulis bit 26 hingga 31 pada register NVIC ISPR.
4.5 COMMUNICATION4.5.1 I2C (Inter-Integrated Circuit) Inter Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya.Gambar 2. Cara Kerja Komunikasi I2C
Pada I2C, data ditransfer dalam bentuk message yang terdiri dari kondisi start, Address Frame, R/W bit, ACK/NACK bit, Data Frame 1, Data Frame 2, dan kondisi Stop. Kondisi start dimana saat pada SDA beralih dari logika high ke low sebelum SCL. Kondisi stop dimana saat pada SDA beralih dari logika low ke high sebelum SCL. R/W bit berfungsi untuk menentukan apakah master mengirim data ke slave atau meminta data dari slave. (logika 0 = mengirim data ke slave, logika 1 = meminta data dari slave) ACK/NACK bit berfungsi sebagai pemberi kabar jika data frame ataupun address frame telah diterima receiver.
4.6 STM32103C8
STM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain. Adapun spesifikasi dari STM32F4 yang digunakan dalam praktikum ini adalah sebagai berikut:
STM32 F103C8
1. RAM (Random Access Memory)
STM32F103C8 dilengkapi dengan 20KB SRAM on-chip. Kapasitas RAM ini memungkinkan mikrokontroler menjalankan berbagai aplikasi serta menyimpan data sementara selama eksekusi program.
2. Memori Flash Internal
STM32F103C8 memiliki memori flash internal sebesar 64KB atau 128KB, yang digunakan untuk menyimpan firmware dan program pengguna. Memori ini memungkinkan penyimpanan kode program secara permanen tanpa memerlukan media penyimpanan eksternal.
3. Crystal Oscillator
STM32F103C8 menggunakan crystal oscillator eksternal (biasanya 8MHz) yang bekerja dengan PLL untuk meningkatkan frekuensi clock hingga 72MHz. Sinyal clock yang stabil ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya.
4. Regulator Tegangan
STM32F103C8 memiliki sistem pengaturan tegangan internal yang memastikan pasokan daya stabil ke mikrokontroler. Tegangan operasi yang didukung berkisar antara 2.0V hingga 3.6V.
5. Pin GPIO (General Purpose Input/Output)
STM32F103C8 memiliki hingga 37 pin GPIO yang dapat digunakan untuk menghubungkan berbagai perangkat eksternal seperti sensor, motor, LED, serta komunikasi dengan antarmuka seperti UART, SPI, dan I²C.
STM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain. Adapun spesifikasi dari STM32F4 yang digunakan dalam praktikum ini adalah sebagai berikut:
STM32 F103C8
1. RAM (Random Access Memory)
STM32F103C8 dilengkapi dengan 20KB SRAM on-chip. Kapasitas RAM ini memungkinkan mikrokontroler menjalankan berbagai aplikasi serta menyimpan data sementara selama eksekusi program.
2. Memori Flash Internal
STM32F103C8 memiliki memori flash internal sebesar 64KB atau 128KB, yang digunakan untuk menyimpan firmware dan program pengguna. Memori ini memungkinkan penyimpanan kode program secara permanen tanpa memerlukan media penyimpanan eksternal.
3. Crystal Oscillator
STM32F103C8 menggunakan crystal oscillator eksternal (biasanya 8MHz) yang bekerja dengan PLL untuk meningkatkan frekuensi clock hingga 72MHz. Sinyal clock yang stabil ini penting untuk mengatur kecepatan operasi mikrokontroler dan komponen lainnya.
4. Regulator Tegangan
STM32F103C8 memiliki sistem pengaturan tegangan internal yang memastikan pasokan daya stabil ke mikrokontroler. Tegangan operasi yang didukung berkisar antara 2.0V hingga 3.6V.
5. Pin GPIO (General Purpose Input/Output)
STM32F103C8 memiliki hingga 37 pin GPIO yang dapat digunakan untuk menghubungkan berbagai perangkat eksternal seperti sensor, motor, LED, serta komunikasi dengan antarmuka seperti UART, SPI, dan I²C.
4.7 XH-W3001 Temperature Controller Module
4.8 Sensor Gas MQ-2
4.9 Sensor Arus ACS712

Gambar 8 Sensor ACS712
Sensor arus adalah perangkat elektronika yang digunakan untuk mendeteksi dan mengukur kuat arus listrik yang mengalir melalui suatu jalur konduktor. Sensor ini bekerja berdasarkan prinsip Efek Hall (Hall Effect), di mana aliran arus listrik pada jalur tembaga internal akan membangkitkan medan magnet proporsional di sekitarnya, yang kemudian dikonversi oleh IC Hall internal menjadi tegangan analog linear.
Salah satu jenis sensor arus yang umum digunakan dalam modul instrumentasi adalah ACS712, yang mengintegrasikan sirkuit sensor Hall dengan konduktor tembaga berhambatan rendah secara internal. Sensor arus digunakan dalam berbagai aplikasi, mulai dari sistem manajemen pengisian daya baterai, pemantauan konsumsi energi pada mesin industri, hingga sistem proteksi dini dari beban lebih (overload) pada jaringan distribusi listrik. Penggunaan sensor arus memungkinkan identifikasi dan pembacaan dini terhadap lonjakan arus abnormal, sehingga sistem proteksi otomatis seperti pemutusan relay dapat dilakukan secara real-time untuk menghindari kerusakan komponen sensitif (seperti inverter atau baterai) dan mencegah bahaya kebakaran akibat korsleting.
ACS ModuleFeatures & Specifications
Pin name | Pin type | Pin description |
GND | Power | Ground |
VCC | Power | Voltage Input |
SDA | I2C Data | Serial Data |
SCL | I2C Clock | Serial Clock |
A0 | Jumper | I2C Address Selection 1 |
A1 | Jumper | I2C Address Selection 2 |
A2 | Jumper | I2C Address Selection 3 |
Backlight | Jumper | Control Backlight of panel |
b. Kabel Jumper Male-to-Female (M-F): Kabel ini memiliki konektor male di satu ujung dan konektor female di ujung lainnya. Biasanya digunakan untuk menghubungkan pin header pada mikrokontroler atau modul dengan perangkat yang memiliki konektor male.
c. Kabel Jumper Female-to-Female (F-F): Kabel ini memiliki konektor female di kedua ujungnya. Umumnya digunakan untuk menghubungkan dua perangkat yang memiliki konektor male, seperti menghubungkan modul sensor dengan mikrokontroler
#include "main.h"
#include "lcd.h"
#include <string.h>
ADC_HandleTypeDef hadc1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
/*==============================================================================
* FUNGSI KONVERSI
*============================================================================*/
void IntToStr(int num, char* str)
{
int i = 0;
if (num == 0)
{
str[0] = '0';
str[1] = '\0';
return;
}
if (num < 0)
{
str[i++] = '-';
num = -num;
}
int len = 0;
int temp = num;
while (temp > 0)
{
len++;
temp /= 10;
}
for (int j = len - 1; j >= 0; j--)
{
str[i + j] = (num % 10) + '0';
num /= 10;
}
str[i + len] = '\0';
}
void FloatToStr1(float value, char* str)
{
int int_part;
int frac_part;
if (value < 0)
{
*str++ = '-';
value = -value;
}
int_part = (int)value;
frac_part = (int)((value - int_part) * 10 + 0.5);
char int_str[10];
IntToStr(int_part, int_str);
char* p = int_str;
while (*p) *str++ = *p++;
*str++ = '.';
*str++ = frac_part + '0';
*str = '\0';
}
void FloatToStr2(float value, char* str)
{
int int_part;
int frac_part;
if (value < 0)
{
*str++ = '-';
value = -value;
}
int_part = (int)value;
frac_part = (int)((value - int_part) * 100 + 0.5);
char int_str[10];
IntToStr(int_part, int_str);
char* p = int_str;
while (*p) *str++ = *p++;
*str++ = '.';
if (frac_part < 10) *str++ = '0';
*str++ = (frac_part / 10) + '0';
*str++ = (frac_part % 10) + '0';
*str = '\0';
}
/*==============================================================================
* FUNGSI ADC
*============================================================================*/
uint32_t ReadADC(uint32_t channel)
{
ADC_ChannelConfTypeDef sConfig = {0};
uint32_t adc_value = 0;
sConfig.Channel = channel;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
{
adc_value = HAL_ADC_GetValue(&hadc1);
}
HAL_ADC_Stop(&hadc1);
return adc_value;
}
float BacaSuhu(void)
{
uint32_t adc = ReadADC(ADC_CHANNEL_1);
float tegangan = (adc * 3.3f) / 4095.0f;
float suhu = tegangan * 100.0f;
if (suhu < 0) suhu = 0;
if (suhu > 100) suhu = 100;
return suhu;
}
/*
* Baca arus - KALIBRASI BERDASARKAN DATA AKTUAL
*
* Data kalibrasi:
* - ADC = 2047 → Arus = 0.00 A
* - ADC = 1659 → Arus = 2.37 A
*
* Persamaan: Arus = 12.50 - (0.006108 × ADC)
*/
float BacaArus(void)
{
uint32_t adc = ReadADC(ADC_CHANNEL_2);
float arus;
float intercept = 12.50f; /* 12.50 */
float slope = 0.006108f; /* 0.006108 */
arus = intercept - (slope * adc);
/* Batasi range */
if (arus < 0) arus = 0;
if (arus > 5) arus = 5;
return arus;
}
int BacaGas(void)
{
return (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == GPIO_PIN_RESET) ? 1 : 0;
}
/*==============================================================================
* MAIN FUNCTION
*============================================================================*/
int main(void)
{
float suhu;
float arus;
int gas;
int motor;
char buffer[17];
char temp_str[10];
char current_str[10];
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
LCD_Init();
LCD_Clear();
/* Tampilkan pesan awal */
LCD_SetCursor(0, 0);
LCD_Print("System Ready");
LCD_SetCursor(1, 0);
LCD_Print("Monitoring...");
HAL_Delay(2000);
LCD_Clear();
while (1)
{
suhu = BacaSuhu();
arus = BacaArus();
gas = BacaGas();
/* Motor ON jika suhu > 40°C di PB1 */
motor = (suhu > 40.0f) ? 1 : 0;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, motor ? GPIO_PIN_SET : GPIO_PIN_RESET);
/* Buzzer ON jika gas terdeteksi di PB0 */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, gas ? GPIO_PIN_SET : GPIO_PIN_RESET);
/* Tampilkan ke LCD */
FloatToStr1(suhu, temp_str);
FloatToStr2(arus, current_str);
strcpy(buffer, "T:");
strcat(buffer, temp_str);
strcat(buffer, "C I:");
strcat(buffer, current_str);
strcat(buffer, "A");
buffer[16] = '\0';
LCD_SetCursor(0, 0);
LCD_Print(buffer);
LCD_SetCursor(1, 0);
if (gas)
LCD_Print("Gas: DETECTED");
else
LCD_Print("Gas: NORMAL ");
HAL_Delay(500);
}
}
/*==============================================================================
* SYSTEM CLOCK CONFIGURATION
*============================================================================*/
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_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}
static void MX_ADC1_Init(void)
{
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
HAL_ADC_Init(&hadc1);
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/* PA1, PA2: Analog input untuk LM35 dan ACS712 */
GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* PA4: Digital input untuk MQ-2 DOUT */
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* LCD pins: PB3, PB4, PB5, PB6, PB7, PB8 */
GPIO_InitStruct.Pin = GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8;
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);
/* Buzzer PB0, Relay PB1 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* Initial state: OFF */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
void Error_Handler(void)
{
while(1) {}
}
7. Rangkaian Simulasi dan Prototype[Kembali]
Rangkaian Simulasi
Rangkaian Prototype
8. Prinsip Kerja Sistem[Kembali]
Sistem monitoring dan proteksi panel listrik ini menggunakan mikrokontroler STM32F103C8T6 sebagai pusat pengendali yang terhubung dengan sensor suhu XH-W3001, sensor arus ACS712, sensor gas MQ-2, buzzer, dan kipas (fan). Sistem bekerja dengan melakukan pemantauan kondisi panel secara terus-menerus untuk mendeteksi adanya suhu berlebih, arus berlebih, maupun kebocoran gas.
Pada saat sistem diaktifkan, STM32 melakukan inisialisasi seluruh perangkat yang digunakan. Selanjutnya mikrokontroler membaca data dari sensor suhu XH-W3001, sensor arus ACS712, dan sensor gas MQ-2 secara berkala.
Apabila suhu yang terdeteksi mencapai atau melebihi 40°C, maka sistem menganggap kondisi panel mengalami overheat. Dalam kondisi ini, STM32 akan mengaktifkan kipas (fan) untuk membantu menurunkan suhu panel serta mengaktifkan buzzer sebagai alarm peringatan kepada pengguna.
Selain memantau suhu, sistem juga memantau arus listrik menggunakan sensor ACS712. Jika arus yang mengalir melebihi batas normal yang ditentukan (kondisi overload), maka buzzer akan aktif sebagai tanda adanya kelebihan beban yang berpotensi merusak peralatan listrik pada panel.
Sensor MQ-2 digunakan untuk mendeteksi keberadaan gas atau asap di sekitar panel listrik. Ketika sensor mendeteksi adanya gas, sistem akan mengaktifkan buzzer sebagai alarm peringatan sehingga pengguna dapat segera melakukan pemeriksaan dan tindakan pengamanan.
Dalam kondisi normal, yaitu saat suhu berada di bawah 40°C, tidak terjadi overload, dan tidak terdeteksi gas, maka buzzer dan kipas berada pada kondisi mati (OFF). Dengan demikian, sistem mampu memberikan peringatan dini terhadap kondisi overheat, overload, dan kebocoran gas sehingga keamanan serta keandalan panel listrik dapat ditingkatkan.
9. Kesimpulan dan Saran[Kembali]
Berdasarkan kondisi pasca-bencana yang berpotensi menyebabkan gangguan pada jaringan listrik utama, keberadaan Pembangkit Listrik Tenaga Surya (PLTS) menjadi sumber energi alternatif yang sangat penting untuk menjaga kontinuitas pasokan listrik. Namun, keandalan sistem PLTS sangat dipengaruhi oleh kondisi panel box beserta komponen di dalamnya, yang rentan mengalami overheating, overload arus, maupun potensi gangguan yang dapat menyebabkan kerusakan hingga kebakaran.
Oleh karena itu, diperlukan suatu sistem monitoring dan proteksi yang mampu bekerja secara real-time untuk mendeteksi kondisi abnormal pada panel box PLTS. Implementasi sistem berbasis mikrokontroler STM32 yang dilengkapi dengan sensor arus dan suhu serta mekanisme proteksi otomatis berupa kipas pendingin, relay pemutus arus, dan alarm peringatan diharapkan dapat meningkatkan keamanan, memperpanjang umur komponen, serta menjaga kontinuitas suplai daya PLTS pada kondisi darurat pasca-bencana di Batu Busuk, Padang.
Download Rangkaian [Download]
Datasheet Fan [Download]
Datasheet Mq-2 [Download]
Datasheet acs712 [Download]
Datasheet xh-w3001 [Download]
Datasheet Buzzer [Download]
Datasheet LCD [Download]
Datasheet STM32 bluepil [Download]
Datasheet jumper [Download]






.jpeg)



















Tidak ada komentar:
Posting Komentar