Tugas Pendahuluan 1 Modul 1




Tugas Pendahuluan 1 Modul 1
(Percobaan 2 Kondisi 8)

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]

Hardware :

1. Raspberry Pi Pico



2. LED

3. Resistor



4. PIR Sensor



Diagram Blok  :

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]


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, kondisi ketika sensor infrared tidak mendeteksi gerakan dan sensor touch mendeteksi sentuhan maka LED RGB akan menampilkan warna Biru dan ketika sensor infrarednya mendeteksi gerakan maka LED akan menampilkan warna Cyan

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)
 
    if (ir_status == GPIO_PIN_SET) {  // Sensor infrared mendeteksi gerakan
        HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_SET);  // Nyalakan LED Biru
        HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET); // Nyalakan LED Hijau (Cyan = Biru + Hijau)
    } else if (touch_status == GPIO_PIN_SET) {  // Sensor touch mendeteksi sentuhan
        HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_SET);  // Nyalakan LED Biru
        HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_RESET); // Matikan LED Hijau
    } else { 
        HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);  // Matikan LED Biru
        HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_RESET);  // Matikan LED Hijau
    }

    HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET); // Pastikan LED Merah selalu mati
    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]

Percobaan 2 kondisi 8: 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 Biru dan ketika sensor infrarednya mendeteksi gerakan maka LED akan menampilkan warna Cyan

6. Video Simulasi [Kembali]




7. Download File [Kembali]

Download HTML [Download]
Download File Rangkaian [Download]
Download Video Simulasi [Download]
Download Listing Program [Download]
Datasheet Raspberry Pi Pico [Download]
Datasheet PIR Sensor [Download]
Datasheet Resistor [Download]
Datasheet LED [Download]

 

0 comments:

Posting Komentar