M1 - Tugas Pendahuluan 1


PERCOBAAN 1 KONDISI 2

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

1. STM32F103C8


2. Touch Sensor


3. PIR Sensor

4. LED

5. Buzzer

6. Resistor

Diagram blok:

c) Rangkaian Simulasi dan Prinsip Kerja

Rangkaian Percobaan 1 Kondisi 2

Prinsip kerja:
Rangkaian ini bekerja sebagai sistem kontrol otomatis berbasis mikrokontroler STM32F103C8 yang menggabungkan input dari sensor sentuh dan sensor gerak PIR untuk mengendalikan LED serta buzzer. Saat sistem diberi catu daya, mikrokontroler mulai membaca dua input utama, yaitu dari modul Touch Sensor dan PIR Sensor. Sensor sentuh berfungsi sebagai saklar digital untuk mengaktifkan atau menonaktifkan sistem (toggle), sehingga ketika disentuh, status sistem berubah antara aktif dan nonaktif. Jika sistem dalam kondisi aktif, maka mikrokontroler akan memantau sensor PIR; ketika PIR mendeteksi adanya pergerakan, mikrokontroler akan memberikan output berupa menyalakan LED sebagai indikator visual dan mengaktifkan buzzer sebagai peringatan suara (biasanya hanya sesaat), sekaligus mereset timer internal.

Selama masih ada deteksi gerakan atau waktu delay belum habis, LED akan tetap menyala sebagai tanda sistem masih dalam kondisi siaga atau terpicu. Sebaliknya, jika tidak ada gerakan yang terdeteksi dan waktu delay telah berakhir, mikrokontroler akan mematikan LED dan menghentikan buzzer, selama sistem masih dalam kondisi aktif. Resistor pada rangkaian berfungsi sebagai pembatas arus (terutama untuk LED) dan sebagai pull-up/pull-down untuk menjaga kestabilan logika input. Dengan demikian, keseluruhan sistem bekerja secara berulang (loop), terus memonitor input sensor dan mengatur output berdasarkan kondisi yang terjadi secara real-time.


d) Flowchart


Listing Program:

#include "stm32f1xx_hal.h"


// Prototype

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_1); // PIR = PA1

uint8_t touch_now = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2); // TOUCH = PA2


if (pir_now == GPIO_PIN_SET || touch_now == GPIO_PIN_SET)

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);// LED ON

}

else

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);// LED OFF

}

}

}

// ================= CLOCK =================

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

}


// ================= GPIO =================

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


// INPUT: PIR (PA1) & TOUCH (PA2)

GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;


// 🔥 PENTING: agar tidak floating

GPIO_InitStruct.Pull = GPIO_PULLDOWN;


HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


// OUTPUT: LED (PB0) & BUZZER (PB1)

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


// Default OFF

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);

}


// ================= ERROR =================

void Error_Handler(void)

{

__disable_irq();

while (1)

{

}

}

e) Video Demo


f) Kondisi

Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi ketika PIR tidak mendeteksi gerakan dan sensor Touch tidak mendeteksi sentuhan, maka LED akan mati.

g) Video Simulasi


h) Download File





Comments

Popular posts from this blog