Laporan Akhir 2


 [KEMBALI KE MENU SEBELUMNYA]

Percobaan 2

LED RGB, TOUCH SENSOR & SENSOR INFRARED

1. Prosedur[Kembali]

1. Persiapkan semua alat dan bahan yang diperlukan.

2. Rangkai semua komponen pada breadboard yang telah disediakan.

3. Download stlink pada laptop, lalu masukkan listing program ke aplikasi STM32 CubeIDE.

4. Rangkaian dihubungkan ke laptop dengan kabel stlink dan dirunning.

5. Amati hasilnya, apakah output sesuai dengan program yang diinputkan.

6. Selesai.

.

2. Hardware dan Diagram Blok[Kembali]

Hardware:

1. Mikrokontroler STM32F103C8

STM32F103C8 board – Microscale

2. Infrared Sensor

Infrared Sensor Module
3. Touch Sensor
Touch Sensor Module — SunFounder Ultimate Sensor Kit documentation
4. LED RGB

Jual LED RGB 4 PIN WARNA MERAH HIJAU BIRU 5mm ( ARDUINO ) - Common Cathode  - Jakarta Barat - Ardushop-id | Tokopedia

5. Push Button

6. Resistor

Diagram Blok:




3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian Simulasi:

                                    

Prinsip Kerja:

Rangkaian ini berfungsi untuk mendeteksi objek dan sentuhan menggunakan sensor inframerah (IR) serta touch sensor, dengan indikasi visual melalui LED RGB yang dikendalikan oleh mikrokontroler STM32F103C8. Sensor inframerah bekerja dengan mendeteksi pantulan sinyal IR dari objek di sekitarnya, sedangkan touch sensor merespons sentuhan pada permukaannya. Kedua sensor ini terhubung ke pin GPIO pada STM32F103C8, dengan sensor IR di PB10 dan touch sensor di PB6. Mikrokontroler membaca status sensor menggunakan fungsi HAL_GPIO_ReadPin().

Jika sensor inframerah mendeteksi objek (menghasilkan logika HIGH), STM32F103C8 akan menyalakan LED biru dengan mengatur pin GPIO yang terhubung ke LED biru ke logika HIGH menggunakan HAL_GPIO_WritePin(). Jika touch sensor mendeteksi sentuhan (logika HIGH), maka LED hijau akan menyala. Apabila kedua sensor tidak mendeteksi aktivitas (logika LOW), LED merah akan menyala sebagai indikator bahwa tidak ada deteksi dari sensor. Pengendalian ini dilakukan melalui pernyataan if-else dalam kode program.

Untuk memastikan kestabilan pembacaan sensor, diberikan jeda menggunakan HAL_Delay(10), sehingga sinyal yang diterima lebih akurat. Seluruh proses ini berjalan dalam loop utama (while(1)), memungkinkan sistem merespons perubahan sensor secara real-time. Dengan konfigurasi ini, rangkaian dapat digunakan untuk berbagai aplikasi sederhana yang mengintegrasikan sensor digital dengan output LED menggunakan STM32F103C8 sebagai pengendali utama.

4. Flowchart dan Listing Program[Kembali]

Flowchart:


Listing Program:

#include "main.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

int main(void) {
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1) {
    uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin);
    uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin);

    if (ir_status == GPIO_PIN_SET && touch_status == GPIO_PIN_SET) {
      HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
      HAL_GPIO_WritePin(GPIOA, GREEN_Pin, GPIO_PIN_SET);
      HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_SET);
    } else {
      HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, ir_status);
      HAL_GPIO_WritePin(GPIOA, GREEN_Pin, touch_status);

      if (ir_status == GPIO_PIN_RESET && touch_status == GPIO_PIN_RESET) {
        HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_SET);
      } else {
        HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET);
      }
    }
    HAL_Delay(10);
  }
}

void SystemClock_Config(void) {
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
    Error_Handler();
  }

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
                                RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) {
    Error_Handler();
  }
}

static void MX_GPIO_Init(void) {
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  HAL_GPIO_WritePin(GPIOA, RED_Pin | GREEN_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);

  GPIO_InitStruct.Pin = RED_Pin | GREEN_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  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);

  GPIO_InitStruct.Pin = IR_Pin | TOUCH_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

void Error_Handler(void) {
  __disable_irq();
  while (1) {}
}

#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line) {}
#endif

5. Video Demo[Kembali]

                                            


6. Analisa[Kembali]




7. Download File[Kembali]


Komentar

Postingan populer dari blog ini