Tugas Pendahuluan 1



MODUL 2 PERCOBAAN 1


1. Prosedur [Kembali]

  1. Membuka software Proteus dan membuat project baru untuk simulasi rangkaian.
  2. Menambahkan komponen yang dibutuhkan seperti STM32F103C8, sensor heartbeat, LED, resistor, buzzer, dan potensiometer.
  3. Menghubungkan sensor heartbeat ke pin analog mikrokontroler (PA0) sebagai input sinyal.
  4. Menghubungkan LED merah, kuning, dan biru ke pin GPIO mikrokontroler (port B) sebagai indikator output.
  5. Menambahkan resistor pada setiap LED sebagai pembatas arus.
  6. Menghubungkan buzzer ke salah satu pin GPIO sebagai indikator tambahan.
  7. Menghubungkan semua komponen ke sumber tegangan 3,3 V dan ground yang sama (common ground).
  8. Melakukan konfigurasi pin pada STM32 menggunakan STM32CubeIDE sesuai dengan rangkaian (ADC untuk input, GPIO untuk output).
  9. Menuliskan dan meng-compile program hingga menghasilkan file .hex.
  10. Memasukkan file .hex ke mikrokontroler STM32F103C8 pada Proteus.
  11. Menjalankan simulasi dan memberikan variasi input (melalui sensor atau potensiometer).
  12. Mengamati perubahan LED:
    • LED merah menyala saat kondisi BPM>70 dan push button tidak ditekan
    • Buzzer menyala saat kondisi BPM>70 dan push button tidak ditekan
  13. Menganalisis hasil simulasi untuk memastikan sistem bekerja sesuai perintah soal.


2. Hardware dan Diagram Blok [Kembali]

Instrumentasi / Alat
  1. Breadboard— Papan prototyping untuk merangkai komponen tanpa solder.
  1. Adaptor — Sumber daya eksternal untuk rangkaian.
Komponen / Bahan
  1. STM32F103C8 (Blue Pill) — Mikrokontroler berbasis ARM Cortex-M3, beroperasi pada 3.3V dengan 32 pin GPIO dan clock speed 72 MHz.
  1. Spesifikasi:

    • Microcontroller Core : ARM Cortex-M3
    • Operating Voltage : 3.3V
    • Input Voltage (recommended) : 5V
    • Input Voltage (limit) : 2.0V – 3.6V
    • Digital I/O Pins : 32 pin
    • PWM Digital I/O Pins : 15 channel
    • Analog Input Pins : 10 channel (ADC 12-bit)
    • DC Current per I/O Pin : 25 mA
    • DC Current for 3.3V Pin : 150 mA
    • Flash Memory : 64 KB
    • SRAM : 20 KB
    • Clock Speed : 72 MHz
    • Komunikasi : USART, SPI, I²C, USB, CAN
    • Pemrograman : SWD, JTAG, USART Bootloader

  2. Buzzer — Komponen output audio sebagai alarm/peringatan.

    Spesifikasi:

    • Tipe : Active Buzzer (osilator internal)
    • Tegangan Operasi : 3.5V – 5.5V DC
    • Tegangan Rated : 5V DC
    • Konsumsi Arus : < 30 mA
    • Frekuensi Suara : 2300 ± 300 Hz
    • Sound Pressure Level (SPL) : ≥ 85 dB (pada 10 cm)
    • Operating Temperature : -20°C hingga +70°C
    • Dimensi : 12mm × 9.5mm
    • Sambungan : 2 pin (+ dan -)

  3. Resistor — Komponen pembatas arus (1k ohm).

    Spesifikasi (Resistor 100 ohm, 1/4 Watt):

    • Nilai Resistansi : 100 Ω (coklat-hitam-coklat)
    • Toleransi : ±5% (gelang emas)
    • Daya Maksimum : 0.25 Watt (1/4 W)
    • Tegangan Maksimum : 250V
    • Suhu Operasi : -55°C hingga +155°C
    • Material : Carbon Film
  4. Sensor Heartbeat 

    Pulse Sensor Features and Specifications

    • Biometric Pulse Rate or Heart Rate detecting sensor
    • Plug and Play type sensor
    • Operating Voltage: +5V or +3.3V
    • Current Consumption: 4mA
    • Inbuilt Amplification and Noise cancellation circuit.
    • Diameter: 0.625”
    • Thickness: 0.125” Thick
  5. Push Button


    Spesifikasi Teknis Push Button Switch

    Karakteristik Listrik

    • Rating Tegangan (Voltage): Menunjukkan batas maksimum tegangan yang bisa ditangani, misalnya 12V DC atau 250V AC.

    • Rating Arus (Current): Menunjukkan seberapa besar arus yang bisa dialirkan tanpa merusak kontak, biasanya berkisar antara 1A hingga 5A.

    • Tipe Kontak: Bisa NO (Normally Open), NC (Normally Closed), atau kombinasi keduanya (SPDT / Single Pole Double Throw).


