Tugas Pendahuluan 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 [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]





Prinsip Kerja :

Rangkaian ini merupakan sistem pendeteksi denyut jantung yang memanfaatkan sensor heartbeat sebagai input utama, STM32F103C8T6 sebagai pengendali utama, serta LED dan buzzer sebagai indikator output. Sensor heartbeat digunakan untuk mendeteksi denyut jantung pengguna dan menghasilkan sinyal yang selanjutnya dikirim ke mikrokontroler. Sinyal tersebut kemudian diproses oleh STM32 untuk menentukan apakah nilai BPM memenuhi kondisi yang telah ditetapkan pada percobaan.

Pada sistem ini, kondisi yang diterapkan adalah ketika nilai BPM yang terbaca lebih dari 70 dan push button berada pada kondisi tidak ditekan. Jika kedua syarat tersebut terpenuhi, maka mikrokontroler akan mengaktifkan LED merah dan buzzer. LED merah berfungsi sebagai indikator visual bahwa BPM telah melewati batas tertentu, sedangkan buzzer memberikan peringatan dalam bentuk suara.

Push button pada rangkaian berfungsi sebagai input tambahan yang memengaruhi kerja sistem. Dalam percobaan ini, push button digunakan sebagai pengatur logika kondisi output. Saat push button tidak ditekan, sistem akan mengaktifkan LED merah dan buzzer apabila BPM lebih dari 70. Namun, jika push button ditekan, LED merah dan buzzer akan tetap mati meskipun BPM yang terbaca melebihi 70. Oleh karena itu, push button dapat dianggap sebagai pengontrol aktif atau tidaknya sistem peringatan.

STM32F103C8T6 bekerja dengan membaca data dari sensor heartbeat dan status push button. Setelah kedua input diterima, program pada mikrokontroler akan membandingkan nilai BPM dengan batas yang telah ditentukan. Jika BPM lebih besar dari 70 dan push button tidak ditekan, maka pin output yang terhubung ke LED merah dan buzzer akan diaktifkan sehingga LED menyala dan buzzer berbunyi.

Selain LED merah, LED kuning dan LED hijau juga dapat digunakan sebagai indikator tambahan untuk menunjukkan kondisi lain, seperti BPM normal atau kondisi saat tombol ditekan. Akan tetapi, pada percobaan ini fokus utama sistem adalah mengaktifkan LED merah dan buzzer ketika BPM melebihi 70 serta push button berada pada kondisi tidak ditekan. Hal tersebut menunjukkan bahwa rangkaian bekerja berdasarkan kombinasi dua input, yaitu sensor heartbeat dan push button.

Secara umum, prinsip kerja rangkaian ini adalah membaca denyut jantung melalui sensor heartbeat, mengolah data menggunakan STM32F103C8T6, lalu menghasilkan output berupa LED dan buzzer sesuai logika yang telah diprogram. Jika BPM lebih dari 70 dan push button tidak ditekan, maka LED merah akan menyala dan buzzer berbunyi sebagai tanda peringatan. Sebaliknya, apabila salah satu kondisi tidak terpenuhi, LED merah dan buzzer akan tetap tidak aktif.

Listing Program

#include "main.h"

ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_TIM1_Init(void);

uint32_t adcValue = 0;
float voltage = 0;
float temperature = 0;
uint8_t system_on = 1;

int main(void)
{
    HAL_Init();
    SystemClock_Config();

    MX_GPIO_Init();
    MX_ADC1_Init();
    MX_TIM1_Init();

    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

    while (1)
    {
        HAL_ADC_Start(&hadc1);
        HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
        adcValue = HAL_ADC_GetValue(&hadc1);

        voltage = (adcValue / 4095.0) * 3.3;
        temperature = (voltage * 100);

        if(system_on)
        {
            if(temperature >= 27.0)
            {
                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);

                float duty;

                if(temperature >= 35.0)
                {
                    duty = 0.5;
                }
                else
                {
                    duty = 1.0 - ((temperature - 27.0) / 8.0) * 0.5;
                }

                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty * 65535);
            }
            else
            {
                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);

                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
            }
        }
        else
        {
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);

            __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
        }

        HAL_Delay(200);
    }
}

void SystemClock_Config(void)
{
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    RCC_PeriphCLKInitTypeDef PeriphClkInit = {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);

    PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
    PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;

    HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
}

static void MX_ADC1_Init(void)
{
    ADC_ChannelConfTypeDef sConfig = {0};

    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;
    sConfig.Rank = ADC_REGULAR_RANK_1;
    sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;

    HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

static void MX_TIM1_Init(void)
{
    TIM_OC_InitTypeDef sConfigOC = {0};

    htim1.Instance = TIM1;
    htim1.Init.Prescaler = 0;
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim1.Init.Period = 65535;

    HAL_TIM_PWM_Init(&htim1);

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 0;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);

    HAL_TIM_MspPostInit(&htim1);
}

static void MX_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    __HAL_RCC_GPIOA_CLK_ENABLE();

    GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_4;
    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
    GPIO_InitStruct.Pull = GPIO_PULLUP;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI4_IRQn);
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin == GPIO_PIN_4)
    {
        system_on = !system_on;
    }
}

void Error_Handler(void)
{
    __disable_irq();

    while (1)
    {
    }
}

5. Video Demo [Kembali]



6. Kondisi [Kembali]

M1 P1 K1: 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 [Klik]
  • Video Simulasi [Klik]





 




Komentar

Postingan populer dari blog ini