Laoran Akhir 2



1. Prosedur [Kembali]

1. Sediakan alat dan bahan percobaan

2. Rangkailah rangkaian di breadboard

3. Download stlink. dan masukkan listing program ke aplikasi STM32 IDE

4. Hubungkan rangkaian dengan software dengan kabel stlink 

5. Jalankan program

 

2. Hardware dan Diagram Blok [Kembali]

Hardware yang digunakan dalam rangkaian ini meliputi:

1. STM32F103C8

3. Resistor



4. Touch Sensor

Sensor Sentuh

5. RGB-LED

3. Rangkaian Simulasi [Kembali]

a. Rangkaian simulasi

b. Prinsip kerja
Prinsip kerja dimulai dari penerimaan input digital saat sensor mendeteksi perubahan lingkungan. Sensor PIR akan mengeluarkan sinyal digital HIGH (1) jika mendeteksi objek di depannya, sedangkan sensor touch mengeluarkan sinyal HIGH saat disentuh. Sinyal digital ini diterima oleh pin GPIO STM32, yang dikonfigurasi sebagai input mode. Program membaca status ini menggunakan HAL_GPIO_ReadPin(), yang mengembalikan GPIO_PIN_SET jika sensor aktif dan GPIO_PIN_RESET jika tidak. 

Berdasarkan hasil pembacaan, STM32 kemudian mengatur output pada pin LED RGB. Dengan menggunakan HAL_GPIO_WritePin(), mikrokontroler mengaktifkan atau menonaktifkan masing-masing warna LED sesuai dengan kondisi sensor. Proses ini berlangsung secara cepat dan berulang karena adanya loop while(1), sehingga sistem dapat merespons perubahan sensor secara real-time dan mengatur LED sesuai dengan kondisi terbaru. Saat PIR berlogika satu dan touch berlogika nol maka outputnya adalah led berwarna biru. Saat PIR berlogika nol dan touch berlogika satu maka outputnya adalah led berwarna hijau. Saat PIR berlogika nol dan touch berlogika nol maka outputnya adalah led berwarna merah. Saat PIR berlogika satu dan touch berlogika satu maka outputnya adalah led berwarna cyan.


4. Flowchart dan Listing Program [Kembali]

a. Flowchart




b. Listing Program

#include "main.h"  // Mengimpor file header utama untuk konfigurasi mikrocontroller

void SystemClock_Config(void); // Deklarasi fungsi untuk mengonfigurasi sistem clock
static void MX_GPIO_Init(void); // Deklarasi fungsi untuk inisialisasi GPIO

int main(void) 
  HAL_Init(); // Inisialisasi Hardware Abstraction Layer (HAL)
  SystemClock_Config(); // Konfigurasi sistem clock
  MX_GPIO_Init(); // Inisialisasi pin GPIO

  while (1) 
  { 
    uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);  // Membaca status sensor IR (PB10)
    uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin); // Membaca status Touch Sensor (PB6)
 
    // LED Biru menyala jika IR aktif 
    HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);

    // LED Hijau menyala jika Touch aktif 
    HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);

    // LED Merah menyala jika tidak ada sensor yang aktif 
    if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) { 
        HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);  // Nyalakan LED Merah
    } else { 
        HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET); // Matikan LED Merah
    } 
    HAL_Delay(10); // Delay 10 ms untuk stabilisasi pembacaan sensor
  } 

void SystemClock_Config(void) 
  RCC_OscInitTypeDef RCC_OscInitStruct = {0}; // Struktur konfigurasi osilator
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; // Struktur konfigurasi clock
  
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; // Menggunakan osilator internal HSI
  RCC_OscInitStruct.HSIState = RCC_HSI_ON; // Menyalakan osilator HSI
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; // Menggunakan kalibrasi default
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // Tidak menggunakan PLL
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 
  { 
    Error_Handler(); // Menjalankan error handler jika konfigurasi gagal
  } 
}

static void MX_GPIO_Init(void) 
  GPIO_InitTypeDef GPIO_InitStruct = {0}; // Struktur konfigurasi GPIO
  
  __HAL_RCC_GPIOD_CLK_ENABLE(); // Mengaktifkan clock untuk port GPIOD
  __HAL_RCC_GPIOA_CLK_ENABLE(); // Mengaktifkan clock untuk port GPIOA
  __HAL_RCC_GPIOB_CLK_ENABLE(); // Mengaktifkan clock untuk port GPIOB
  
  /* Konfigurasi GPIO pin Output Level */ 
  HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin, GPIO_PIN_RESET); // Matikan LED Merah dan Hijau saat awal
  HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET); // Matikan LED Biru saat awal
  
  /* Konfigurasi pin GPIO untuk LED */ 
  GPIO_InitStruct.Pin = RED_Pin|GREEN_Pin; // Pin untuk LED Merah dan Hijau
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Mode output push-pull
  GPIO_InitStruct.Pull = GPIO_NOPULL; // Tanpa pull-up/pull-down
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // Kecepatan rendah
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // Inisialisasi GPIOA

  /* Konfigurasi pin GPIO untuk LED Biru */ 
  GPIO_InitStruct.Pin = BLUE_Pin; 
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 
  GPIO_InitStruct.Pull = GPIO_NOPULL; 
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 
  HAL_GPIO_Init(BLUE_GPIO_Port, &GPIO_InitStruct); // Inisialisasi GPIO untuk LED Biru

  /* Konfigurasi pin GPIO untuk Sensor IR dan Touch */ 
  GPIO_InitStruct.Pin = IR_Pin|TOUCH_Pin; // Pin untuk sensor IR dan Touch
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // Mode input
  GPIO_InitStruct.Pull = GPIO_NOPULL; // Tanpa pull-up/pull-down
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // Inisialisasi GPIOB

void Error_Handler(void) 
  __disable_irq(); // Menonaktifkan interrupt
  while (1) 
  { 
    // Loop tanpa henti jika terjadi kesalahan
  } 

#ifdef USE_FULL_ASSERT 
void assert_failed(uint8_t *file, uint32_t line) 
  // Fungsi ini akan dipanggil jika terjadi error pada assert
#endif /* USE_FULL_ASSERT */


5. Video Demo [Kembali]



6. Kondisi [kembali]

Buatlah Rangkaian seperti gambar percobaan 4  dengan kondisi ketika sensor PIR mendeteksi gerakan dan sensor touch mendeteksi sentuhan maka LED RGB akan menampilkan warna Cyan

7. Download File [Kembali]

Video simulasi [download]
Datasheet STM32F103C8 [Download]
Datasheet PIR [Download]
Datasheet Resistor [Download]
Datasheet LED [Download]

Tidak ada komentar:

Posting Komentar

  Aldi Kurniawan 2210952047