A. Tugas Pendahuluan 1

 a) Prosedur

1. Buka software proteus lalu rangkai komponen sesuai dengan gambar yang ada di modul

2. Buka software STM32CubeIDE lalu lakukan konfigurasi pin pada STM untuk menentukan GPIO input dan GPIO output

3. Masukan Program ke dalam software STM32CubeIDE lalu build untuk mendapatkan file .hex

4. Masukan file .hex ke dalam file library STM32F103C8 pada proteus

5. Simulasikan rangkaian

b) Hardware

  • Hardwere
1. STM32F103C8





2. Touch Sensor



3. IR Sensor



4. LED



5. Buzzer



6. Resistor 


  • Diagram Blog

c) Rangkaian Simulasi dan Prinsip Kerja

  • Rangkaian Simulasi


  • Prinsip Kerja

1. Bagian Input (Pendeteksi)
2. Bagian Pemroses (Mikrokontroler)
3. Bagian Output (Indikator)
4. Rangkaian Pendukung (Reset System)

Terdapat dua buah sensor yang berfungsi memberikan informasi ke mikrokontroler:

  • Touch Sensor (Sensor Sentuh): Kaki output (OUT) sensor ini dihubungkan ke pin PA0. Sensor ini mendeteksi sentuhan fisik. Saat disentuh, sensor akan mengirimkan sinyal digital (biasanya HIGH atau 1) ke mikrokontroler.

  • Infrared (IR) Obstacle Sensor: Kaki output (OUT) sensor ini dihubungkan ke pin PA1. Sensor ini memancarkan cahaya inframerah dan menangkap pantulannya jika ada halangan (objek) di depannya. Saat objek terdeteksi, sensor akan mengirimkan sinyal ke mikrokontroler.

  • Kedua sensor ini juga mendapat suplai daya dari jalur VCC (+5V) dan Ground. Di dalam simulasi Proteus ini, terlihat ada "TestPin" berlogo angka 1 merah, yang artinya saat ini kedua sensor sedang disimulasikan dalam keadaan aktif/mendeteksi.

  • STM32F103C8 (U1): Ini adalah otak dari rangkaian. Mikrokontroler ini akan membaca status tegangan di pin PA0 dan PA1 secara terus-menerus.

  • Tergantung pada program C yang ditanamkan di dalamnya (seperti yang kita pelajari di main.c), STM32 akan memutuskan kapan harus menyalakan output. Misalnya: "Jika sensor sentuh disentuh ATAU sensor IR mendeteksi benda, maka nyalakan alarm".

Jika mikrokontroler menginstruksikan pin output menjadi HIGH (menyala), maka arus akan mengalir ke komponen berikut:

  • LED Merah (D1): Dihubungkan ke pin PB0 melalui resistor 220 ohm (R2). Resistor ini berfungsi menahan arus agar LED tidak terbakar/rusak. Jika PB0 diberi sinyal HIGH, LED Merah akan menyala sebagai indikator visual.

  • Buzzer (BUZ1): Dihubungkan ke pin PB1. Jika PB1 diberi sinyal HIGH, Buzzer akan berbunyi sebagai peringatan/alarm suara.

  • Di sebelah kanan atas mikrokontroler, terdapat sebuah Push Button yang dihubungkan ke pin NRST (Pin 7) dan sebuah resistor 10k ohm (R1) yang terhubung ke +5V.

  • Ini adalah Rangkaian Reset (Active Low). Dalam keadaan normal, tegangan 5V mengalir lewat resistor masuk ke pin NRST agar STM32 terus menyala. Saat tombol ditekan, arus akan terbuang ke Ground, pin NRST menjadi 0V (LOW), dan mikrokontroler akan mereset/mengulang programnya dari awal.

d) Flowchart

  • Flowchart

  • Listing Program

/* USER CODE BEGIN Header */

/**

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

* @file : main.c

* @brief : Main program body

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

*/

/* USER CODE END Header */


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

#include "main.h"


/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

uint8_t system_enable = 0;

uint8_t touch_last = 0;

uint8_t pir_first_trigger = 1;

/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);


/**

* @brief The application entry point.

*/

int main(void)

{

/* MCU Configuration */

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();


/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

uint8_t pir_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);

uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);


// --- LOGIKA TOUCH SENSOR (Toggle System) ---

// Mendeteksi transisi dari LOW ke HIGH (Rising Edge)

if (touch_now == GPIO_PIN_SET && touch_last == GPIO_PIN_RESET)

{

system_enable = !system_enable;


// Feedback visual/suara saat sistem berubah status

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(250); // Debounce delay tambahan

}

touch_last = touch_now;


// --- LOGIKA PIR & OUTPUT (PIN B0) ---

if (system_enable)

{

// Jika sistem ENABLE: Output B0 selalu ON (Force ON)

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

pir_first_trigger = 1; // Reset trigger PIR agar siap saat sistem OFF nanti

}

else

{

// Jika sistem DISABLE: Output B0 mengikuti sensor PIR

if (pir_now == GPIO_PIN_SET)

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);


// Bunyi/Indikator sekali saja saat pertama kali terdeteksi gerakan

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

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

pir_first_trigger = 1; // Siapkan trigger untuk deteksi berikutnya

}

}


HAL_Delay(10); // Stabilitas pembacaan sensor


/* USER CODE END WHILE */

}

/* USER CODE BEGIN 3 */

/* USER CODE END 3 */

}


/**

* @brief GPIO Initialization Function

*/

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


/* Reset Output */

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);


/* PA0 (PIR), PA1 (TOUCH) sebagai INPUT */

GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Disarankan PULLDOWN untuk sensor digital

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


/* PB0 (LOAD/RELAY), PB1 (BUZZER/LED) sebagai OUTPUT */

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

}


// Fungsi SystemClock_Config dan Error_Handler tetap sama...

void SystemClock_Config(void) { /* Sesuai standar CubeMX */ }

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


e) Video Demo

-

f) Kondisi

Percobaan 3 Kondisi 7: Buatlah rangkaian seperti pada gambar percobaan 3 dengan kondisi ketika infrared sensor mendeteksi benda dan touch sensor tidak mendeteksi sentuhan, maka LED menyala terus namun buzzer tetap mati

g) Video Simulasi







h) Download File

File TP [klik disini]

Komentar

Postingan populer dari blog ini