Minggu, 12 April 2026

Modul 1 : Laporan Akhir 2

 

 [KEMBALI KE MENU SEBELUMNYA]


DAFTAR ISI
1. Prosedur
2. Hardware dan Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja
4. Flowchart dan Listing Program
5. Video Demo
6. Analisa
7. Download File


Laporan Akhir Percobaan 2
Sistem Deteksi Jarak pada Parkir Mundur

1. Prosedur 
[Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler STM32 NUCLEO-G474RE di software STM32 CubeIDE.
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
5. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

a) Mikrokontroler STM32 NUCLEO-G474RE








2. Infrared Sensor

Infrared Sensor Module



3. Buzzer


4. Power Supply

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

6. Resistor 1k Ohm



7. Switch



8. Adaptor



9. Breadboard



Diagram Blok  :



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi Sebelum dirunning:






Prinsip Kerja : 
 

Percobaan 2 menggunakan STM32 NUCLEO-G474RE (pada rangkaian diimplementasikan sebagai NUCLEO-C031C6) untuk mensimulasikan sistem deteksi jarak parkir mundur pada kendaraan. Switch pada PA0 berperan sebagai kondisi "gigi mundur aktif" — hanya ketika switch ini dalam kondisi SET (HIGH), mikrokontroler akan membaca data dari IR Sensor pada PA1. Jika IR Sensor mendeteksi objek (GPIO_PIN_RESET karena pull-down), LED Merah pada PB1 dan Buzzer pada PB2 dinyalakan sebagai peringatan, sementara LED Hijau pada PB0 dipadamkan. Sebaliknya, saat tidak ada objek terdeteksi, LED Hijau menyala menandakan area parkir aman. Delay HAL_Delay(50) ditambahkan di akhir setiap iterasi untuk mencegah pembacaan sensor yang terlalu cepat dan menstabilkan debounce, sekaligus menjaga responsivitas sistem tetap baik bagi pengguna.


4. Flowchart dan Listing Program [Kembali]

Flowchart :





Listing Program :

a. main.c

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

{

if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);

}

else

{

if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == GPIO_PIN_RESET)

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);

}

else

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);

}

}

HAL_Delay(50);

}

}

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;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Error_Handler();

}

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK |

RCC_CLOCKTYPE_SYSCLK

| RCC_CLOCKTYPE_PCLK1;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = 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_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();

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

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)

{

}

}


b. main.h

#ifndef __MAIN_H

#define __MAIN_H

#ifdef __cplusplus

extern "C" {

#endif

#include "stm32c0xx_hal.h"

void Error_Handler(void);

#define BUTTON_REVERSE_Pin GPIO_PIN_0

#define BUTTON_REVERSE_GPIO_Port GPIOA

#define IR_SENSOR_Pin GPIO_PIN_1

#define IR_SENSOR_GPIO_Port GPIOA

#define LED_GREEN_Pin GPIO_PIN_0

#define LED_GREEN_GPIO_Port GPIOB

#define LED_RED_Pin GPIO_PIN_1

#define LED_RED_GPIO_Port GPIOB

#define BUZZER_Pin GPIO_PIN_2

#define BUZZER_GPIO_Port GPIOB

#ifdef __cplusplus

}

#endif

#endif


5. Video Demo [Kembali]








6. Analisa [Kembali]

1. Bagaimana pengaruh pemilihan GPIO pada masing-masing development board?

Jawab:

Pada praktikum general input-output, pemilihan GPIO pada STM32 krusial karena tiap pin memiliki mode, fungsi alternatif, serta karakteristik listrik berbeda, sehingga menentukan keberhasilan pembacaan input dan pengendalian output secara optimal tanpa konflik periferal.

 

2. Bagaimana program deklarasi pin I/O pada STM32F103C8?

Jawab:

Deklarasi pin I/O dilakukan dengan mengaktifkan clock GPIO dan mengatur register (mode input/output, pull-up/down, dan tipe output) melalui HAL atau register langsung agar pin dapat beroperasi sesuai fungsi dasar input atau output digital.

 

3. Analisa bagaimana menerima Input dan mengeluarkan Output pada STM32F103C8!

Jawab:

Input dibaca dari register IDR melalui polling atau interrupt (EXTI), kemudian diproses oleh CPU dan menghasilkan output melalui penulisan ke ODR/BSRR, membentuk alur dasar sistem digital yaitu sensing–processing–actuating.

 

4. Analisa pengaruh perubahan program pada main.h terhadap program main.c!

Jawab:

Perubahan pada main.h akan mempengaruhi main.c karena berisi definisi pin dan prototipe fungsi, sehingga perubahan konfigurasi I/O di header akan langsung berdampak pada implementasi dan hasil kompilasi program utama.

 

5. Analisa bagaimana program dalam analisa metode pendeteksian Inputan pada STM32F103C8!

Jawab:

Pendeteksian input pada praktikum ini menggunakan metode polling atau interrupt, dengan perhatian pada debouncing untuk memastikan sinyal input stabil dan valid sebelum diproses menjadi aksi output.

 

6. Analisa kelebihan mikrokontroler dibanding rangkaian logika!

Jawab:

Mikrokontroler lebih unggul dibanding rangkaian Logic Gates dalam konteks general I/O karena fleksibel (programmable), mampu menangani banyak kondisi input-output secara dinamis, dan mengintegrasikan fungsi kontrol dalam satu sistem yang efisien.

 

 





7. Download File [Kembali]

