a) Prosedur[Kembali]

  1. Buat rangkaian sesuai kondisi dan modul pada software proteus
  2. Buka software STM32CubeIDE, atur dan pilih STM32F103C8T6 untuk dikonfigurasikan dan diinisialisasi
  3. Konfigurasikan pin input/output microcontroller pada software STM32CubeIDE
  4. Generate Code untuk mendapatkan file C codingan
  5. Masukkan algoritma pemograman berdasarkan cara kerja kondisi rangkaian
  6. Konversikan file ke dalam ekstensi .hex
  7. Masukkan library sensor pada sensor dan file codingan dalam bentuk .hex pada microcontroller di software proteus
  8. Jalankan rangkaian
  9. Selesai

b) Hardware dan Diagram Blok[Kembali]


Gambar 1. Hardware Percobaan 2 Kondisi 5

Konfigurasi pin input/output pada mikrokontroller STM32F103C8 diperlihatkan pada gambar di atas. Input pada hardware berasal dari dua buah sensor: sensor infrared dan sensor touch. Sensor infrared terhubung menuju pin PB10 pada STM32, dan sensor touch terhubung menuju pin PB7. Sehingga sesuai pada gambar di atas, pin PB10 dan PB7 dikonfigurasikan sebagai GPIO Input serta diinisialisasikan dengan nama 'IR' dan 'TCH'. 

Konfigurasi GPIO Output yaitu pada pin PA6, PA7, dan PB0, yang diinisialisasikan dengan R1, R2, dan R3, yang mana masing-masing mewakili pin-pin pada LED RGB (RED, GREEN, BLUE).



Gambar 2. Blok diagram loop tertutup dari sistem pada rangkaian.

Berdasarkan diagram blok di atas, sinyal input berupa objek (dideteksi oleh sensor infrared) dan sentuhan (dideteksi oleh sensor touch) akan diteruskan menuju mikrokontroller STM32F103C8 untuk selanjutnya diproses. Keluaran dari mikrokontroller akan menjadi sinyal output yang pada rangkaian akan menghidupi LED RGB. Dalam prosesnya, akan terjadi delay selama beberapa saat pada LED yang juga dapat mempengaruhi keluaran/outputan ketika sinyal input/masukan berubah.


c) Rangkaian Simulasi dan Prinsip Kerja[Kembali]



Gambar 3. Gambar rangkaian pada proteus.

Pada rangkaian terdiri dari dua buah input, yaitu sensor infrared dan sensor touch, data kedua input akan diproses secara waktu yang bersamaan/real time oleh STM32F103C8. Ketika Sensor infrared mendeteksi objek (atau pada sensor terdeteksi berlogika 1) dan disaat yang bersamaan sensor touch tidak mendeteksi sentuhan apapun (sensor touch berlogika 0), maka STM32 akan mengirimkan sinyal output yang akan mengaktifakn pin R dan B dari LED RGB sehingga lampu dari LED akan menjadi warna merah (magenta). Selain dari kondisi ini, STM32 diprogram tidak akan mengirim sinyal output apapun, sehingga memastikan bahwasanya sistem kontrol benar-benar berjalan sesuai dengan kondisi yang diinginkan.



d) Flowchart dan Listing Program[Kembali]


/* USER CODE BEGIN Header */

/**

******************************************************************************

* @file : main.c

* @brief : Main program body

******************************************************************************

* @attention

*

* Copyright (c) 2025 STMicroelectronics.

* All rights reserved.

*

* This software is licensed under terms that can be found in the LICENSE file

* in the root directory of this software component.

* If no LICENSE file comes with this software, it is provided AS-IS.

*

******************************************************************************

*/

/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/

#include "main.h"


void SystemClock_Config(void);

static void MX_GPIO_Init(void);


int main(void)

