Tugas Pendahuluan 1 Percobaan 2 Kondisi 6



PERCOBAAN 2 KONDISI 6

1. Prosedur[Kembali]

  • Rangkai semua komponen di Proteus sesuai dengan percobaan pada modul 
  • Buat program untuk STM32 di STM32CubeIDE, sesuaikan konfigurasinya dengan rangkaian pada proteus dan kondisi yang dipakai
  • Masukkan Program ke STM32 di rangkaian proteus
  • Simulasikan rangkaian

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: Saat IR sensor tidak mendeteksi gerakan dan touch sensor mendeteksi adanya sentuhan, maka RGBLED berwarna cyan

Prinsip Kerja:

Rangkaian ini menggunakan mikrokontroler STM32F103C8 dengan dua input, yaitu sensor infrared (PB10) dan sensor touch (PB7), serta satu output berupa RGB LED. Setiap kaki LED dihubungkan ke pin tertentu: merah (PA6), hijau (PA7), dan biru (PB0). Konfigurasi sistem dilakukan melalui STM32 CubeIDE dengan menetapkan pengaturan pin sesuai skema rangkaian di Proteus. Setelah itu, opsi debug dipilih menggunakan Serial Wire, dan clock diatur ke Crystal/Ceramic Resonator agar sistem bekerja stabil. Setelah konfigurasi selesai, CubeIDE akan secara otomatis menghasilkan kode dasar sesuai dengan pengaturan yang telah dibuat.

Dalam pemrograman, kode tambahan ditulis pada loop utama dalam blok while menggunakan struktur if-else untuk mengontrol RGB LED berdasarkan input sensor. Jika sensor infrared tidak mendeteksi objek (logika 0) dan sensor touch mendeteksi sentuhan (logika 1), maka LED hijau (PA7) dan LED biru (PB0) akan menyala, sementara LED merah (PA6) tetap mati. Namun, jika kondisi berbeda—misalnya sensor infrared mendeteksi objek (logika 1) atau sensor touch tidak tersentuh (logika 0)—maka seluruh LED akan dimatikan.

Setelah pemrograman selesai, proyek dikompilasi menjadi file hex dan diunggah ke mikrokontroler dalam simulasi Proteus. Saat dijalankan, sistem akan menampilkan output sesuai logika yang diprogram: RGB LED mati pada kondisi awal, menyala dengan warna cyan jika sensor touch aktif tanpa deteksi objek oleh sensor infrared, dan kembali mati untuk kondisi lainnya. Dengan demikian, sistem dapat mengontrol RGB LED berdasarkan pembacaan sensor secara otomatis.

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

Sub Chapter 7.6

MODUL 1 PRAKTIKUM SISTEM DIGITAL

Modul 2