TUGAS PENDAHULUAN 1



MODUL 1 PERCOBAAN 1


1. Prosedur [Kembali]

A. Proteus

  1. Buka Proteus → New Project
  2. Tambahkan komponen:
    • STM32F103C8T6
    • PIR Sensor
    • Touch Sensor
    • Buzzer
    • LED + resistor
    • Resistor pull-up/pull-down (10kΩ)
  3. Hubungkan rangkaian:
    • Touch → ke pin input (misal PA1)
    • PIR → ke pin input (misal PA2)
    • LED & Buzzer → ke pin output (misal PB0, PB1)
    • VCC ke +5V / 3.3V dan GND ke ground
  4. Load file .hex hasil compile dari STM32CubeIDE ke mikrokontroler
  5. Jalankan simulasi (Run)
  6. Uji kondisi:
    • PIR aktif (deteksi gerakan)
    • Touch non aktif (tidak disentuh)
    • Jika sudah sesuai kondisi LED RED menyala

B. STM32CubeIDE

  1. Buat project baru (STM32F103C8Tx)
  2. Atur pin:
    • PA1 → GPIO Input (Touch)
    • PA2 → GPIO Input (PIR)
    • PB0 → GPIO Output (LED)
    • PB1 → GPIO Output (BUZZER)
  3. Generate code
  4. Tambahkan logika di while(1):
  5. Build → Generate file .hex
  6. Import ke Proteus

2. Hardware dan Diagram Blok [Kembali]

 a) STM32F103C8


    b) Touch Sensor



    c) PIR Sensor



    d) LED



    e) Buzzer



    f) Resistor



     g) Diagram Blok



3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]


Rangkaian simulasi yang dibuat menggunakan mikrokontroler STM32F103C8T6 sebagai pusat kendali yang terhubung dengan dua sensor input, yaitu sensor PIR dan sensor touch, serta output berupa LED (dan buzzer). Sensor PIR berfungsi untuk mendeteksi adanya gerakan berdasarkan perubahan radiasi infra merah, sedangkan sensor touch digunakan sebagai kontrol tambahan untuk mendeteksi sentuhan dari pengguna. Kedua sensor ini memberikan sinyal digital yang kemudian dibaca oleh mikrokontroler melalui pin GPIO yang telah dikonfigurasi sebagai input.

Ketika sistem dijalankan, mikrokontroler akan secara terus-menerus membaca kondisi kedua sensor tersebut. Pada rangkaian ini, sensor PIR dikonfigurasi secara active-low, yang berarti sensor akan memberikan sinyal logika LOW (0) saat mendeteksi adanya gerakan. Jika sensor PIR mendeteksi gerakan (logika 0) dan sensor touch tidak mendeteksi sentuhan (logika LOW / 0), maka mikrokontroler akan memberikan sinyal keluaran untuk menyalakan LED sebagai indikator. Sebaliknya, jika tidak ada gerakan (PIR berlogika HIGH / 1) atau sensor touch disentuh (berlogika HIGH / 1), maka LED akan dimatikan. Dengan demikian, sistem ini bekerja berdasarkan logika kombinasi dari dua input untuk menghasilkan satu kondisi output tertentu.





Listing Program :

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

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

{

// Baca sensor

uint8_t pir = HAL_GPIO_ReadPin(GPIOA, PIR_Pin);

uint8_t touch = HAL_GPIO_ReadPin(GPIOA, TOUCH_Pin);


// LOGIKA BARU:

// PIR = 0 (aktif) & TOUCH = 0 (tidak disentuh)

if ((pir == GPIO_PIN_RESET) && (touch == GPIO_PIN_RESET))

{

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

HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_SET); // Buzzer ON

}

else

{

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

HAL_GPIO_WritePin(GPIOB, BUZZER_Pin, GPIO_PIN_RESET);

}


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.PLL.PLLState = RCC_PLL_NONE;

HAL_RCC_OscConfig(&RCC_OscInitStruct);


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;


HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

}


static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


// INPUT

GPIO_InitStruct.Pin = PIR_Pin | TOUCH_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


// OUTPUT

GPIO_InitStruct.Pin = LED_Pin | BUZZER_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


HAL_GPIO_WritePin(GPIOB, LED_Pin | BUZZER_Pin, GPIO_PIN_RESET);

}


void Error_Handler(void)

{

__disable_irq();

while (1)

{

}

}


5. Video Demo [Kembali]



6. Kondisi [Kembali]

Percobaan 1 kondisi 1 :

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

7. Video Simulasi [Kembali]



8. Download File [Kembali]

Download rangkaian Proteus klik disini

Download library Touch Sensor klik disini

Download library PIR Sensor  klik disini

Download library STM32F103C8 klik disini


Komentar

Postingan Populer