Percobaan 1 Kondisi 6


MODUL 1 PERCOBAAN 1 KONDISI 6


1. Prosedur[Kembali]

  1. Pahami terlebih dahulu kondisi yang akan digunakan
  2. Buka software Proteus 8.17
  3. Persiapkan alat dan bahan
  4. Buat rangkaian sesuai dengan kondisi dan modul
  5. Buka software STM32Cube IDE 
  6. Setelah membuka software, pilih perangkat STM32F103C8T6 
  7. Sesuaikan konfigurasi pin sesuai dengan rangkaian proteus 
  8. Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi 
  9. Konfigurasi kan program dengan software Proteus
  10. Jalankan simulasi rangkaian.  
  11. Proses selesai

2. Hardware dan Diagram Blok[Kembali]

    Hardware

    


STM32F103C8


Touch Sensor


PIR Sensor


LED


Buzzer

Resistor

    Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

    Rangkaian Simulasi


    Prinsip Kerja

1. Kondisi Awal

Saat rangkaian dinyalakan, STM32 melakukan inisialisasi HAL, konfigurasi clock HSI, dan inisialisasi GPIO. Pin Touch dan PIR dikonfigurasi sebagai input, sedangkan pin LED dan Buzzer dikonfigurasi sebagai output.

2. Pembacaan Sensor (Loop Utama)

STM32 terus-menerus membaca status kedua sensor secara bersamaan di dalam while(1):

Touch Sensor → membaca apakah permukaan sensor disentuh

PIR Sensor → membaca apakah ada gerakan yang terdeteksi

3. Logika Kondisi

Sistem hanya akan mengaktifkan LED jika kedua kondisi terpenuhi secara bersamaan:

Touch == GPIO_PIN_SET jika sensor disentuh

PIR == GPIO_PIN_SET jika gerakan terdeteksi

Jika salah satu sensor tidak aktif, LED tetap mati.

4. Output: LED Berkedip

Ketika Touch aktif DAN PIR mendeteksi gerakan, STM32 menjalankan urutan berikut secara berulang:

LED berlogika SET (nyala) lalu tunggu 200ms 

LED berlogika RESET (mati) lalu tunggu 200ms

LED berlogika SET (nyala) lalu tunggu 200ms

... (berkedip terus selama kondisi terpenuhi)

Resistor R2 berfungsi membatasi arus yang masuk ke LED agar tidak rusak.

5. Kondisi Tidak Terpenuhi

Jika Touch tidak aktif atau PIR tidak mendeteksi gerakan, STM32 langsung mematikan LED (GPIO_PIN_RESET) dan kembali membaca sensor dari awal.


4. Flowchart dan Listing Program[Kembali]

    a. Flowchart


    b. Listing Program

/* USER CODE BEGIN Header */
/**
  * @file           : main.c
  * @brief          : Main program body
  *
  * File utama program STM32 menggunakan HAL
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"   // Header utama HAL STM32

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);     // Deklarasi fungsi konfigurasi clock
static void MX_GPIO_Init(void);    // Deklarasi fungsi inisialisasi GPIO

/**
  * @brief  The application entry point (fungsi utama)
  */
int main(void)
{
  /* Reset semua peripheral, inisialisasi Flash & Systick */
  HAL_Init();   // Inisialisasi HAL (wajib di awal)

  /* Konfigurasi clock sistem */
  SystemClock_Config();

  /* Inisialisasi GPIO (input & output) */
  MX_GPIO_Init();

  /* Infinite loop (program berjalan terus) */
  while (1)
  {
    // ===================== INPUT =====================

    // Membaca sensor PIR (deteksi gerakan)
    GPIO_PinState PIR = HAL_GPIO_ReadPin(PIR_GPIO_Port, PIR_Pin);

    // Membaca sensor touch (sentuhan)
    GPIO_PinState Touch = HAL_GPIO_ReadPin(Touch_GPIO_Port, Touch_Pin);

    // ===================== PROSES =====================

    // Jika Touch aktif (1) DAN PIR aktif (1)
    if (Touch == GPIO_PIN_SET && PIR == GPIO_PIN_SET)
    {
      // ===================== OUTPUT =====================

      // LED merah menyala
      HAL_GPIO_WritePin(RED_GPIO_Port, RED_Pin, GPIO_PIN_SET);

      HAL_Delay(200); // Delay 200 ms (LED ON)

      // LED merah mati
      HAL_GPIO_WritePin(RED_GPIO_Port, RED_Pin, GPIO_PIN_RESET);

      HAL_Delay(200); // Delay 200 ms (LED OFF)

      // Hasil: LED berkedip (blinking)
    }
    else
    {
      // Jika kondisi tidak terpenuhi → LED mati
      HAL_GPIO_WritePin(RED_GPIO_Port, RED_Pin, GPIO_PIN_RESET);
    }
  }
}

/**
  * @brief System Clock Configuration
  * Fungsi untuk mengatur clock mikrokontroler
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0}; // Struktur oscillator
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // Struktur clock

  // Menggunakan HSI (internal clock)
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON; // Aktifkan HSI
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

  // Tidak menggunakan PLL
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

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

  // Konfigurasi clock CPU, AHB, APB
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |
                               RCC_CLOCKTYPE_SYSCLK |
                               RCC_CLOCKTYPE_PCLK1 |
                               RCC_CLOCKTYPE_PCLK2;

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; // Sumber clock dari HSI
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;     // Tidak dibagi
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;      // Tidak dibagi
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;      // Tidak dibagi

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

/**
  * @brief GPIO Initialization Function
  * Mengatur pin input dan output
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0}; // Struktur konfigurasi GPIO

  // Aktifkan clock untuk port GPIO
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  // Set kondisi awal LED = mati
  HAL_GPIO_WritePin(RED_GPIO_Port, RED_Pin, GPIO_PIN_RESET);

  // ===================== INPUT =====================

  // Konfigurasi pin PIR & Touch sebagai input
  GPIO_InitStruct.Pin = PIR_Pin | Touch_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;   // Mode input
  GPIO_InitStruct.Pull = GPIO_NOPULL;       // Tanpa pull-up/pull-down
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // ===================== OUTPUT =====================

  // Konfigurasi pin LED merah sebagai output
  GPIO_InitStruct.Pin = RED_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Output push-pull
  GPIO_InitStruct.Pull = GPIO_NOPULL;         // Tanpa resistor internal
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;// Kecepatan rendah
  HAL_GPIO_Init(RED_GPIO_Port, &GPIO_InitStruct);
}

/**
  * @brief  Fungsi jika terjadi error
  */
void Error_Handler(void)
{
  __disable_irq(); // Nonaktifkan interrupt

  while (1)
  {
    // Program berhenti di sini jika error
  }
}

#ifdef USE_FULL_ASSERT
/**
  * @brief Menampilkan lokasi error (debugging)
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  // Bisa ditambahkan printf untuk debugging
}
#endif


5. Video Demo[Kembali]



6. Kondisi[Kembali]

    Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi sensor Touch aktif dan PIR mendeteksi gerakan serta LED hidup berkedip


8. Download File[Kembali]

    Rangkaian dan Program Proteus [tekan disini]

    Video Rangkaian [tekan disini]

    HTML [tekan disini]

Komentar

Postingan populer dari blog ini

Modul 1

Tugas Besar : Garasi Otomatis

Modul 2