Langsung ke konten utama

LA Modul 1 uP&uC Percobaan 2

1. Prosedur [Kembali ke Daftar Isi]

1. Persiapan Kode (Editor Sebelah Kiri)

Pastikan kode program sudah lengkap dan tidak ada error penulisan. Berdasarkan tangkapan layar, kamu sudah mendefinisikan pin berikut:

  • PA0: Push Button (Gigi Mundur)

  • PA1: Sensor IR (Objek)

  • PB0: LED Hijau

  • PB1: LED Merah

  • PB2: Buzzer

2. Memulai Simulasi

Klik tombol "Play" (ikon segitiga hijau) yang berada di bagian tengah atas area simulasi.

  • Wokwi akan melakukan kompilasi kode.

  • Jika berhasil, status di bagian bawah akan berubah menjadi "Running".

3. Menguji Logika Rangkaian

Setelah simulasi berjalan, kamu bisa melakukan interaksi berikut untuk melihat apakah sistem bekerja sesuai logika if (switchState == HIGH) pada kode:

  • Langkah A: Aktifkan Sistem (Gigi Mundur) Klik pada Push Button (tombol hijau di kiri atas). Jika ini ditekan, sistem dianggap aktif.

  • Langkah B: Simulasi Deteksi Objek Klik pada komponen Slide Switch (yang bertindak sebagai Sensor IR di bawah tombol). Geser atau klik untuk mengubah status inputnya.

  • Langkah C: Amati Output

    • LED RGB: Perhatikan apakah warna berubah dari Hijau ke Merah saat sensor mendeteksi "objek".

    • Buzzer: Jika jarak objek terlalu dekat (berdasarkan logika program), komponen bulat hitam di kanan atas akan mengeluarkan animasi gelombang suara.

2. Hardware dan Diagram Blok [Kembali ke Daftar Isi]



dentifikasi Hardware:

  1. Microcontroller: STM32 Nucleo-C031C6 (Otak pemrosesan).

  2. Input: * Push Button (Simulasi Sakelar Gigi Mundur).

    • Slide Switch/IR Sensor (Simulasi deteksi halangan).

  3. Output: * LED RGB (Indikator visual: Hijau aman, Merah bahaya).

    • Buzzer (Peringatan suara).

  4. Komponen Pasif: Resistor (Pull-down untuk input yang stabil).

Diagram Blok Loop Tertutup:



Sistem ini menggunakan feedback dari sensor untuk menentukan status output secara terus-menerus.

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali ke Daftar Isi]


Sistem ini dieksekusi secara terus-menerus (dalam blok while(1)) dengan urutan kejadian sebagai berikut:

Langkah 1: Pengecekan Saklar Utama (Tombol) Mikrokontroler STM32 pertama kali akan melihat status tombol di PA0.

  • Jika tombol TIDAK DITEKAN (LOW), sistem dianggap mati/standby. Mikrokontroler akan secara paksa mematikan aliran listrik ke semua output (LED Merah mati, LED Hijau mati, Buzzer mati) untuk menghemat energi atau memastikan keamanan.

  • Jika tombol DITEKAN (HIGH), sistem aktif dan lanjut ke Langkah 2.

Langkah 2: Pemantauan Sensor IR Saat sistem aktif, STM32 akan memantau sinyal dari saklar simulasi IR di PA1. Ada dua kemungkinan kondisi:

  • Kondisi A: Mendeteksi Benda (Bahaya) Jika sensor mensimulasikan ada benda di depannya, ia akan mengirimkan sinyal LOW ke pin PA1.

    • Respon Sistem: Mikrokontroler mengirimkan tegangan (HIGH) ke pin PB1 dan PB2. Akibatnya, LED Merah menyala dan Buzzer berbunyi sebagai peringatan. Di saat yang sama, tegangan ke PB0 diputus (LOW) sehingga LED Hijau mati.

  • Kondisi B: Perubahan Menjadi Tidak Mendeteksi Benda (Aman) Sesuai permintaan Anda, jika benda tersebut menjauh dan sensor tidak lagi mendeteksinya, sensor akan mengirimkan sinyal HIGH ke pin PA1.

    • Respon Sistem: Mikrokontroler langsung memutus tegangan (LOW) dari pin PB1 dan PB2. Akibatnya, LED Merah mati dan Buzzer langsung berhenti berbunyi. Kemudian, tegangan (HIGH) dialirkan ke pin PB0 sehingga LED Hijau menyala, menandakan area sudah aman atau clear.

Singkatnya, tombol berfungsi sebagai izin nyala sistem, sementara sensor (slide switch) bertindak sebagai pemicu untuk menukar kondisi antara "Peringatan (Merah + Bunyi)" dan "Aman (Hijau + Sunyi)".

4. Flowchart dan Listing Program [Kembali ke Daftar Isi]



Listing Program:

#include "stm32c0xx_hal.h"

// --- DEFINISI PIN ---
#define BUTTON_REVERSE_Pin       GPIO_PIN_0 // Dihubungkan ke PA0 (Tombol Utama)
#define BUTTON_REVERSE_GPIO_Port GPIOA

#define IR_SENSOR_Pin            GPIO_PIN_1 // Dihubungkan ke PA1 (Switch/Sensor IR)
#define IR_SENSOR_GPIO_Port      GPIOA

#define LED_GREEN_Pin            GPIO_PIN_0 // Dihubungkan ke PB0
#define LED_GREEN_GPIO_Port      GPIOB

#define LED_RED_Pin              GPIO_PIN_1 // Dihubungkan ke PB1
#define LED_RED_GPIO_Port        GPIOB

