Tugas Pendahuluan 1 Modul 2


MODUL 1 PERCOBAAN 3 KONDISI 1


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]

     Hardware

    


STM32F103C8



Motor Driver L298


LED

Sensor Suhu LM35


Kipas DC
Jumper
Adaptor

Resistor
Breadboard


3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]


Rangkaian Simulasi
Prinsip Kerja

4. Flowchart dan Listing Program[Kembali]


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

}

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

void LED_Hijau() {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);

}

void LED_Kuning() {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);

}

void LED_Merah() {

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);

}

void LED_Mati() {

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

}

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

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

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

if(GPIO_Pin == GPIO_PIN_1) // PA1

{

buzzerOff = !buzzerOff;

}

}

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

{

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

HAL_ADC_Start(&hadc1);

HAL_ADC_PollForConversion(&hadc1, 10);

adcValue = HAL_ADC_GetValue(&hadc1);

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

filteredValue = moving_average(adcValue);

/* ==== BASELINE (ADAPTIF) ==== */

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

uint32_t threshold = baseline + 50;

/* ==== DETEKSI DETAK + INTERVAL ==== */

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 (TIDAK ADA DETAK) ==== */

if(HAL_GetTick() - lastBeatTime > 2000)

{

BPM = 0;

}

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

if(BPM > 0)

{

if(BPM >30 && BPM < 60)

{

LED_Kuning();

Buzzer_Off();

buzzerOff = 0;

}

else if(BPM <= 80)

{

LED_Hijau();

Buzzer_Off();

buzzerOff = 0;

}

else

{

LED_Merah();

if(!buzzerOff)

Buzzer_On();

else

Buzzer_Off();

}

}

else

{

LED_Mati();

Buzzer_Off();

}

HAL_Delay(5);

}

}

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

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 = ADC */

GPIO_InitStruct.Pin = GPIO_PIN_0;

GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

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

/* 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]
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi sensor heartbear mendeteksi perubahan dari keadaan senang ke sedih sehingga LED berubah dari merah menjadi biru

8. Download File[Kembali]

Rangkaian dan Program Proteus (Klik Disini)

Video Simulasi (Klik Disini)

HTML (Klik Disini)

Tidak ada komentar:

Posting Komentar

Habiburrahman 2310952014

BAHAN UNTUK PERKULIAHAN TEKNIK ELEKTRO   OLEH :  Habiburrahman 2310952014