Tugas Pendahuluan 1 M2





1. Prosedur  [Kembali]

  1. Pahami terlebih dahulu kondisi yang akan digunakan
  2. Buka software Proteus 8.17
  3. Persiapkan alat dan bahan
  4. Buat rangkaian sesuai dengan kondisi dan modul
  5. Buka software STM32Cube IDE 
  6. Setelah membuka software, pilih perangkat STM32F103C8T6 
  7. Sesuaikan konfigurasi pin sesuai dengan rangkaian proteus 
  8. Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi 
  9. Konfigurasi kan program dengan software Proteus
  10. Jalankan simulasi rangkaian.  
  11. Proses selesai

2. Hardware dan Diagram Blok  [Kembali]

 1. STM32F103C8



TM32F103C8 adalah mikrokontroler berbasis ARM Cortex-M3 yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini sering digunakan dalam pengembangan sistem tertanam karena kinerjanya yang baik, konsumsi daya yang rendah, dan kompatibilitas dengan berbagai protokol komunikasi. Pada praktikum ini, kita menggunakan STM32F103C8 yang dapat diprogram menggunakan berbagai metode, termasuk komunikasi serial (USART), SWD (Serial Wire Debug), atau JTAG untuk berhubungan dengan komputer maupun perangkat lain.

Microcontroller

ARM Cortex-M3

Operating Voltage

3.3 V

Input Voltage (recommended)

5 V

Input Voltage (limit)

2  3.6 V

Digital I/O Pins

32

PWM Digital I/O Pins

15

Analog Input Pins

10 (dengan resolusi 12-bit ADC)

DC Current per I/O Pin

25 mA

DC Current for 3.3V Pin

150 mA

Flash Memory

64 KB

SRAM

20 KB

EEPROM

Emulasi dalam Flash

Clock Speed

72 MHz


    2. Sensor Heartbeat
HeartBeat sensor atau sensor detak jantung merupakan perangkat input analog yang berfungsi untuk mendeteksi denyut nadi manusia dengan prinsip fotopletismografi (PPG). Sensor ini biasanya bekerja menggunakan infra merah dan fototransistor untuk mengukur perubahan volume darah di dalam pembuluh darah kecil di ujung jari atau telinga. Sinyal yang dihasilkan bersifat analog, sehingga memerlukan fitur ADC (Analog to Digital Converter) pada mikrokontroler agar data detak jantung dapat diproses dan dikonversi menjadi nilai Beats Per Minute (BPM).

                                                           

                                                
    3. Push Button
Push button adalah komponen sakelar sederhana yang berfungsi untuk menghubungkan atau memutuskan aliran arus listrik dalam suatu rangkaian dengan cara menekan tombolnya. Pada penggunaan mikrokontroler, komponen ini berperan sebagai perangkat input digital yang bekerja berdasarkan prinsip logika high atau low, di mana status penekanannya dapat dibaca oleh pin GPIO atau digunakan untuk memicu mekanisme interrupt eksternal. Agar pembacaan sinyal tetap stabil dan terhindar dari kondisi floatingpush button biasanya dikonfigurasi menggunakan resistor pull-up atau pull-down yang memastikan level tegangan input tetap berada pada kondisi logika yang jelas saat tombol tidak sedang ditekan.



                                                   
    4. LED
LED adalah komponen semikonduktor yang berfungsi sebagai indikator visual dengan cara memancarkan cahaya ketika dialiri arus listrik searah. Dalam sistem yang menggunakan PWM (Pulse Width Modulation), LED tidak hanya berfungsi sebagai indikator aktif atau tidaknya suatu sistem, tetapi juga dapat diatur tingkat kecerahannya melalui pengaturan duty cycle. LED sangat efektif digunakan sebagai penanda status sensor atau sebagai simulasi output yang merepresentasikan kondisi tertentu dari hasil pemrosesan data.



LED adalah dioda semikonduktor yang dapat memancarkan cahaya ketika dialiri arus listrik. LED digunakan dalam berbagai aplikasi seperti indikator elektronik, pencahayaan, dan display. LED hanya bekerja pada arah bias maju dan memiliki berbagai warna yang ditentukan oleh material semikonduktornya.

    5. Buzzer


Buzzer adalah suatu komponen elektronika yang berfungsi untuk mengubah energi listrik menjadi energi suara (bunyi) melalui mekanisme getaran. Komponen ini termasuk dalam kategori output device karena digunakan untuk memberikan respon berupa suara terhadap suatu kondisi atau perintah dalam rangkaian elektronik.

    6. Resistor


Resistor adalah komponen elektronik pasif yang berfungsi untuk membatasi arus listrik dalam suatu rangkaian. Resistor bekerja berdasarkan hukum Ohm, yang menyatakan bahwa tegangan (V) = arus (I) × resistansi (R). Resistor memiliki satuan Ohm (Ω) dan digunakan dalam berbagai aplikasi seperti pembagian tegangan, kontrol arus, dan proteksi rangkaian elektronik.

    7. Breadboard
