LA P8 Modul 1






1. Prosedur [Kembali]
  • Rangkai semua komponen pada board sesuai dengan percobaan pada modul 
  • Buat program untuk STM32 di STM32CubeIDE, sesuaikan konfigurasinya dengan rangkaian pada board dan kondisi yang dipakai
  • Sambungkan laptop yang sudah menjalankan Program ke rangkaian yang sudah dibuat
  • Jalankan hasilnya

2. Hardware dan Diagram Blok[Kembali]

1. STM32F103C8


2. LED

3. Resistor



4. Touch Sensor

Sensor Sentuh


5. IR sensor
IR Sensor Module pin diagram/pin out/Pin Configuration

3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian Simulasi:



Prinsip Kerja:
  1. Sensor PIR (Passive Infrared Sensor) bekerja dengan mendeteksi gerakan

    • Jika ada objek bergerak di depan sensor, PIR akan mengirimkan sinyal ke STM32.

    • STM32 akan membaca sinyal ini dan mengaktifkan LED merah jika hanya PIR yang aktif.

  2. Touch Sensor mendeteksi sentuhan

    • Jika sensor disentuh, ia akan mengeluarkan sinyal output ke STM32.

    • STM32 akan membaca sinyal ini dan menyalakan LED hijau jika hanya touch sensor yang aktif.

  3. STM32 Memproses Data dari Kedua Sensor

    • Jika hanya PIR yang aktif, LED menyala merah.

    • Jika hanya Touch Sensor yang aktif, LED menyala hijau.

    • Jika kedua sensor aktif bersamaan, STM32 akan menyalakan LED dengan warna kuning (kombinasi merah dan hijau).


Kesimpulan

Rangkaian ini bekerja dengan cara membaca input dari sensor PIR dan Touch Sensor menggunakan STM32. Berdasarkan kombinasi input yang terdeteksi, microcontroller akan menyalakan LED dengan warna yang sesuai:

  • Merah jika hanya PIR aktif.

  • Hijau jika hanya Touch Sensor aktif.

  • Kuning jika kedua sensor aktif bersamaan.

4. Flowchart dan Listing Program[Kembali] 

Flowchart:




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. Kondisi[Kembali]
Buatlah Rangkaian seperti gambar percobaan 2 dengan kondisi ketika sensor Infrared tidak mendeteksi gerakan dan sensor touch mendeteksi sentuhan maka LED RGB akan menampilkan warna Cyan

6. Video Simulasi[Kembali]





7. Download File[Kembali]

Rangkaian [download]
Video simulasi [download]
Datasheet Raspberry Pi Pico [Download]
Datasheet Push Button [Download]
Datasheet Resistor [Download]
Datasheet LED [Download]

Komentar

Postingan populer dari blog ini

Tugas Besar (Parkir Otomatis)