#define BUZZER_Pin               GPIO_PIN_2 // Dihubungkan ke PB2
#define BUZZER_GPIO_Port         GPIOB

// --- PROTOTIPE FUNGSI ---
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
// Prototipe Error_Handler dihapus agar menggunakan bawaan sistem Wokwi

// --- PROGRAM UTAMA ---
int main(void)
{
  // Inisialisasi sistem dasar STM32
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1)
  {
    // 1. Cek Tombol Utama di PA0 (Sistem Aktif jika ditekan / SET)
    if (HAL_GPIO_ReadPin(GPIOA, BUTTON_REVERSE_Pin) == GPIO_PIN_SET)
    {
      // 2. Cek Sensor IR di PA1
      // KONDISI: TIDAK MENDETEKSI BENDA (Switch di posisi Ground / RESET)
      if (HAL_GPIO_ReadPin(GPIOA, IR_SENSOR_Pin) == GPIO_PIN_RESET)
      {
        HAL_GPIO_WritePin(GPIOB, LED_RED_Pin, GPIO_PIN_RESET);   // LED Merah MATI
        HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin, GPIO_PIN_SET);   // LED Hijau NYALA
        HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET);    // Buzzer MATI
       
        HAL_Delay(50); // Jeda standar agar simulasi stabil
      }
      // KONDISI: MENDETEKSI BENDA (Switch di posisi VCC / SET)
      else
      {
        HAL_GPIO_WritePin(GPIOB, LED_RED_Pin, GPIO_PIN_SET);     // LED Merah NYALA
        HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin, GPIO_PIN_RESET); // LED Hijau MATI
       
        // --- NADA BUZZER (Passive Buzzer) ---
        // Menghasilkan suara dengan frekuensi sekitar 500Hz
        // Looping ini memakan waktu sekitar 50ms (25 iterasi * 2ms)
        for(int i = 0; i < 25; i++)
        {
          HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_SET);
          HAL_Delay(1); // Nyala 1 ms
          HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET);
          HAL_Delay(1); // Mati 1 ms
        }
      }
    }
    // Jika Tombol Utama (PA0) tidak ditekan / OFF
    else
    {
      // Matikan semua output (Logika Common Cathode: RESET = Mati)
      HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin | LED_RED_Pin, GPIO_PIN_RESET);
      HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET);
     
      HAL_Delay(50); // Jeda standar saat sistem mati
    }
  }
}

// --- KONFIGURASI SISTEM ---
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)
  {
    // Jika gagal, sistem Wokwi akan menangani error-nya
  }

  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)
  {
    // Jika gagal, sistem Wokwi akan menangani error-nya
  }
}

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

  // Mengaktifkan Clock untuk Port A dan Port B
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  // Konfigurasi Pin Input: PA0 (Tombol Utama) dan PA1 (IR Sensor)
  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);

  // Konfigurasi Pin Output: PB0 (LED Hijau), PB1 (LED Merah), PB2 (Buzzer)
  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);

  // Set default awal: Semua Output Mati
  HAL_GPIO_WritePin(GPIOB, LED_GREEN_Pin | LED_RED_Pin | BUZZER_Pin, GPIO_PIN_RESET);
}

5. Video Demo [Kembali ke Daftar Isi]



6. Soal Analisa [Kembali ke Daftar Isi]

Analisa:
1. Bagaimana pengaruh pemilihan gpio masing2 dev board
2. Bagaimana program deklarasi pin i/o pada stm32
3. Analisa bagaimana  menerima input dan mengeluarkan output pada stm 32
4. Analisa pengaruh perubahan program pada main.h terhadap program main.c
5. Analisa bagaimna program dalam analisa metode pendeteksian inputan pada stm 32
6. Analisa kelebihan mikrokontroler dibanding rangkaian logika

Jawaban :

  1. Pemilihan GPIO: Sangat penting karena tidak semua pin sama. Setiap pin memiliki fitur khusus (seperti ADC atau PWM) dan batas toleransi tegangan/arus. Salah pilih pin bisa merusak board.

  2. Deklarasi Pin I/O: Proses mengatur sistem internal mikrokontroler untuk menentukan apakah suatu pin akan bertugas menerima sinyal (Input) atau mengirim sinyal (Output).

  3. Sistem Input/Output: Input bekerja dengan membaca tegangan fisik pada pin untuk diubah menjadi data digital (0 atau 1). Output bekerja kebalikannya, yaitu merubah data digital menjadi tegangan (HIGH/LOW) untuk menyalakan komponen.

  4. Peran main.h dan main.c: main.h bertindak sebagai pusat pengaturan (misal: penamaan pin). Jika posisi kabel diubah, kamu cukup mengganti kode di main.h tanpa harus mengacak-acak logika program utama di main.c.

  5. Metode Pendeteksian Input: Terbagi dua: Polling (sistem terus-menerus mengecek pin, lebih boros daya CPU) dan Interrupt (sistem bersiaga dan baru merespons ketika ada sinyal masuk, jauh lebih efisien).

  6. Mikrokontroler vs Rangkaian Logika: Mikrokontroler jauh lebih praktis dan fleksibel. Jika ingin mengubah cara kerja alat, kamu hanya perlu mengubah kode program tanpa harus membongkar pasang kabel atau mengganti komponen fisik seperti pada rangkaian logika dasar.

7. Video Simulasi [Kembali ke Daftar Isi]


8. Download File [Kembali ke Daftar Isi]

Download File Simulasi 
Download Video Simulasi

Link Video Demo






Komentar

Postingan populer dari blog ini