Tugas Pendahuluan 2-M1

[menuju akhir]





1. Prosedur[Kembali]

1. Buka Wokwi dengan mengunjungi https://wokwi.com.

2. Tambahkan komponen.

3. Hubungkan komponen sesuai kondisi

4. Tambahkan atau ketik Program yang sesuai dengan kondisi rangkaian

5. Jalankan program simulasi 

 
2. Hardware dan Diagram Blok[Kembali]

 a. Hardware


STM32 NUCLEO-G474RE


Infrared Sensor


Buzzer


LED RGB


Resistor 1k ohm


Switch


Adaptor


Breadboard

    b. Diagram Blok



3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian Simulasi:


    Prinsip Kerja

1. Kondisi Awal Saat rangkaian dinyalakan dan mendapat suplai dari adaptor melalui breadboard, STM32 NUCLEO-C031C6 melakukan inisialisasi HAL, konfigurasi clock HSI, dan inisialisasi GPIO. Pin PA0 (Switch) dan PA1 (IR Sensor) dikonfigurasi sebagai input dengan pull-down, sedangkan pin PB0, PB1, PB2 (LED RGB) dikonfigurasi sebagai output push-pull.

2. Pembacaan Sensor (Loop Utama) Di dalam while(1), STM32 terus membaca dua sinyal input secara bersamaan:

PA1 membaca ke status Infrared Sensor (mendeteksi benda atau tidak)

PA0 membaca status Switch (ON atau OFF)

3. Logika Kondisi. Sistem mengecek dua syarat secara bersamaan:

IR  == GPIO_PIN_RESET artinya tidak mendeteksi benda

SW  == GPIO_PIN_SET artinya switch dalam posisi ON

Kedua syarat harus terpenuhi agar LED menyala.

4. Output: LED Menyala Orange Warna orange pada LED RGB dihasilkan dengan menyalakan kombinasi merah (PB1) dan hijau (PB0) secara bersamaan, sedangkan biru (PB2) ikut diaktifkan sesuai kode program:

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // Merah

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // Hijau

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); // Buzzer

Kombinasi merah + hijau menghasilkan warna kuning pada LED RGB. Resistor 1k ohm pada masing-masing jalur LED berfungsi membatasi arus agar LED tidak rusak.

5. Kondisi Tidak Terpenuhi Jika IR mendeteksi benda atau switch dalam posisi OFF, maka ketiga pin PB langsung diset RESET sehingga LED padam sepenuhnya, lalu sistem kembali membaca sensor.



4. Flowchart dan Listing Program[Kembali]

a. Flowchart



    b. Listing Program
        
#include "stm32c0xx_hal.h"

// --- DEFINISI PIN ---
#define BUTTON_REVERSE_Pin       GPIO_PIN_0 // PA0
#define BUTTON_REVERSE_GPIO_Port GPIOA

#define IR_SENSOR_Pin            GPIO_PIN_1 // PA1
#define IR_SENSOR_GPIO_Port      GPIOA

// RGB LED
#define LED_R_Pin                GPIO_PIN_0 // PB0
#define LED_G_Pin                GPIO_PIN_1 // PB1
#define LED_B_Pin                GPIO_PIN_2 // PB2
#define LED_GPIO_Port            GPIOB

#define BUZZER_Pin               GPIO_PIN_3 // PB3
#define BUZZER_GPIO_Port         GPIOB

// --- PROTOTIPE ---
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

// --- PROGRAM UTAMA ---
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1)
  {
    // Cek tombol utama
    if (HAL_GPIO_ReadPin(GPIOA, BUTTON_REVERSE_Pin) == GPIO_PIN_RESET)
    {
      // Tidak ada objek (sensor HIGH)
      if (HAL_GPIO_ReadPin(GPIOA, IR_SENSOR_Pin) == GPIO_PIN_SET)
      {
        // >>> SEKARANG JADI MERAH <<<
        HAL_GPIO_WritePin(GPIOB, LED_R_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, LED_G_Pin, GPIO_PIN_RESET);
        HAL_GPIO_WritePin(GPIOB, LED_B_Pin, GPIO_PIN_RESET);

        HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET); // buzzer mati
      }
      // Ada objek (sensor LOW)
      else
      {
        // >>> SEKARANG JADI KUNING (MERAH + HIJAU) <<<
        HAL_GPIO_WritePin(GPIOB, LED_R_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, LED_G_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOB, LED_B_Pin, GPIO_PIN_RESET);

        HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_SET); // buzzer bunyi
      }
    }
    else
    {
      // Semua mati
      HAL_GPIO_WritePin(GPIOB, LED_R_Pin | LED_G_Pin | LED_B_Pin | BUZZER_Pin, GPIO_PIN_RESET);
    }

    HAL_Delay(50);
  }
}

// --- CLOCK ---
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;

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}

// --- GPIO ---
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  // INPUT (PA0 & PA1)
  GPIO_InitStruct.Pin = BUTTON_REVERSE_Pin | IR_SENSOR_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // OUTPUT (RGB + BUZZER)
  GPIO_InitStruct.Pin = LED_R_Pin | LED_G_Pin | LED_B_Pin | BUZZER_Pin;
  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);

  // Default mati
  HAL_GPIO_WritePin(GPIOB, LED_R_Pin | LED_G_Pin | LED_B_Pin | BUZZER_Pin, GPIO_PIN_RESET);
}

         
5. Kondisi[Kembali]

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

6. Video Simulasi[Kembali]








7. Download File[Kembali]

Rangkaian & program wokwi  klik disini
Download video Simulasi klik disini

Tidak ada komentar:

Posting Komentar

Modul 3 Communication

[KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Bahan 4. Dasar Teori 5. Percobaan ...