TUGAS PENDAHULUAN 2



MODUL 1 PERCOBAAN 2


1. Prosedur [Kembali]

Untuk menjalankan dan memvalidasi simulasi rangkaian pada platform seperti Wokwi, prosedur berikut harus dilakukan secara berurutan:

  1. Persiapan Lingkungan Simulasi: Buka platform simulator sirkuit elektronik (misalnya Wokwi) dan buat proyek baru dengan memilih papan mikrokontroler STM32 (khususnya seri Nucleo C031C6 jika tersedia, atau seri STM32 yang kompatibel).

  2. Perakitan Perangkat Keras (Wiring): * Hubungkan komponen Push Button ke pin PA0 dan sumber tegangan/GND melalui resistor (konfigurasi pull-down eksternal atau sesuai gambar).

    • Hubungkan Slide Switch (sebagai simulator sensor IR) ke pin PA1.

    • Hubungkan anoda LED Hijau ke pin PB0 dan anoda LED Merah ke pin PB1 (keduanya dihubungkan ke GND melalui resistor pembatas arus).

    • Hubungkan terminal positif Buzzer ke pin PB2 dan terminal negatifnya ke GND.

  3. Kompilasi Kode Program: Salin seluruh kode C (berbasis STM32 HAL) yang telah disediakan ke dalam editor teks pada simulator.

  4. Eksekusi Simulasi: Tekan tombol "Play" atau "Start Simulation" untuk mengkompilasi kode dan menjalankan mikrokontroler secara virtual.

  5. Pengujian Interaktif: Aktifkan Push Button di pin PA0 untuk menyalakan sistem.

    • Ubah status Slide Switch di pin PA1 untuk menyimulasikan transisi antara kondisi "tidak mendeteksi objek" dan "mendeteksi objek", lalu amati respons keluaran pada LED dan Buzzer.


2. Hardware dan Diagram Blok [Kembali]

 a) STM32 NUCLEO G474RE


    b) LED



    c) Buzzer



    d) Resistor



    e) Infrared Sensor



    f) Switch



       g) Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Alur kerja sistem ini didasarkan pada siklus pemindaian input (input scanning) dan eksekusi logika kontrol pada unit pemroses pusat (MCU) STM32 Nucleo C031C6. Secara fundamental, sistem beroperasi dalam struktur algoritma sekuensial yang berada di dalam infinite loop while(1).

1. Tahap Inisialisasi dan Penentuan Status Awal Pada saat catu daya diberikan, mikrokontroler mengeksekusi fungsi HAL_Init() dan SystemClock_Config() untuk menstabilkan frekuensi kerja internal. Selanjutnya, fungsi MX_GPIO_Init() menetapkan konfigurasi pin; di mana Port A (PA0 dan PA1) dikonfigurasi sebagai input dengan resistor pull-down internal, sementara Port B (PB0, PB1, dan PB2) ditetapkan sebagai output push-pull. Status awal sistem adalah idle, di mana semua pin keluaran diberikan logika RESET (0V) untuk memastikan seluruh aktuator dalam kondisi nonaktif.

2. Evaluasi Saklar Kendali Utama (Gating Logic) Sistem menerapkan hierarki kontrol di mana pin PA0 (BUTTON_REVERSE_Pin / Switch) bertindak sebagai saklar aktivasi utama. Mikrokontroler melakukan pembacaan digital pada pin ini:

  • Logika LOW (0): Jika saklar utama tidak aktif, sistem secara otomatis masuk ke mode standby, mematikan seluruh LED dan Buzzer melalui perintah HAL_GPIO_WritePin dengan parameter GPIO_PIN_RESET.

  • Logika HIGH (1): Jika saklar utama aktif (switch on), sistem diberikan izin untuk melanjutkan ke tahap evaluasi sensor inframerah.

3. Pemrosesan Data Sensor dan Respons Aktuator Ketika saklar utama aktif, mikrokontroler beralih memantau pin PA1 (IR_SENSOR_Pin). Terdapat dua kondisi transisi yang diatur oleh logika percabangan if-else:

  • Kondisi Mendeteksi Benda: Apabila pin PA1 mendeteksi objek (berubah ke logika RESET/0V akibat sifat active-low), mikrokontroler akan memicu protokol indikasi. Sistem merespons dengan memberikan tegangan tinggi (SET) pada LED Hijau (PB0) sehingga menyala sebagai penanda bahwa benda telah terdeteksi.

  • Kondisi Tidak Mendeteksi Benda: Apabila pin PA1 menerima sinyal digital berlogika SET (VCC), mikrokontroler menginterpretasikan bahwa tidak ada objek yang menghalangi lintasan sensor. Respons sistem adalah mematikan LED Hijau (PB0) (dan aktuator lainnya) untuk kembali ke status aman.

4. Stabilisasi Siklus (Debouncing & Timing) Pada akhir setiap siklus instruksi, sistem mengimplementasikan fungsi HAL_Delay(50). Penundaan waktu sebesar 50 milidetik ini sangat krusial dalam sistem kendali tertanam untuk menjaga stabilitas pembacaan sensor dari gangguan derau (noise) elektrik serta mencegah terjadinya flickering atau fluktuasi cepat pada aktuator akibat perubahan status logika yang sangat singkat di terminal input.


Listing Program :

#include "stm32c0xx_hal.h"

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

#define IR_SENSOR_Pin            GPIO_PIN_1
#define IR_SENSOR_GPIO_Port      GPIOA

#define LED_GREEN_Pin            GPIO_PIN_0
#define LED_GREEN_GPIO_Port      GPIOB

#define LED_RED_Pin              GPIO_PIN_1
#define LED_RED_GPIO_Port        GPIOB

#define BUZZER_Pin               GPIO_PIN_2
#define BUZZER_GPIO_Port         GPIOB

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 switch (ON = HIGH)
  if (HAL_GPIO_ReadPin(GPIOA, BUTTON_REVERSE_Pin) == GPIO_PIN_SET)
  {
    // Cek IR (LOW = deteksi)
    if (HAL_GPIO_ReadPin(GPIOA, IR_SENSOR_Pin) == GPIO_PIN_RESET)
    {
      // ✅ KONDISI UTAMA (SOAL)
      HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin, GPIO_PIN_SET);   // Hijau nyala
      HAL_GPIO_WritePin(GPIOB, LED_RED_Pin, GPIO_PIN_RESET);   // Merah mati
      HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_SET);      // (opsional)
    }
    else
    {
      // Tidak deteksi
      HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(GPIOB, LED_RED_Pin, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET);
    }
  }
  else
  {
    // Switch OFF
    HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin | LED_RED_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 (tanpa pull biar ikut rangkaian kamu)
  GPIO_InitStruct.Pin = BUTTON_REVERSE_Pin | IR_SENSOR_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // OUTPUT
  GPIO_InitStruct.Pin = LED_GREEN_Pin | LED_RED_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);

  HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin | LED_RED_Pin | BUZZER_Pin, GPIO_PIN_RESET);
}

5. Video Demo [Kembali]



6. Kondisi [Kembali]

Percobaan 2 kondisi 1 :

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


7. Video Simulasi [Kembali]





8. Download File [Kembali]

Download rangkaian STM32 Nucleo C031C6 klik disini

Datasheet STM32 NUCLEO-G474RE disini

Datasheet Infrared Sensor disini

Datasheet Buzzer disini

Datasheet RGB LED disini


Komentar

Postingan Populer