LAPORAN AKHIR 2
MODUL 1
LAPORAN AKHIR 2
1. Prosedur [kembali]
1. Mulailah dengan menjalankan aplikasi simulator Proteus, kemudian buat sebuah project baru. Setelah itu, tambahkan seluruh komponen yang dibutuhkan ke dalam workspace, yaitu mikrokontroler STM32F103C6, sensor sentuh (touch sensor), sensor IR obstacle, LED, resistor dengan nilai 220Ω dan 10kΩ, buzzer, serta push button.
2. Selanjutnya, lakukan perancangan rangkaian dengan menghubungkan setiap komponen sesuai dengan skematik yang telah ditentukan. Output dari kedua sensor dihubungkan ke pin input mikrokontroler, yaitu PA0 dan PA1, sedangkan aktuator seperti LED dan buzzer dihubungkan ke pin output PB0 dan PB1. Pastikan seluruh koneksi catu daya, termasuk VCC/VDDA dan GND/VSSA, telah terhubung dengan benar agar sistem dapat bekerja secara optimal.
3. Setelah rangkaian selesai, lakukan proses kompilasi (compile/build) terhadap program yang telah dibuat menggunakan perangkat lunak seperti Arduino IDE atau STM32CubeIDE hingga dihasilkan file dengan ekstensi .hex atau .elf.
4. Kemudian, pada Proteus, klik dua kali pada komponen mikrokontroler STM32 untuk membuka properti, lalu masukkan lokasi (path) file hasil kompilasi tersebut pada bagian “Program File”.
5. Langkah berikutnya adalah menjalankan simulasi dengan menekan tombol Play atau Run Simulation yang terletak di bagian kiri bawah tampilan Proteus.
6. Terakhir, lakukan pengujian dengan mengubah kondisi logika input pada sensor, misalnya dengan melakukan toggle dari nilai 0 ke 1 pada sensor sentuh atau sensor IR, kemudian amati respons sistem melalui LED dan buzzer sebagai indikator output.
2. Hardware [kembali]
a) STM32F103C8
b) Touch Sensor
c) PIR Sensor
d) LED
e) Buzzer
f) Resistor
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
4. Flowchart dan Listing Program [kembali]
Listing Program :
#include "main.h" uint8_t system_enable = 1; uint8_t touch_last = 0; void SystemClock_Config(void);
static void MX_GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET) { system_enable = !system_enable; HAL_Delay(200); } touch_last = touch_now; if (system_enable) { if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); } } else { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); } } } 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(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET); GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 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. Kondisi [kembali]
Program memiliki 2 kondisi utama (state):
- System Enable = 1 (aktif)
- System Enable = 0 (nonaktif)
Status ini dikontrol oleh touch sensor di PA1.
7. Video Simulasi [kembali]
8. Link Download [kembali]
- Datasheet STM32F103C8 [Download]
- Datasheet Touch Sensor [Download]
- Datasheet PIR Sensor [Download]
- Datasheet LED [Download]



Komentar
Posting Komentar