Laporan Akhir 1 Modul 1
(Percobaan 2)
1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler STM32F103C8 di software STM32 CubeIDE.
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Jalankan simulasi rangkaian pada proteus.
5. Selesai.
.
2. Hardware dan Diagram Blok[Kembali]
Hardware:
1. Mikrokontroler STM32F103C8
2. Infrared Sensor
3. Touch Sensor
4. Power Supply
5. RGB LED

Diagram Blok:
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Prinsip Kerja:
Rangkaian ini memanfaatkan sensor inframerah untuk mendeteksi pergerakan, sensor sentuh untuk mendeteksi sentuhan, mikrokontroler STM32F103C8 sebagai unit pemrosesan utama, dan LED RGB sebagai indikator visual. Sensor inframerah akan mengirimkan sinyal logika tinggi (HIGH) ketika mendeteksi adanya objek atau gerakan. Demikian pula, sensor sentuh akan mengirimkan sinyal logika tinggi (HIGH) saat disentuh. Mikrokontroler membaca status kedua sensor tersebut untuk menentukan output yang dihasilkan.
Konfigurasi mikrokontroler dilakukan melalui perangkat lunak STM32 CubeIDE. Pin-pin mikrokontroler diatur sesuai dengan rancangan rangkaian pada Proteus. Mode debug diatur ke Serial Wire, dan opsi Crystal/Ceramic Resonator dipilih pada bagian RCC. Setelah konfigurasi selesai, kode program ditulis dalam bahasa C. Program menggunakan struktur kontrol if-else untuk membaca kondisi sensor dan mengendalikan LED RGB. Jika sensor inframerah dan sensor sentuh mendeteksi adanya objek secara bersamaan, LED RGB akan menampilkan warna putih. Jika hanya sensor inframerah yang aktif, LED akan berwarna biru. Jika hanya sensor sentuh yang aktif, LED akan berwarna hijau. Jika kedua sensor tidak aktif, LED akan berwarna merah.
Setelah kode program dikompilasi menjadi file .hex, file tersebut diunggah ke mikrokontroler dalam simulasi Proteus. Rangkaian dioperasikan dengan sumber tegangan +5V yang stabil. Resistor pembatas arus digunakan untuk melindungi LED dari kerusakan akibat arus berlebih. Dengan demikian, LED RGB akan menampilkan warna yang berbeda-beda sesuai dengan kombinasi input dari kedua sensor.
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); // Membaca IR sensor
(PB10)
uint8_t touch_status = HAL_GPIO_ReadPin(GPIOB, TOUCH_Pin); // Membaca
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
RED
} else {
HAL_GPIO_WritePin(GPIOA, RED_Pin, GPIO_PIN_RESET); // Matikan LED
RED
}
}
}
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();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, RED_Pin|GREEN_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(BLUE_GPIO_Port, BLUE_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : RED_Pin GREEN_Pin */
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);
/*Configure GPIO pin : BLUE_Pin */
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);
/*Configure GPIO pins : IR_Pin TOUCH_Pin */
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 /* USE_FULL_ASSERT */
.jpg)





.jpeg)

No comments:
Post a Comment