{



HAL_Init();


/* USER CODE BEGIN Init */


/* USER CODE END Init */


/* Configure the system clock */

SystemClock_Config();


/* USER CODE BEGIN SysInit */


/* USER CODE END SysInit */


/* Initialize all configured peripherals */

MX_GPIO_Init();

/* USER CODE BEGIN 2 */


/* USER CODE END 2 */


/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

uint8_t ir_status = HAL_GPIO_ReadPin(GPIOB, IR_Pin); // Membaca IR sensor

uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TCH_Pin); // Membaca IR sensor (PB10)

if (ir_status == GPIO_PIN_SET && touch_status == GPIO_PIN_RESET) {

HAL_GPIO_WritePin(GPIOB, R3_Pin, GPIO_PIN_SET); // Nyalakan LED

HAL_GPIO_WritePin(GPIOA, R1_Pin, GPIO_PIN_SET); // Nyalakan LED

} else {

HAL_GPIO_WritePin(GPIOA, R1_Pin, GPIO_PIN_RESET); // Matikan LED

HAL_GPIO_WritePin(GPIOB, R3_Pin, GPIO_PIN_RESET); // Matikan LED

}

HAL_Delay(10); // Delay kecil untuk stabilisasi pembacaan sensor

}

}


/* USER CODE END 3 */



/**

* @brief System Clock Configuration

* @retval None

*/

void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct = {0};

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


/** Initializes the RCC Oscillators according to the specified parameters

* in the RCC_OscInitTypeDef structure.

*/

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

}


/** Initializes the CPU, AHB and APB buses clocks

*/

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

}

}


/**

* @brief GPIO Initialization Function

* @param None

* @retval None

*/

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};

/* USER CODE BEGIN MX_GPIO_Init_1 */


/* USER CODE END MX_GPIO_Init_1 */


/* GPIO Ports Clock Enable */

__HAL_RCC_GPIOD_CLK_ENABLE();

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


/*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(GPIOA, R1_Pin|R2_Pin, GPIO_PIN_RESET);


/*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(R3_GPIO_Port, R3_Pin, GPIO_PIN_RESET);


/*Configure GPIO pins : R1_Pin R2_Pin */

GPIO_InitStruct.Pin = R1_Pin|R2_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);


/*Configure GPIO pin : R3_Pin */

GPIO_InitStruct.Pin = R3_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(R3_GPIO_Port, &GPIO_InitStruct);


/*Configure GPIO pins : IR_Pin TCH_Pin */

GPIO_InitStruct.Pin = IR_Pin|TCH_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


/* USER CODE BEGIN MX_GPIO_Init_2 */


/* USER CODE END MX_GPIO_Init_2 */

}


/* USER CODE BEGIN 4 */


/* USER CODE END 4 */


/**

* @brief This function is executed in case of error occurrence.

* @retval None

*/

void Error_Handler(void)

{

/* USER CODE BEGIN Error_Handler_Debug */

/* User can add his own implementation to report the HAL error return state */

__disable_irq();

while (1)

{

}

/* USER CODE END Error_Handler_Debug */

}


#ifdef USE_FULL_ASSERT

/**

* @brief Reports the name of the source file and the source line number

* where the assert_param error has occurred.

* @param file: pointer to the source file name

* @param line: assert_param error line source number

* @retval None

*/

void assert_failed(uint8_t *file, uint32_t line)

{

/* USER CODE BEGIN 6 */

/* User can add his own implementation to report the file name and line number,

ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* USER CODE END 6 */

}

#endif /* USE_FULL_ASSERT */



e) Kondisi[Kembali]


Percobaan 2 Kondisi 5 

Buatlah Rangkaian seperti gambar percobaan 2 dengan kondisi ketika sensor Infrared

mendeteksi gerakan dan sensor touch tidak mendeteksi sentuhan maka LED RGB akan 

menampilkan warna Ungu (Magenta).


f) Video Simulasi[Kembali]


video simulasi rangkaian.


g) Download File[Kembali]

Download folder rangkaian, listing program, dan library [klik]