Percobaan 2 Kondisi 7



TUGAS PENDAHULUAN DAN LAPORAN AKHIR 2

PERCOBAAN 2

 1. Prosedur [kembali]

  1. Membuka Wokwi dan membuat project baru dengan menggunakan board STM32 Nucleo C031C6, kemudian menambahkan komponen berupa push button sebagai input, LED sebagai indikator visual, buzzer sebagai indikator suara, serta resistor sebagai pembatas arus.
  2. Menyusun rangkaian dengan menghubungkan push button ke pin input mikrokontroler (misalnya ke pin A0 atau PA0) dengan konfigurasi pull-down resistor ke GND, kemudian menghubungkan LED ke salah satu pin output (misalnya D2/PB0) melalui resistor dan buzzer ke pin output lainnya (misalnya D3/PB1), serta memastikan semua VCC dan GND terhubung dengan benar.
  3. Menuliskan program pada editor Wokwi untuk membaca kondisi push button sebagai simulasi sensor jarak, dimana tombol ditekan dianggap sebagai kondisi objek mendekat (jarak dekat) dan tidak ditekan sebagai kondisi objek jauh.
  4. Menambahkan logika kontrol pada program yaitu ketika tombol tidak ditekan maka LED dan buzzer dalam kondisi mati, ketika tombol ditekan sebagian maka LED menyala sebagai indikator jarak mulai dekat, dan ketika kondisi tertentu (misalnya logika tambahan atau penekanan penuh) maka buzzer juga aktif sebagai tanda jarak sangat dekat.
  5. Menjalankan simulasi dengan menekan tombol start pada Wokwi, kemudian melakukan pengujian dengan menekan dan melepas push button untuk mensimulasikan perubahan jarak objek terhadap sensor.
  6. Mengamati hasil output dimana saat tombol ditekan LED akan menyala dan buzzer dapat ikut aktif sebagai peringatan, sedangkan saat tombol dilepas semua output kembali mati, sehingga sistem dapat mensimulasikan fungsi dasar deteksi jarak parkir mundur secara sederhana.

 2. Hardware[kembali]

a) Mikrokontroler STM32 NUCLEO-G474RE








2. Infrared Sensor

Infrared Sensor Module



3. Buzzer


4. Power Supply

 
5. RGB LED
Jual LED RGB 4 PIN WARNA MERAH HIJAU BIRU 5mm ( ARDUINO ) - Common Cathode  - Jakarta Barat - Ardushop-id | Tokopedia

6. Resistor 1k Ohm



7. Switch



8. Adaptor



9. Breadboard



Diagram Blok  :





 3. Rangkaian Simulasi dan Prinsip Kerja [kembali]



Prinspi Kerja: 
Prinsip kerja sistem pada percobaan deteksi jarak parkir mundur ini menggunakan sensor inframerah sebagai pendeteksi keberadaan objek yang terhubung ke mikrokontroler STM32 sebagai pusat pengendali. Ketika sensor mendeteksi adanya benda, sistem akan mengaktifkan LED merah dan buzzer sebagai tanda peringatan bahwa objek berada dekat. Namun ketika kondisi berubah dari mendeteksi menjadi tidak mendeteksi benda, mikrokontroler akan merespon dengan mematikan LED merah, menghentikan bunyi buzzer, serta menyalakan LED hijau sebagai indikator bahwa area sudah aman. Proses ini berlangsung secara terus menerus sehingga sistem mampu memberikan respon otomatis terhadap perubahan kondisi lingkungan secara real-time.

 4. Flowchart dan Listing Program [kembali]





Listing Program:
#include "main.h"   // Library utama STM32 HAL

void SystemClock_Config(void); 
static void MX_GPIO_Init(void); 