Diagram Blok






3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]


Rangkaian ini merupakan sistem pendeteksi denyut jantung yang menggunakan sensor heartbeat sebagai input utama, STM32F103C8T6 sebagai pusat pengendali, serta LED dan buzzer sebagai output indikator. Sensor heartbeat berfungsi untuk membaca denyut jantung pengguna dan menghasilkan sinyal yang kemudian dikirimkan ke mikrokontroler. Sinyal tersebut diproses oleh STM32 untuk menentukan apakah nilai BPM berada pada kondisi tertentu sesuai dengan aturan percobaan.

Pada rangkaian ini, kondisi yang digunakan adalah ketika sensor heartbeat membaca BPM lebih dari 70 dan push button tidak ditekan. Jika kedua kondisi tersebut terpenuhi, maka mikrokontroler akan memberikan sinyal output untuk menyalakan LED merah dan mengaktifkan buzzer. LED merah berfungsi sebagai tanda visual bahwa kondisi BPM telah melewati batas yang ditentukan, sedangkan buzzer berfungsi sebagai tanda peringatan dalam bentuk suara.

Push button pada rangkaian berperan sebagai input tambahan yang memengaruhi kerja output. Dalam percobaan ini, push button digunakan sebagai kondisi logika. Ketika push button tidak ditekan, sistem mengizinkan LED merah dan buzzer aktif apabila BPM lebih dari 70. Sebaliknya, apabila push button ditekan, maka LED merah dan buzzer tidak akan aktif meskipun sensor membaca BPM lebih dari 70. Dengan demikian, push button dapat dianggap sebagai pengontrol kondisi kerja sistem.

Mikrokontroler STM32F103C8T6 bekerja dengan membaca masukan dari sensor heartbeat dan push button. Setelah kedua input tersebut terbaca, program di dalam STM32 akan membandingkan nilai BPM dengan batas yang sudah ditentukan. Apabila BPM lebih besar dari 70 dan push button berada dalam kondisi tidak ditekan, maka pin output yang terhubung ke LED merah dan buzzer akan dibuat aktif. Akibatnya, LED merah menyala dan buzzer berbunyi.

LED lain seperti LED kuning dan LED hijau dapat digunakan sebagai indikator tambahan untuk kondisi yang berbeda, misalnya BPM normal atau kondisi tombol ditekan. Namun, pada percobaan yang ditampilkan, fokus kondisi kerja adalah mengaktifkan LED merah dan buzzer saat BPM melebihi 70 dan push button tidak ditekan. Hal ini menunjukkan bahwa rangkaian bekerja berdasarkan kombinasi dua input, yaitu sensor heartbeat dan push button.

Secara keseluruhan, prinsip kerja rangkaian ini adalah membaca denyut jantung melalui sensor heartbeat, memproses data tersebut menggunakan STM32F103C8T6, kemudian menghasilkan output berupa LED dan buzzer sesuai kondisi logika yang telah ditentukan. Jika BPM lebih dari 70 dan push button tidak ditekan, maka LED merah menyala dan buzzer berbunyi sebagai tanda peringatan. Jika salah satu kondisi tidak terpenuhi, maka LED merah dan buzzer tetap dalam keadaan mati.



