MIKRO-LA2-M2




MODUL 2

LAPORAN AKHIR 2


1. Prosedur [kembali]

1. Persiapan Alat dan Bahan

Pastikan semua komponen berikut tersedia sesuai daftar pada gambar:

  • STM32 Nucleo G474RE (sebagai unit pemroses utama).

  • LDR Sensor (untuk mendeteksi intensitas cahaya matahari).

  • PIR Sensor (untuk mendeteksi pergerakan objek/manusia).

  • LED (sebagai simulasi lampu jalan).

  • Push Button (untuk mode darurat/emergency).

  • Resistor, Jumper, dan Breadboard.

2. Perakitan Rangkaian

Sesuai dengan skema pada gambar, hubungkan komponen ke pin mikrokontroler:

  • LDR Sensor: Hubungkan ke pin PA0 (Kanal ADC) untuk membaca tegangan analog berdasarkan intensitas cahaya.

  • PIR Sensor: Hubungkan ke pin PA1 (Input Digital) untuk mendeteksi sinyal pergerakan.

  • LED: Hubungkan ke pin PA6 (TIM3 CH1) agar kecerahannya dapat diatur menggunakan sinyal PWM.

  • Push Button: Hubungkan ke pin PB1 yang dikonfigurasi sebagai External Interrupt (EXTI).

3. Logika Kerja Sistem

Prosedur pengujian mengikuti alur flowchart pada modul:

  • Kondisi Siang Hari: Jika sensor LDR mendeteksi cahaya di atas ambang batas (LDR > Threshold), maka sistem menganggap hari masih siang dan LED akan mati.

  • Kondisi Malam Hari: Jika LDR mendeteksi kondisi gelap (LDR < Threshold), sistem aktif dalam dua tingkat kecerahan:

    • Tanpa Gerakan: Jika PIR tidak mendeteksi objek, LED menyala redup (PWM Dim) untuk menghemat energi.

  • Fitur Interrupt (Emergency Mode): Jika Push Button ditekan, mikrokontroler akan segera menghentikan tugas utama dan masuk ke mode darurat yang memaksa LED mati tanpa mempedulikan sensor lainnya.

4. Pengujian dan Debugging

  • Lakukan kompilasi program menggunakan library HAL dan unggah ke board STM32.

  • Gunaan penutup sensor LDR (untuk simulasi malam) dan lambaikan tangan di depan PIR untuk melihat perubahan kecerahan LED secara otomatis.

2. Hardware dan Diagram Blok [kembali]

STM32 Nucleo G474RE 


LDRsensor

Push button


Motor Servo


Breadboard


Adaptor





3. Rangkaian Simulasi dan Prinsip Kerja [kembali]





