LAPORAN PROJECT MODUL 4

 

Modul 4 Mikroprocessor dan Mikrokontroler




Pengembangan Sistem Pemantauan dan Perlindungan Panel Surya PV Berbasis STM32 ARM Cortex untuk Kondisi Pascabencana


1. Pendahuluan[Kembali]

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.

2. Tujuan[Kembali]

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


3. Alat dan Bahan[Kembali]

ALAT

  • STM32 F103C8T6


  • XH-W3001 Temperature Controller Module
                                    

  • Sensor Arus ACS712
                                           

  • Sensor MQ-2
                                        

  • Relay Module



  • Fan (220V)

  • LCD 16x2 dengan Driver I2C




  • Buzzer
                                        


  • Resistor
                                        


BAHAN



  • PCB Matrix
                                       

  • Kabel Jumper


4. Dasar Teori[Kembali]

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 / ttotal
Ton             =  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 COMMUNICATION
4.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:

 

Gambar 3. STM32103C8


A. BAGIAN-BAGIAN PENDUKUNG


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

                                                     


Gambar 4. Sensor XH-W3001

  Modul pengontrol suhu (thermostat digital) adalah perangkat elektronika pintar yang digunakan untuk memantau sekaligus mengendalikan suhu lingkungan secara otomatis dan mandiri (standalone). Modul ini bekerja berdasarkan prinsip perubahan nilai resistansi pada komponen probe sensor akibat fluktuasi suhu, yang kemudian diproses oleh unit mikrokontroler internal untuk mengaktifkan atau menonaktifkan sakelar daya elektrik (relay).

Salah satu jenis modul kendali suhu yang sangat umum digunakan untuk kebutuhan pengondisian udara adalah XH-W3001, yang menggunakan sensor fisik berbahan termistor NTC 10K dengan selongsong kedap air (waterproof probe). Modul pengontrol suhu digunakan dalam berbagai aplikasi, mulai dari sistem pendingin komponen mesin industri, pengaturan suhu inkubator penetas telur, hingga sistem proteksi dini pada panel box distribusi daya listrik seperti PLTS. Penggunaan modul ini memungkinkan identifikasi dan penanganan dini terhadap akumulasi panas berlebih (overheating), sehingga pemeliharaan preventif atau pemutusan arus darurat dapat dilakukan secara instan untuk menghindari kerusakan fatal dan risiko kebakaran akibat hubungan arus pendek.


XH-W3001 Temperature Controller ModuleFeatures & Specifications


                            

                                                                         
Gambar 5. Grafik Respon Sensor XH-W3001

4.8 Sensor Gas MQ-2

                                                     




Gambar 6. Sensor MQ-2
  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.

MQ-2 ModuleFeatures & Specifications
                                                        



                            

                                                                      
Gambar 7. Grafik Respon Sensor 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
                                                        


                                        


                                               

                                                                      
Gambar 9. Grafik Respon Sensor ACS712

 

4.10 LCD 16x2 
Gambar 10. LCD 16X2


        Pengertian LCD (Liquid Crystal Display), LCD (Liquid Crystal Display) adalah jenis tampilan layar yang menggunakan senyawa cair yang memiliki struktur molekul polar, ditempatkan di antara dua elektroda transparan. Ketika medan listrik diberikan, molekul-molekul tersebut akan menyesuaikan posisinya pada medan dan membentuk susunan kristalin yang mempolarisasi cahaya yang melaluinya. Citra dihasilkan dengan menggabungkan kondisi nyala dan mati dari piksel-piksel yang membentuk layar LCD. Umumnya, LCD yang dijual di pasaran telah dilengkapi dengan sirkuit terintegrasi sehingga pengguna dapat dengan mudah mengontrol tampilan LCD menggunakan mikrokontroler dan mengirimkan data melalui pin input yang telah tersedia. 

Gambar 11. Stuktur penyusun LCD 



Spesifikasi LCD I2C:
Format tampilan : 16 x 2 karakter
Pengontrol bawaan : ST 7066 (atau setara)
Siklus kerja : 1/16
5 x 8 titik termasuk kursor
Supply + 5 V (juga tersedia untuk + 3 V)
LED dapat digerakkan oleh pin 1, pin 2, pin 15, pin 16 atau A dan K
N.V. opsional untuk supply + 3 V
Kontrol pin : SDA dan SCL
Built-in potensio untuk adjust brightness
Built-in jumper untuk menon-aktifkan backlight
Dimensi : 40mm x 18mm
Berat : 20 gram


Pinout LCD I2C

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



4.11 Buzzer




Gambar 12. Buzzer


        Buzzer merupakan komponen elektronik yang mampu menghasilkan getaran suara dalam bentuk gelombang bunyi. Getaran suara diproduksi saat buzzer menerima tegangan listrik yang sesuai dengan spesifikasi dan karakteristiknya. Buzzer sering digunakan sebagai alarm karena cara penggunaannya yang sederhana: cukup berikan tegangan input untuk menghasilkan getaran suara yang dapat didengar.

Spesifikasi Buzzer:
Tegangan pengoperasian : 5V 
Arus  : ≤30mA 
Keluaran suara pada 10cm : ≥85dB 
Frekuensi resonansi : 2300 ±300Hz 
Nada : Berkelanjutan 
Suhu operasional : -25°C hingga +80°C 
Suhu penyimpanan : -30°C hingga +85°C 
Berat : 2g

Pinout Buzzer:
Pin VCC : Positif
Pin GND : Negatif



4.12 Kabel Jumper


Gambar 13. Jumper

    Kabel jumper adalah kabel elektrik yang memiliki pin konektor di setiap ujungnya dan memungkinkan untuk menghubungkan dua komponen tanpa memerlukan solder. Biasanya kabel jamper digunakan pada breadboard atau alat prototyping lainnya agar lebih mudah untuk mengutak-atik rangkaian. Konektor yang ada pada ujung kabel terdiri atas dua jenis yaitu konektor jantan (male connector) dan konektor betina (female connector).
Jenis-jenis kabel jumper meliputi:
a. Kabel Jumper Male-to-Male (M-M): Kabel ini memiliki konektor male di kedua ujungnya. Digunakan untuk menghubungkan dua titik pada breadboard atau menghubungkan titik pada breadboard dengan pin header pada mikrokontroler atau modul.
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

5. Flowchart[Kembali]





6. Listing Program[Kembali]

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


10. Download File[Kembali]

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]

Tidak ada komentar:

Posting Komentar

      BAHAN PRESENTASI UNTUK MATA KULIAH           OLEH: Farrel Maulana 2310952011 Dosen Pengampu: Darwison, M.T