Listing Program :


#include "main.h"


/* Private define */

#define FILTER_SIZE 10


/* Private variables */

ADC_HandleTypeDef hadc1;


uint32_t adcValue = 0;

uint32_t filteredValue = 0;

uint16_t buffer[FILTER_SIZE];

uint8_t indexBuf = 0;


/* BUTTON */

uint8_t buttonState = 1;


/* Function */

uint32_t Calculate_Moving_Average(uint16_t new_value)

{

buffer[indexBuf++] = new_value;

if(indexBuf >= FILTER_SIZE) indexBuf = 0;


uint32_t sum = 0;

for(int i = 0; i < FILTER_SIZE; i++)

sum += buffer[i];


return sum / FILTER_SIZE;

}


int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_ADC1_Init();


HAL_GPIO_WritePin(GPIOB,

GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_10 | GPIO_PIN_11,

GPIO_PIN_RESET);


for(int i=0;i<FILTER_SIZE;i++) buffer[i]=0;


while (1)

{

/* ==== BACA ADC ==== */

HAL_ADC_Start(&hadc1);


if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)

{

adcValue = HAL_ADC_GetValue(&hadc1);

filteredValue = Calculate_Moving_Average(adcValue);

}


HAL_ADC_Stop(&hadc1);


/* ==== BACA BUTTON (PA1) ==== */

buttonState = HAL_GPIO_ReadPin(BUTTON_GPIO_Port, BUTTON_Pin);


/* ==== KONDISI BARU ==== */

// anggap threshold BPM > 70 ≈ ADC > 2457

if (filteredValue > 2457 && buttonState == GPIO_PIN_SET)

{

// LED MERAH ON

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);


// BUZZER ON

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET);


// LED lain OFF

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET);

}

else

{

// semua OFF

HAL_GPIO_WritePin(GPIOB,

GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_10 | GPIO_PIN_11,

GPIO_PIN_RESET);

}


HAL_Delay(10);

}

}


/* ================= 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.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);

}


/* ================= ADC ================= */

void MX_ADC1_Init(void)

{

ADC_ChannelConfTypeDef sConfig = {0};


__HAL_RCC_ADC1_CLK_ENABLE();


hadc1.Instance = ADC1;

hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;

hadc1.Init.ContinuousConvMode = DISABLE;

hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;

hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;

hadc1.Init.NbrOfConversion = 1;


HAL_ADC_Init(&hadc1);


sConfig.Channel = ADC_CHANNEL_0; // tetap PA0

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;


HAL_ADC_ConfigChannel(&hadc1, &sConfig);

}


/* ================= GPIO ================= */

void MX_GPIO_Init(void)

{

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


GPIO_InitTypeDef GPIO_InitStruct = {0};


/* PA0 = SENSOR_HEART (ADC) */

GPIO_InitStruct.Pin = SENSOR_HEART_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

HAL_GPIO_Init(SENSOR_HEART_GPIO_Port, &GPIO_InitStruct);


/* PA1 = BUTTON (INTERRUPT) */

GPIO_InitStruct.Pin = BUTTON_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;

GPIO_InitStruct.Pull = GPIO_PULLUP;

HAL_GPIO_Init(BUTTON_GPIO_Port, &GPIO_InitStruct);


HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);

HAL_NVIC_EnableIRQ(EXTI1_IRQn);


/* LED + BUZZER */

GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_10 | GPIO_PIN_11;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


HAL_GPIO_WritePin(GPIOB,

GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_10 | GPIO_PIN_11,

GPIO_PIN_RESET);

}


5. Video Demo [Kembali]



6. Kondisi [Kembali]

Percobaan 1 kondisi 1 :

Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi Sensor Heartbeat membaca BPM>70 dan push button tidak ditekan, maka LED menyala merah dan Buzzer berbunyi

7. Video Simulasi [Kembali]



8. Download File [Kembali]

Download rangkaian Proteus klik disini

Download library STM32F103C8 klik disini

Download library Sensor Heartbeat disini


Komentar

Postingan Populer