MODUL 1

TUGAS PENDAHULUAN 2


1. Prosedur [Kembali]

  1. Rangkai komponen sesuai gambar pada modul menggunakan platform Wokwi.com.

  2. Buka STM32CubeIDE, kemudian pilih opsi New STM32 Project.

  3. Pada menu BOARD SELECTOR, cari dan pilih papan STM32 Nucleo G474RE.

  4. Atur konfigurasi pin pada file .ioc sesuai kebutuhan rangkaian yang telah dirancang.

  5. Lakukan Generate Code, lalu masukkan kode program yang diperlukan ke dalam file main.c dan main.h.

  6. Klik Build Project untuk mengkompilasi proyek.

  7. Ambil file main.c dan main.h yang telah selesai di-generate, lalu masukkan kedua file tersebut ke dalam komponen STM32 Nucleo G474RE di Wokwi.

  8. Jalankan simulasi rangkaian dengan menekan tombol Run di Wokwi.


2. Hardware dan Diagram Blok [Kembali]

A. Hardware
  • STM32 NUCLEO-G474RE


  • Infrared Sensor 


  • Buzzer 


  • LED


  • Switch 


  • Adaptor 


  • Breadboard




  • Buzzer 


  • Resistor  

B. Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja  [Kembali]

A. Rangkaian Simulasi


B. Prinsip Kerja


Sistem ini menggunakan mikrokontroler STM32 Nucleo G474RE yang diprogram untuk membaca dua buah input, yaitu push button (saklar) pada pin PA0 dan sensor IR pada pin PA1, serta mengendalikan tiga output berupa LED Hijau (PB0), LED Merah (PB1), dan Buzzer (PB2). Kedua input dikonfigurasi dengan pull-down internal, sehingga dalam kondisi tidak aktif, pin input akan membaca logika 0 (rendah), dan ketika ditekan atau mendeteksi benda akan membaca logika 1 (tinggi).

Prinsip kerja utama dari sistem ini adalah menyalakan LED berwarna orange (kombinasi LED merah dan hijau) hanya ketika saklar dalam keadaan ON (ditekan) dan sensor IR tidak mendeteksi adanya benda di depannya. Pada kondisi ini, mikrokontroler akan mengaktifkan kedua LED secara bersamaan dengan cara menulis logika 1 ke pin PB0 dan PB1 melalui register BSRR, sehingga menghasilkan cahaya berwarna orange. Sementara itu, buzzer dibuat dalam keadaan mati.

Apabila kondisi tersebut tidak terpenuhi, yaitu ketika saklar dalam keadaan OFF (tidak ditekan) atau sensor IR mendeteksi adanya benda, maka mikrokontroler akan mematikan semua output. Pemadaman dilakukan dengan menulis logika 1 ke bit reset (bit ke-16) pada register BSRR untuk masing-masing pin PB0, PB1, dan PB2, yang menyebabkan ketiga output tersebut menjadi rendah (mati).

Dengan demikian, sistem ini dapat digunakan untuk aplikasi sederhana seperti indikator jalur yang aman (misalnya pada konveyor atau pintu otomatis), di mana LED orange menyala sebagai tanda bahwa saklar sistem aktif dan tidak ada halangan di depan sensor, sedangkan jika ada benda terdeteksi atau saklar dimatikan, semua indikator padam sebagai tanda kondisi tidak aktif atau terhalang.

4. Flowchart dan Listing Program  [Kembali]

A. Flowchart


B. Listing Program

#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

/* Definisi Pin Input */
#define BUTTON_REVERSE_Pin       0
#define BUTTON_REVERSE_GPIO_Port GPIOA

#define IR_SENSOR_Pin            1
#define IR_SENSOR_GPIO_Port      GPIOA

/* Definisi Pin Output */
#define LED_GREEN_Pin            0
#define LED_GREEN_GPIO_Port      GPIOB

#define LED_RED_Pin              1
#define LED_RED_GPIO_Port        GPIOB

#define BUZZER_Pin               2
#define BUZZER_GPIO_Port         GPIOB

/* Fungsi delay sederhana */
void delay_ms(uint32_t ms);

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */


/* ============================
   TAMBAHKAN BAGIAN INI DI BAWAH
   ============================ */

#include "stm32c0xx.h"

void delay_ms(uint32_t ms) {
    volatile uint32_t count;
    while (ms--) {
        count = 8000;
        while (count--) __asm__("nop");
    }
}

int main(void)
{
    /* Enable clock GPIOA dan GPIOB */
    RCC->IOPENR |= (1 << 0);   // GPIOAEN
    RCC->IOPENR |= (1 << 1);   // GPIOBEN

    /* PA0 = BUTTON sebagai input */
    GPIOA->MODER &= ~(3 << (BUTTON_REVERSE_Pin * 2));
    GPIOA->PUPDR &= ~(3 << (BUTTON_REVERSE_Pin * 2));
    GPIOA->PUPDR |=  (2 << (BUTTON_REVERSE_Pin * 2));   // pull-down

    /* PA1 = IR SENSOR sebagai input */
    GPIOA->MODER &= ~(3 << (IR_SENSOR_Pin * 2));
    GPIOA->PUPDR &= ~(3 << (IR_SENSOR_Pin * 2));
    GPIOA->PUPDR |=  (2 << (IR_SENSOR_Pin * 2));        // pull-down

    /* PB0, PB1, PB2 = output */
    GPIOB->MODER &= ~(3 << (LED_GREEN_Pin * 2));
    GPIOB->MODER |=  (1 << (LED_GREEN_Pin * 2));

    GPIOB->MODER &= ~(3 << (LED_RED_Pin * 2));
    GPIOB->MODER |=  (1 << (LED_RED_Pin * 2));

    GPIOB->MODER &= ~(3 << (BUZZER_Pin * 2));
    GPIOB->MODER |=  (1 << (BUZZER_Pin * 2));

    while (1)
    {
        uint8_t switch_state = (GPIOA->IDR & (1 << BUTTON_REVERSE_Pin)) ? 1 : 0;
        uint8_t ir_state     = (GPIOA->IDR & (1 << IR_SENSOR_Pin)) ? 1 : 0;

        /*
           Kondisi:
           switch ON dan IR tidak mendeteksi benda
           => LED orange menyala
        */
        if (switch_state == 1 && ir_state == 0)
        {
            /* Orange = merah + hijau */
            GPIOB->BSRR = (1 << LED_RED_Pin);
            GPIOB->BSRR = (1 << LED_GREEN_Pin);

            /* Buzzer mati */
            GPIOB->BSRR = (1 << (BUZZER_Pin + 16));
        }
        else
        {
            /* Semua mati */
            GPIOB->BSRR = (1 << (LED_RED_Pin + 16));
            GPIOB->BSRR = (1 << (LED_GREEN_Pin + 16));
            GPIOB->BSRR = (1 << (BUZZER_Pin + 16));
        }
    }
}


5. Video Demo [Kembali]



6. Kondisi  [Kembali]

Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika Infrared sensor tidak mendeteksi benda dan switch on, maka LED menyala orange

7. Video Simulasi  [Kembali]



8. Download File  [Kembali]



Komentar

Postingan populer dari blog ini