Breadboard adalah papan sirkuit tanpa solder yang digunakan sebagai media untuk merakit dan menguji purwarupa rangkaian elektronik secara sementara. Papan ini memiliki lubang- lubang koneksi yang terhubung secara internal (horizontal di bagian tengah dan vertikal di jalur daya samping) sehingga memudahkan pengguna untuk menghubungkan sensor, mikrokontroler, dan komponen lainnya dengan kabel jumper. Penggunaan breadboard sangat efisien dalam tahap pengembangan karena memungkinkan komponen untuk dilepas dan dipasang kembali dengan mudah tanpa merusak jalur sirkuit.

    8. Diagram Blok



    



3. Rangkaian Simulasi dan Prinsip Kerja  [Kembali]


Rangkaian menggunakan sensor heartbeat sebagai input untuk membaca nilai BPM (Beat Per Minute) yang diproses oleh mikrokontroler STM32F103C8. Sistem juga dilengkapi push button, LED merah, dan buzzer sebagai indikator keluaran.

Pada kondisi percobaan ini, ketika sensor heartbeat mendeteksi BPM > 70 dan push button tidak ditekan, maka mikrokontroler akan mengaktifkan LED merah dan buzzer. LED merah berfungsi sebagai indikator kondisi denyut jantung di atas batas yang ditentukan, sedangkan buzzer memberikan alarm peringatan.

Sebaliknya, jika kondisi tersebut tidak terpenuhi, maka LED merah dan buzzer akan mati. Dengan demikian, rangkaian bekerja sebagai sistem monitoring denyut jantung sederhana berbasis STM32 dengan indikator visual dan suara.


4. Flowchart dan Listing Program  [Kembali]

 a. Flowchart 





 b. Listing Program

#include "stm32f1xx_hal.h"


/* ================= HANDLE ================= */

ADC_HandleTypeDef hadc1;


/* ================= VARIABLE ================= */

uint32_t adcValue = 0;

uint32_t filteredValue = 0;

uint8_t beatDetected = 0;

uint32_t BPM = 0;

uint32_t lastBeatTime = 0;

uint32_t interval = 0;

uint8_t buzzerOff = 0;


/* ================= FILTER ================= */

#define FILTER_SIZE 10

uint16_t buffer[FILTER_SIZE];

uint8_t indexBuf = 0;


uint16_t moving_average(uint16_t val) {

buffer[indexBuf++] = val;

if(indexBuf >= FILTER_SIZE) indexBuf = 0;

uint32_t sum = 0;

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

return (uint16_t)(sum / FILTER_SIZE);

}


/* ================= OUTPUT CONTROL ================= */

// Berdasarkan skema: Merah=PB10, Kuning=PB1, Hijau=PB0, Buzzer=PB11

void Mode_Bahaya() {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET); // Merah ON

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_RESET); // Hijau & Kuning OFF

if(!buzzerOff) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET); // Buzzer ON

else HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);

}


void Mode_Aman() {

// Matikan semua output (Merah, Kuning, Hijau, dan Buzzer)

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_10 | GPIO_PIN_11, GPIO_PIN_RESET);

buzzerOff = 0; // Reset status mute

}


/* ================= INTERRUPT ================= */

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {

if(GPIO_Pin == GPIO_PIN_1) buzzerOff = !buzzerOff; // Tombol PA1

}


/* ================= PROTOTYPE ================= */

void SystemClock_Config(void);

void MX_GPIO_Init(void);

void MX_ADC1_Init(void);


/* ================= MAIN ================= */

int main(void) {

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_ADC1_Init();


uint32_t baseline = 0;


while (1) {

// 1. Baca Sensor

HAL_ADC_Start(&hadc1);

HAL_ADC_PollForConversion(&hadc1, 10);

adcValue = HAL_ADC_GetValue(&hadc1);

filteredValue = moving_average(adcValue);


// 2. Logika Deteksi

baseline = (baseline * 9 + filteredValue) / 10;

uint32_t threshold = baseline + 50;


if(filteredValue > threshold && beatDetected == 0) {

beatDetected = 1;

uint32_t now = HAL_GetTick();

if(lastBeatTime != 0) {

interval = now - lastBeatTime;

if(interval > 250) BPM = 60000 / interval;

}

lastBeatTime = now;

}

if(filteredValue < (threshold - 10)) beatDetected = 0;


// 3. Timeout (Jika jari dilepas)

if(HAL_GetTick() - lastBeatTime > 2500) BPM = 0;


/* ==== LOGIKA SESUAI PERMINTAAN ==== */

if(BPM > 70) {

Mode_Bahaya(); // Hanya Merah & Buzzer yang aktif

} else {

Mode_Aman(); // LED Hijau, Kuning, dan Buzzer mati

}


HAL_Delay(10);

}

}


/* ================= KONFIGURASI HARDWARE ================= */

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;

HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

}


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; // PA0

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;

HAL_ADC_ConfigChannel(&hadc1, &sConfig);

}


void MX_GPIO_Init(void) {

GPIO_InitTypeDef GPIO_InitStruct = {0};

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


// PA1 Button

GPIO_InitStruct.Pin = GPIO_PIN_1;

GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;

GPIO_InitStruct.Pull = GPIO_PULLUP;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);

HAL_NVIC_EnableIRQ(EXTI1_IRQn);


// PB0, PB1, PB10, PB11

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

}


5. Video Demo  [Kembali]






6. Kondisi  [Kembali]

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]

 Rangkaian Simulasi Link



Komentar

Postingan populer dari blog ini

Tugas Besar

Cover