Download HTML [Download]
Download File Rangkaian [Download] [wokwi link]
Download Listing Program [Download]
Datasheet Mikrokontroler STM32 NUCLEO-G474RE [Download]
Datasheet Sensor Infrared [Download]
Datasheet RGB LED [Download]
Datasheet Buzzer [Download]
Download Datasheet Resistor [Download]

Modul 1 : Laporan Akhir 1

 

[KEMBALI KE MENU SEBELUMNYA] 


DAFTAR ISI
1. Prosedur
2. Hardware dan Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja
4. Flowchart dan Listing Program
5. Video Demo
6. Analisa
7. Download File
 
 
 
 
 
 
 
 
 
Laporan Akhir 1
 Kontrol Lampu Lorong

1. Prosedur 
[Kembali]

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. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
5. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

a) Mikrokontroler STM32F103C8
STM32F103C8 board – Microscale





2. PIR Sensor


3. Touch Sensor

Touch Sensor Module — SunFounder Ultimate Sensor Kit documentation




4. Power Supply

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



Diagram Blok  :



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi
 


Prinsip Kerja : 

Percobaan 1 mengimplementasikan sistem kontrol lampu lorong berbasis STM32F103C8 menggunakan dua jenis sensor sebagai input digital. Touch Sensor pada PA1 berfungsi sebagai toggle yang mengubah status variabel system_enable setiap kali terdeteksi rising edge, sehingga pengguna dapat mengaktifkan atau menonaktifkan seluruh sistem. PIR Sensor pada PA0 kemudian mendeteksi kehadiran manusia secara otomatis; jika sensor ini aktif dan sistem dalam kondisi enable, LED pada PB0 dan Buzzer pada PB1 akan dinyalakan. Pendekatan ini memisahkan dua mode kontrol — manual (via touch) dan otomatis (via PIR) — dalam satu sistem yang terintegrasi pada mikrokontroler yang sama, memperkuat pemahaman tentang pembacaan GPIO input dan penulisan GPIO output secara bersamaan.

4. Flowchart dan Listing Program [Kembali]

Flowchart :



Listing Program :

#include "stm32f1xx_hal.h"
uint8_t system_enable = 0;
uint8_t touch_last = 0;
uint8_t pir_first_trigger = 1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
void Error_Handler(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
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;
if (system_enable)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
}
HAL_Delay(200);
}
touch_last = touch_now;
if (pir_now == GPIO_PIN_SET)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
if (pir_first_trigger)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
pir_first_trigger = 0;
}
}
else
{
pir_first_trigger = 1;
if(!system_enable)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
}
if(system_enable)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
}
}
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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = 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_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);
}
void Error_Handler(void)
{
__disable_irq();
while(1)
{
}
}


5. Video Demo [Kembali]



6. Analisa [Kembali]

1. Bagaimana pengaruh pemilihan GPIO pada masing-masing development board?

Jawab:

Pada praktikum general input-output, pemilihan GPIO pada STM32 krusial karena tiap pin memiliki mode, fungsi alternatif, serta karakteristik listrik berbeda, sehingga menentukan keberhasilan pembacaan input dan pengendalian output secara optimal tanpa konflik periferal.

 

2. Bagaimana program deklarasi pin I/O pada STM32F103C8?

Jawab:

Deklarasi pin I/O dilakukan dengan mengaktifkan clock GPIO dan mengatur register (mode input/output, pull-up/down, dan tipe output) melalui HAL atau register langsung agar pin dapat beroperasi sesuai fungsi dasar input atau output digital.

 

3. Analisa bagaimana menerima Input dan mengeluarkan Output pada STM32F103C8!

Jawab:

Input dibaca dari register IDR melalui polling atau interrupt (EXTI), kemudian diproses oleh CPU dan menghasilkan output melalui penulisan ke ODR/BSRR, membentuk alur dasar sistem digital yaitu sensing–processing–actuating.

 

4. Analisa pengaruh perubahan program pada main.h terhadap program main.c!

Jawab:

Perubahan pada main.h akan mempengaruhi main.c karena berisi definisi pin dan prototipe fungsi, sehingga perubahan konfigurasi I/O di header akan langsung berdampak pada implementasi dan hasil kompilasi program utama.

 

5. Analisa bagaimana program dalam analisa metode pendeteksian Inputan pada STM32F103C8!

Jawab:

Pendeteksian input pada praktikum ini menggunakan metode polling atau interrupt, dengan perhatian pada debouncing untuk memastikan sinyal input stabil dan valid sebelum diproses menjadi aksi output.


6. Analisa kelebihan mikrokontroler dibanding rangkaian logika!

Jawab:

Mikrokontroler lebih unggul dibanding rangkaian Logic Gates dalam konteks general I/O karena fleksibel (programmable), mampu menangani banyak kondisi input-output secara dinamis, dan mengintegrasikan fungsi kontrol dalam satu sistem yang efisien.


7. Download File [Kembali]

Download HTML [Download]
Download File Rangkaian [percobaan 3][Download]
Download Video Simulasi [Download]
Download Listing Program [Download]
Datasheet Mikrokontroler STM32F103C8 [Download]
Datasheet Sensor PIR [Download]
Datasheet Sensor Touch [Download]
Datasheet RGB LED [Download]

Modul 1 : Laporan Akhir 2

   [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Prosedur 2. Hardware dan Diagram Blok 3. Rangkaian Simulasi dan Prinsip Kerja 4. Flowchart dan...