Tugas Pendahuluan Modul 2 Percobaan 1 kondisi 4

Tugas Pendahuluan Modul 2 Percobaan 1 kondisi 4




1. Prosedur (kembali)

 

  • Pahami terlebih dahulu kondisi yang akan digunakan
  • Buka software Proteus 8.17
  • Persiapkan alat dan bahan
  • Buat rangkaian sesuai dengan kondisi dan modul
  • Buka software STM32Cube IDE 
  • Setelah membuka software, pilih perangkat STM32F103C8T6 
  • Sesuaikan konfigurasi pin sesuai dengan rangkaian proteus 
  • Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi 
  • Konfigurasi kan program dengan software Proteus
  • Jalankan simulasi rangkaian.  
  • Proses selesai
  • 2. Hardware (kembali)

    ● ST-LINK

      Amazon.com: CANADUINO® ST-Link V2 USB Dongle Programmer and Debugger for  STM8 STM32 : Electronics

    ST-LINK adalah alat programmer dan debugger yang digunakan untuk menghubungkan komputer dengan mikrokontroler seri STM32. ST-LINK berfungsi untuk mengunggah program, melakukan debugging, serta memantau jalannya sistem pada STM32 melalui antarmuka seperti SWD (Serial Wire Debug) atau JTAG. Dengan bantuan software seperti STM32CubeIDE, pengguna dapat mengembangkan, menguji, dan memperbaiki program secara langsung pada board STM32 dengan lebih mudah dan efisien.

     

     ● STM32F103C8


    STM32F103C8T6 adalah mikrokontroler berbasis ARM Cortex-M3 yang sering digunakan dalam sistem embedded, robotika, IoT, dan kontrol elektronik. Board ini memiliki kecepatan hingga 72 MHz, memori Flash 64 KB, serta berbagai pin input/output yang mendukung komunikasi seperti UART, SPI, I2C, PWM, dan ADC. STM32F103C8T6 banyak dipilih karena performanya cukup tinggi, hemat daya, serta mudah diprogram menggunakan software seperti STM32CubeIDE dengan bantuan ST-LINK sebagai alat upload program dan debugging.

     

    Push Button 

    Jual Push Button Tactile Tact Switch

     
    ● LED


    ● Buzzer


    ● Resistor

     

     

     ● HeartBeat Sensor

     Heartbeat sensor help - General Guidance - Arduino Forum

      

    ● Breadboard

    Promo Bread Board Breadboard Mini 8.5x5.5 Cm 400 Holes High Quality Arduino  Diskon 15% Di Seller Klinik Rasyid - Pangulah Utara, Kab. Karawang | Blibli 

     ● Diagram Blok

     

    3. Rangkaian Simulasi dan Prinsip Kerja (kembali)

    Percobaan 1 pada modul ini berfokus pada pembuatan sistem Heart Rate Indikator menggunakan mikrokontroler STM32F103C8, di mana sistem membaca sinyal analog dari sensor detak jantung melalui pin ADC untuk kemudian diolah menggunakan metode moving average filter agar data lebih stabil. Hasil pembacaan tersebut diklasifikasikan ke dalam tiga kondisi (Normal, Waspada, dan Bahaya) yang ditandai dengan nyala LED RGB—menggantikan tiga LED tunggal—di mana kombinasi warna atau intensitas cahaya tertentu diatur melalui logika program, sementara Buzzer akan aktif sebagai peringatan suara pada kondisi tertentu. Selain itu, sistem ini menerapkan fitur Interrupt pada komponen tombol (Push Button) yang berfungsi sebagai kendali darurat untuk mematikan seluruh indikator secara instan tanpa mengganggu proses pembacaan sensor utama.

    4. Flowchart dan Listing Program (kembali)

     

     Kode STM32-IDE:

    #include "main.h"


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

    ADC_HandleTypeDef hadc1;


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

    uint32_t adcValue = 0;

    uint32_t filteredValue = 0;

    uint32_t baseline = 0;


    uint8_t beatDetected = 0;

    uint32_t BPM = 0;

    uint32_t lastBeatTime = 0;

    uint32_t interval = 0;


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

    #define FILTER_SIZE 10

    uint16_t buffer[FILTER_SIZE];

    uint8_t indexBuf = 0;


    /* ================= FUNCTION ================= */

    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 sum / FILTER_SIZE;

    }


    /* ================= RGB LED ================= */

    void LED_Mati() {

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

    }


    void LED_Biru() {

    LED_Mati();

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

    }


    void LED_Hijau() {

    LED_Mati();

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

    }


    void LED_Merah() {

    LED_Mati();

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);

    }


    /* ================= BUZZER ================= */

    void Buzzer_On() {

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET);

    }


    void Buzzer_Off() {

    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);

    }


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

    void SystemClock_Config(void);

    static void MX_GPIO_Init(void);

    static void MX_ADC1_Init(void);


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

    int main(void)

    {

    HAL_Init();

    SystemClock_Config();


    MX_GPIO_Init();

    MX_ADC1_Init();


    while (1)

    {

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

    HAL_ADC_Start(&hadc1);

    HAL_ADC_PollForConversion(&hadc1, 10);

    adcValue = HAL_ADC_GetValue(&hadc1);


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

    filteredValue = moving_average(adcValue);


    /* ==== BASELINE ==== */

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

    uint32_t threshold = baseline + 50;


    /* ==== DETEKSI DETAK ==== */

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

    {

    beatDetected = 1;

    uint32_t now = HAL_GetTick();


    if(lastBeatTime != 0)

    {

    interval = now - lastBeatTime;

    BPM = 60000 / interval;

    }


    lastBeatTime = now;

    }


    if(filteredValue < threshold)

    {

    beatDetected = 0;

    }


    /* ==== TIMEOUT ==== */

    if(HAL_GetTick() - lastBeatTime > 2000)

    {

    BPM = 0;

    }


    /* ==== OUTPUT RGB ==== */

    if(BPM > 0)

    {

    if(BPM < 60)

    {

    LED_Biru();

    Buzzer_Off();

    }

    else if(BPM <= 100)

    {

    LED_Hijau();

    Buzzer_Off();

    }

    else

    {

    LED_Merah();

    Buzzer_On();

    }

    }

    else

    {

    LED_Mati();

    Buzzer_Off();

    }


    HAL_Delay(5);

    }

    }


    /* ================= CLOCK ================= */

    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;

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


    PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;

    PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;

    HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);

    }


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

    static 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.DiscontinuousConvMode = 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_1CYCLE_5;


    HAL_ADC_ConfigChannel(&hadc1, &sConfig);

    }


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

    static void MX_GPIO_Init(void)

    {

    GPIO_InitTypeDef GPIO_InitStruct = {0};


    __HAL_RCC_GPIOA_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();


    /* OUTPUT RGB + 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);

    }


    /* ================= ERROR ================= */

    void Error_Handler(void)

    {

    __disable_irq();

    while (1)

    {

    }

    }


    5. Video Demo (kembali)


    6. Kondisi (kembali)

    Percobaan 1  Kondisi 4 Heart Rate Indikator : Buatlah rangkaian seperti pada gambar percobaan 1 namun ganti led nya dengan LED RGB dengan logika dasar yang sama

    7. Video Simulasi (kembali)

    8. Download File (kembali)

  • Rangkaian Proteus [Download]
  • Program [Download]
  • Datasheet STM32F103C8  [Download]
  • Datasheet Heartbeat Sensor [Download]
  • Datasheet Button [Download]
  • Datasheet LED [Download]
  • Video [Download]
  • Datasheet Buzzer  [Download]



  •  
     
     
     
     
     
     
     
     
     

    Komentar

    Postingan populer dari blog ini

    Modul 1 : Gerbang Logika

    Modul 3 : Counter dan Shift Register

    Modul 2 : Flip Flop