int main(void) 
  HAL_Init();                 // Inisialisasi HAL (reset peripheral & setup dasar)
  SystemClock_Config();       // Konfigurasi clock sistem
  MX_GPIO_Init();             // Inisialisasi pin GPIO

  uint8_t status = 0; // Variabel status (0 = idle/belum deteksi, 1 = sedang/pernah deteksi)

  while (1)   // Loop utama (program berjalan terus)
  { 
    // ===== BACA INPUT =====
    uint8_t sensor = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); 
    // Membaca PA0 (sensor infrared / tombol simulasi)
    // HIGH = mendeteksi benda

    uint8_t button = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); 
    // Membaca PA1 (tombol mode)
    // LOW atau HIGH menentukan mode kerja

    // 🔴 Saat sensor mendeteksi benda
    if (sensor == GPIO_PIN_SET)
    {
      status = 1; // Tandai bahwa sistem sedang/pernah mendeteksi

      if (button == GPIO_PIN_RESET)
      {
        // ===== MODE 1 =====
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);   
        // LED merah ON (indikator ada objek)

        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); 
        // Buzzer OFF

        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); 
        // LED hijau OFF
      }
      else
      {
        // ===== MODE 2 =====
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); 
        // LED merah OFF

        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);   
        // Buzzer ON (alarm aktif)

        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);   
        // LED hijau ON
      }
    }

    // 🟢 Saat sensor berubah dari deteksi → tidak deteksi
    else if (sensor == GPIO_PIN_RESET && status == 1)
    {
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); 
      // LED merah OFF

      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); 
      // Buzzer OFF

      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);   
      // LED hijau ON (indikator aman)

      status = 0; // Reset status agar siap deteksi berikutnya
    }

    // 📴 Kondisi awal (belum pernah deteksi)
    else
    {
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); 
      // LED merah OFF

      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); 
      // Buzzer OFF

      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); 
      // LED hijau OFF
    }

    HAL_Delay(50); // Delay 50 ms untuk debounce (menghindari noise input)
  } 

/* ===== SYSTEM CLOCK ===== */
void SystemClock_Config(void) 
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0}; 
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; 

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; 
  // Menggunakan oscillator internal (HSI)

  RCC_OscInitStruct.HSIState = RCC_HSI_ON; 
  // Mengaktifkan HSI

  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; 
  // Kalibrasi default

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 
  { 
    Error_Handler(); // Jika gagal konfigurasi
  } 

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | 
                               RCC_CLOCKTYPE_SYSCLK |
                               RCC_CLOCKTYPE_PCLK1; 
  // Jenis clock yang digunakan

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; 
  // Sumber clock utama = HSI

  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; 
  // Tidak ada pembagi clock

  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  // Tidak ada pembagi clock APB

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

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

  __HAL_RCC_GPIOA_CLK_ENABLE(); 
  __HAL_RCC_GPIOB_CLK_ENABLE(); 
  // Mengaktifkan clock untuk port A dan B

  // ===== INPUT: PA0 & PA1 =====
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; 
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 
  GPIO_InitStruct.Pull = GPIO_PULLDOWN; 
  // Menggunakan pull-down → default LOW

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 

  // ===== OUTPUT: PB0, PB1, PB2 =====
  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2; 
  // PB0 = LED merah
  // PB1 = buzzer
  // PB2 = LED hijau

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 
  // Mode output push-pull

  GPIO_InitStruct.Pull = GPIO_NOPULL; 
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 

  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 
}

/* ===== ERROR HANDLER ===== */
void Error_Handler(void) 
  __disable_irq();   // Matikan interrupt
  while (1)          // Loop tak hingga jika error
  { 
  } 
}

 5. Video Demo [kembali]


 6. Kondisi [kembali]

Percobaan 2 Sistem Deteksi Jarak Parkir Mundur

Kondisi 7 : Buatlah rangkaian seperti pada gambar percobaan 2 dengan kondisi ketika infrared sensor berubah dari mendeteksi benda ke tidak mendeteksi benda, maka LED merah mati, LED hijau menyala, dan buzzer berhenti berbunyi.

7. Video Simulasi [kembali]

8. Link Download [kembali]




















Tidak ada komentar:

Posting Komentar

 BAHAN PRESENTASI MATA KULIAH ELEKTRONIKA      Oleh : Husni Mubarok (2310952012) Dosen Pengampu : Dr. Darwison, M.T. DEPARTEMEN TEKNIK ELEKT...