Jumat, 24 April 2026

LA 2



1. Prosedur [kembali]

1.     Siapkan alat dan bahan seperti STM32F103C8T6, sensor IR, sensor PIR, jumper, breadboard, resistor, buzzer, dan laptop.

2.     Rangkai komponen sesuai dengan gambar percobaan pada modul.

3.     Buka software STM32CubeIDE, kemudian lakukan konfigurasi pin sesuai rangkaian.

4.     Buka file main.c, lalu copy listing program dari modul dan paste ke dalam main.c.

5.     Simpan program kemudian lakukan build (compile).

6.     Hubungkan board STM32F103C8T6 ke laptop menggunakan kabel USB.

7.     Upload program dengan menekan tombol run/debug pada STM32CubeIDE.

8.     Jalankan sistem dan amati apakah rangkaian bekerja sesuai dengan kondisi yang diinginkan.

9.     Jika belum sesuai, lakukan pengecekan pada rangkaian dan program kemudian perbaiki.

2. Hardware dan Diagram Blok [kembali]

A. Hardware

 

a) STM32F103C8

b) Touch Sensor

 

c) PIR Sensor

 

d) LED

 

e) Buzzer



f) Resistor 1k ohm


g) Adaptor

h) Breadboard

B. Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

Prinsip Kerja:

Prinsip kerja rangkaian ini berbasis sistem kontrol sederhana menggunakan mikrokontroler STM32 sebagai pusat pengolah data input dan pengendali output. Rangkaian memiliki dua jenis input, yaitu touch sensor sebagai pengendali utama (enable/disable sistem) dan IR receiver sebagai pendeteksi objek. Ketika rangkaian diberi tegangan, mikrokontroler akan membaca kondisi awal dan berada dalam keadaan aktif. Touch sensor bekerja sebagai saklar digital, di mana setiap sentuhan akan mengubah kondisi sistem menjadi aktif atau nonaktif. Jika sistem dalam keadaan nonaktif, maka seluruh output seperti LED dan buzzer akan dimatikan tanpa memperhatikan kondisi sensor lainnya.

Saat sistem dalam keadaan aktif, mikrokontroler akan terus membaca sinyal dari IR receiver. IR transmitter memancarkan sinar inframerah, dan ketika ada objek yang menghalangi atau memantulkan sinar tersebut, IR receiver akan memberikan sinyal logika ke mikrokontroler. Sinyal ini kemudian diproses untuk menentukan kondisi output. Jika objek terdeteksi, maka mikrokontroler akan mengaktifkan LED sebagai indikator visual dan buzzer sebagai indikator suara. Sebaliknya, jika tidak ada objek yang terdeteksi, maka LED dan buzzer akan tetap dalam kondisi mati.

Secara keseluruhan, rangkaian ini bekerja dengan konsep input–proses–output, di mana input berasal dari touch sensor dan IR sensor, proses dilakukan oleh mikrokontroler STM32, dan output berupa LED serta buzzer. Sistem ini juga menerapkan logika kontrol sederhana berbasis kondisi (conditional logic), sehingga sangat cocok digunakan sebagai dasar pemahaman sistem otomasi seperti alarm pendeteksi objek atau sistem keamanan sederhana.

4. Flowchart dan Listing Program [kembali]

Ø  Flowchart





Ø  Listing Program

a. main.h

/* USER CODE BEGIN Header */

/**

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

* @file : main.h

* @brief : Header for main.c file.

* This file contains the common defines of the application.

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

* @attention

*

* Copyright (c) 2026 STMicroelectronics.

* All rights reserved.

*

* This software is licensed under terms that can be found in the LICENSE file

* in the root directory of this software component.

* If no LICENSE file comes with this software, it is provided AS-IS.

*

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

*/

/* USER CODE END Header */


/* Define to prevent recursive inclusion -------------------------------------*/

#ifndef __MAIN_H

#define __MAIN_H


#ifdef __cplusplus

extern "C" {

#endif


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

#include "stm32f1xx_hal.h"


/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */


/* USER CODE END Includes */


/* Exported types ------------------------------------------------------------*/

/* USER CODE BEGIN ET */


/* USER CODE END ET */


/* Exported constants --------------------------------------------------------*/

/* USER CODE BEGIN EC */


/* USER CODE END EC */


/* Exported macro ------------------------------------------------------------*/

/* USER CODE BEGIN EM */


/* USER CODE END EM */


/* Exported functions prototypes ---------------------------------------------*/

void Error_Handler(void);


/* USER CODE BEGIN EFP */


/* USER CODE END EFP */


/* Private defines -----------------------------------------------------------*/

#define IR_Pin GPIO_PIN_0

#define IR_GPIO_Port GPIOA

#define TOUCH_Pin GPIO_PIN_1

#define TOUCH_GPIO_Port GPIOA

#define LED_Pin GPIO_PIN_0

#define LED_GPIO_Port GPIOB

#define BUZZER_Pin GPIO_PIN_1

#define BUZZER_GPIO_Port GPIOB


/* USER CODE BEGIN Private defines */


/* USER CODE END Private defines */


#ifdef __cplusplus

}

#endif


#endif /* __MAIN_H */




b. main.c

#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. Analisa [kembali]




7. Download File [kembali]

Soal Analisa Laporan Akhir Modul 1 [Disini]
Datsheet ST-LINK [Download]
Datsheet STM32F103C8 (Bluepill) [Download]
Datsheet STM32 NUCLEO-G474RE [Download]
Datsheet IR Sensor [Download]
Datsheet Touch Sensor [Download]
Datsheet Float Switch [Download]
Datsheet Flame Sensor [Download]
Datsheet Relay [Download]
Datsheet Buzzer [Download]
Datsheet LED [Download]
Datsheet Resistor 220 Ω [Download]
Datsheet Breadboard [Download]
Datsheet Adaptor [Download]









0 comments:

Posting Komentar