Prinsip kerja:

  1. Pembacaan Cahaya (Input Analog): Sensor LDR (Light Dependent Resistor) mendeteksi intensitas cahaya di lingkungan sekitar. Perubahan cahaya ini menghasilkan perubahan tegangan analog yang kemudian dibaca oleh pin mikrokontroler STM32 Nucleo. Fitur ADC (Analog-to-Digital Converter) pada STM32 mengubah tegangan tersebut menjadi angka digital (antara 0 hingga 4095).
  2. Pemrosesan Logika (Proporsional Terbalik): Mikrokontroler akan merespons nilai ADC tersebut secara matematis. Jika lingkungan semakin terang, program menghitung agar target sudut servo semakin kecil (bergerak masuk). Sebaliknya, jika cahaya berkurang (gelap), target sudut servo membesar (bergerak keluar).
  3. Penggerak Jemuran (Output PWM): Hasil perhitungan tersebut dikirimkan ke Motor Servo dalam bentuk sinyal PWM (Pulse Width Modulation). Lebar pulsa sinyal PWM ini (antara 1000 hingga 2000) yang akan memerintahkan motor servo untuk berputar ke sudut tertentu secara presisi, yang merepresentasikan pergerakan jemuran.
  4. Intervensi Manual (Interrupt): Rangkaian ini juga dilengkapi dengan Push Button. Tombol ini dihubungkan ke pin Interrupt. Saat ditekan, mikrokontroler akan menunda tugas otomatisnya sesaat untuk mengeksekusi perintah dari tombol (beralih antara mode otomatis menggunakan LDR atau mode manual yang dikendalikan pengguna).

  • 4. Flowchart dan Listing Program[kembali]






    Pertama, program menyertakan file header utama dan mendefinisikan Handle (hadc1 dan htim3) yang berfungsi sebagai objek pengontrol untuk perangkat keras ADC (untuk membaca sensor) dan Timer. Selanjutnya, terdapat deklarasi variabel global seperti emergency_mode yang menggunakan kualifikasi volatile agar nilainya tetap sinkron saat terjadi interupsi, serta variabel untuk menyimpan status waktu pergerakan terakhir dan status tombol. Terakhir, bagian Parameter menggunakan direktif #define untuk menetapkan nilai ambang batas sensor LDR, durasi timeout sensor gerak, serta level intensitas cahaya LED (mati, redup, atau terang maksimal). Secara keseluruhan, bagian ini mengatur konfigurasi awal dan konstanta yang akan digunakan oleh sistem untuk merespons input sensor secara konsisten.



    Fungsi SystemClock_Config yang bertujuan untuk mengatur sumber detak (clock) utama pada sistem mikrokontroler. Di dalam fungsi ini, program mengaktifkan osilator internal berkecepatan tinggi atau HSI (High Speed Internal) sebagai sumber referensi frekuensi. Selanjutnya, kode tersebut mengonfigurasi jalur distribusi detak sistem (SYSCLK) dan bus internal (HCLK) agar menggunakan sumber HSI tersebut tanpa pembagi frekuensi (division). Seluruh pengaturan ini dilakukan melalui pustaka HAL dengan tingkat latensi memori flash yang diatur ke nol, memastikan mikrokontroler beroperasi dengan ritme waktu yang stabil sejak awal dijalankan.




    Fungsi MX_GPIO_Init yang berfungsi untuk melakukan konfigurasi pin GPIO (General Purpose Input Output) pada mikrokontroler. Pertama, program mengaktifkan detak (clock) untuk port GPIOA dan GPIOB agar pin-pin tersebut dapat beroperasi. Selanjutnya, program mengatur pin PA1 sebagai input untuk sensor PIR dan pin PB1 sebagai input tombol yang dilengkapi dengan resistor pull-up serta fitur interrupt (interupsi) pada tepi sinyal jatuh (falling edge). Pin PA6 dikonfigurasi dalam mode Alternate Function untuk menghasilkan sinyal PWM guna mengontrol intensitas LED melalui Timer 3 (TIM3). Terakhir, sistem mengaktifkan dan mengatur prioritas interupsi pada unit NVIC untuk menangani sinyal dari tombol secara real-time.



    Fungsi MX_ADC1_Init yang digunakan untuk mengonfigurasi unit ADC1 (Analog-to-Digital Converter) pada mikrokontroler. Langkah pertama yang dilakukan adalah mengaktifkan detak (clock) untuk periferal ADC agar modul tersebut dapat beroperasi. Selanjutnya, kode mengatur parameter utama ADC, seperti resolusi data sebesar 12-bit, penyelarasan data ke arah kanan (right alignment), serta menonaktifkan mode pemindaian (scan) dan konversi berkelanjutan (continuous conversion). Terakhir, program mengonfigurasi saluran spesifik, yaitu Channel 0, sebagai saluran reguler dengan prioritas peringkat pertama (Rank 1) agar siap digunakan untuk membaca nilai analog dari sensor.




    Bagian program dalam berkas image_ffaba2.png (beserta lanjutannya) merupakan fungsi MX_TIM3_Init yang dirancang untuk mengonfigurasi Timer 3 agar beroperasi dalam mode PWM (Pulse Width Modulation). Tahap awal dimulai dengan mengaktifkan detak (clock) untuk periferal TIM3 melalui makro __HAL_RCC_TIM3_CLK_ENABLE(). Selanjutnya, timer dikonfigurasi dengan nilai prescaler 64 dan period 1000 menggunakan mode hitung naik (counter mode up) untuk menentukan frekuensi dasar sinyal. Pada bagian akhir, program mengatur parameter Output Compare pada Channel 1 dengan mode PWM1 dan nilai pulse awal nol, yang nantinya memungkinkan sistem untuk mengontrol intensitas komponen seperti LED melalui lebar pulsa sinyal tersebut secara presisi.



    Fungsi interupsi dan fungsi pembantu (helper) untuk mengelola input-output sistem. Pertama, terdapat fungsi HAL_GPIO_EXTI_Callback yang berfungsi sebagai penangan interupsi eksternal; ketika tombol pada GPIO_PIN_1 ditekan, program akan membalikkan status variabel emergency_mode (dari aktif ke non-aktif atau sebaliknya) secara instan. Kedua, fungsi read_LDR digunakan untuk mengambil data intensitas cahaya dengan cara memulai konversi ADC, menunggu hingga proses selesai, dan mengembalikan nilai digital yang terbaca. Terakhir, fungsi set_LED bertugas mengatur tingkat kecerahan LED melalui sinyal PWM pada saluran 1 Timer 3, di mana nilai parameter yang dimasukkan akan menentukan lebar pulsa atau intensitas cahaya yang dihasilkan.




    Merupakan fungsi utama (main) yang mengatur alur logika sistem otomasi lampu secara keseluruhan. Program dimulai dengan inisialisasi library HAL, konfigurasi clock sistem, serta inisialisasi periferal GPIO, ADC1, dan TIM3, diikuti dengan pengaktifan sinyal PWM pada saluran 1 Timer 3. Di dalam loop utama (while(1)), program terus-menerus memantau status tombol fallback untuk mengubah status emergency_mode. Jika mode darurat aktif, lampu LED akan dimatikan secara paksa. Namun, dalam kondisi normal, sistem akan membaca sensor LDR dan PIR; jika hari siang (nilai LDR di bawah ambang batas), lampu tetap mati. Sebaliknya, pada kondisi malam, lampu akan menyala terang (LED_FULL) jika terdeteksi gerakan oleh sensor PIR dan akan meredup (LED_DIM) secara otomatis jika tidak ada gerakan setelah melewati batas waktu tertentu (timeout). Keseluruhan siklus ini berjalan secara repetitif dengan jeda waktu singkat 100ms untuk menjaga stabilitas pembacaan.



    File header (main.h) yang berfungsi untuk mendefinisikan konfigurasi pin dan prototipe fungsi pada proyek mikrokontroler STM32. Bagian atas program menyertakan library HAL (stm32c0xx_hal.h) dan menggunakan include guard untuk mencegah duplikasi definisi. Di dalam bagian Pin Definitions, program memetakan komponen fisik ke pin GPIO tertentu menggunakan instruksi #define, seperti sensor LDR pada pin PA0, sensor PIR pada PA1, tombol interupsi pada PB1, dan output LED PWM pada PA6 (TIM3_CH1). Terakhir, bagian Function Prototypes mencantumkan deklarasi fungsi-fungsi utama seperti konfigurasi detak sistem (SystemClock_Config) serta inisialisasi GPIO, ADC, dan Timer yang akan diimplementasikan di berkas program utama.


    5. Video Demo[kembali]


    Analisa:

    6. Kondisi [kembali]

    -

    7. Video Simulasi [kembali]






    8. Download File [kembali]


    Komentar

    Postingan populer dari blog ini

    2.13