Tugas Pendahuluan 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:
    • PIR → ke pin input (misal PA0)
    • Touch → ke pin input (misal PA1)
    • Buzzer & LED → 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 tidak disentuh
      → Buzzer harus menyala

B. STM32CubeIDE

  1. Buat project baru (STM32F103C8Tx)
  2. Atur pin:
    • PA0 → GPIO Input (PIR)
    • PA1 → GPIO Input (Touch)
    • PB0 → GPIO Output (Buzzer)
    • PB1 → GPIO Output (LED)
  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. Hardware

1. STM32F103C8T6 (Mikrokontroler)

  • Berfungsi sebagai otak sistem
  • Membaca sinyal dari sensor (PIR & Touch)
  • Mengolah logika program
  • Mengontrol output (LED & buzzer)
  • Memiliki GPIO (input/output digital)

Peran utama:

Mengambil keputusan berdasarkan kondisi sensor 

2. Sensor PIR (Passive Infrared)

  • Digunakan untuk mendeteksi gerakan manusia
  • Bekerja berdasarkan perubahan radiasi infra merah
  • Output:
    • HIGH (1) → ada gerakan
    • LOW (0) → tidak ada gerakan

Peran dalam sistem:
Sebagai trigger utama alarm

3. Sensor Touch (Kapasitif)

  • Mendeteksi sentuhan jari manusia
  • Output:
    • HIGH (1) → disentuh
    • LOW (0) → tidak disentuh

Peran dalam sistem:
Sebagai kontrol tambahan / override

  • Bisa digunakan untuk mematikan alarm

4. Buzzer

  • Komponen output berupa suara
  • Aktif saat diberi logika HIGH

Peran dalam sistem:
Sebagai alarm peringatan ketika ada gerakan


5. LED

  • Indikator visual
  • Menyala saat kondisi tertentu terpenuhi

Peran dalam sistem:
Memberi tanda visual bahwa sistem aktif / alarm menyala


6. Resistor (10kΩ)

  • Digunakan sebagai:
    • Pull-up
    • Pull-down
  • Menjaga kestabilan sinyal input

Peran dalam sistem:
Mencegah kondisi floating (tidak stabil) pada pin input


7. Power Supply (3.3V / 5V)

  • Memberikan tegangan ke seluruh rangkaian

Peran dalam sistem:
Sumber energi agar semua komponen bekerja


B. Diagram Blok



1. Blok Input (Sensor)

Bagian ini berfungsi sebagai "indra" sistem yang mengambil data dari lingkungan:

  • Sensor PIR (PA0): Terhubung ke pin PA0 sebagai GPIO_Input. Sensor ini mendeteksi radiasi inframerah dari gerakan manusia. Dalam kondisi 7, sensor ini mengirimkan sinyal High (1) karena mendeteksi gerakan.

  • Sensor Sentuh (PA1): Terhubung ke pin PA1 sebagai GPIO_Input. Dalam skenario ini, sensor tidak mendeteksi sentuhan, sehingga mengirimkan sinyal Low (0) ke kontroler.

2. Blok Kontroler (STM32F103C8T6)

Ini adalah "otak" dari sistem. Kontroler memproses sinyal masuk berdasarkan algoritma yang telah diprogram (seperti yang terlihat pada konfigurasi pinout Anda):

  • Pemrosesan Logika: Kontroler memeriksa kondisi: IF (PA0 == HIGH) AND (PA1 == LOW).

  • Pengambilan Keputusan: Karena kedua syarat terpenuhi (ada gerakan DAN tidak ada sentuhan), kontroler memberikan instruksi untuk mengaktifkan pin output.

3. Blok Output (Aktuator)

Bagian ini adalah eksekutor yang mengubah sinyal elektrik menjadi aksi nyata:

  • Buzzer (PB0): Menerima sinyal dari pin PB0. Buzzer akan berbunyi sebagai peringatan suara.

  • LED Red (PB1): Menerima sinyal dari pin PB1. LED akan menyala sebagai peringatan visual.

  • Driver Circuit: Karena arus dari pin GPIO STM32 terbatas, biasanya terdapat rangkaian driver (seperti transistor) untuk memastikan Buzzer dan LED mendapatkan daya yang cukup.

4. Alur Umpan Balik (Feedback Loop)

Inilah yang membuat sistem ini disebut Closed Loop secara fungsional:

  • Respons Pengguna: Saat Buzzer berbunyi dan LED menyala, pengguna (manusia) menerima informasi tersebut.

  • Modifikasi Perilaku: Pengguna mungkin akan bereaksi dengan menyentuh sensor sentuh (untuk mematikan alarm) atau berhenti bergerak.

  • Input Baru: Reaksi pengguna tersebut akan mengubah status di Sensor Input, sehingga siklus dimulai kembali dengan kondisi data yang baru.


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 dua output berupa buzzer dan LED. 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. Jika sensor PIR mendeteksi adanya gerakan (logika HIGH) dan sensor touch tidak mendeteksi sentuhan (logika LOW), maka mikrokontroler akan memberikan sinyal keluaran untuk mengaktifkan buzzer dan LED sebagai indikator bahwa alarm sedang aktif. Sebaliknya, jika tidak ada gerakan atau sensor touch disentuh, maka buzzer dan LED akan dimatikan. Dengan demikian, sistem ini bekerja berdasarkan logika kombinasi dari dua input untuk menghasilkan satu kondisi output tertentu.



Listing Program :

/* USER CODE BEGIN Header */
/** ****************************************************************************** * @file : main.c * @brief : Sensor PIR + Touch -> Buzzer Control ****************************************************************************** */ /* USER CODE END Header */ #include "main.h" /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { // Baca input sensor GPIO_PinState pir = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0); GPIO_PinState touch = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1); // Logika kontrol if (pir == GPIO_PIN_SET && touch == GPIO_PIN_RESET) { // PIR aktif & tidak disentuh HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // Buzzer ON HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // LED ON (indikator) } else { // Kondisi lain HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); // Buzzer OFF HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // LED OFF } HAL_Delay(50); // debounce / stabilisasi } } /** * @brief System Clock Configuration */ 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(); } } /** * @brief GPIO Initialization */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; // Enable clock GPIO __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); // ========================= // INPUT: PA0 (PIR), PA1 (Touch) // ========================= GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLDOWN; // agar tidak floating HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // ========================= // OUTPUT: PB0 (LED), PB1 (Buzzer) // ========================= 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); // Matikan semua output awal HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET); } /** * @brief Error Handler */ void Error_Handler(void) { __disable_irq(); while (1) { } }

5. Video Demo [Kembali]



6. Kondisi [Kembali]

Percobaan 1 kondisi 7 :

    Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi ketika PIR mendeteksi gerakan dan sensor Touch tidak mendeteksi sentuhan, maka Buzzer 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

Tidak ada komentar:

Posting Komentar

  BAHAN PRESENTASI UNTUK MATAKULIAH ELEKTRONIKA 2024 Oleh : MUHAMMAD FADLI NIM. 2310952007   Dosen Pengampu : Dr. Darwison, S. T., M. T. NID...