Tugas Pendahuluan 1 Modul 2

 [KEMBALI KE MENU SEBELUMNYA]


Tugas Pendahuluan 1 Modul 2
(Percobaan 1 Kondisi 8)

1. Prosedur [back]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler STM32F103C8 di software STM32 CubeIDE.
3. debug program dan simpan dalam bentuk hex
4. uploud atau masukkan hex tadi ke dalam STM32F103C8 di proteus
5.Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
6. Selesai.

2. Hardware dan Diagram Blok [back]

Hardware :

a) Mikrokontroler STM32F103C8








2. Heart Beat Sensor



3. Buzzer


4. Power Supply

 
5. LED

6. Potensiometer




7. Switch



8. Adaptor



9. Breadboard


10.Resistor 220 ohm






Diagram Blok  :







3. Rangkaian Simulasi dan Prinsip Kerja [back]

Rangkaian Simulasi Sebelum dirunning:




Rangkaian Simulasi Setelah dirunning:
 





Prinsip Kerja : 

Sistem bekerja dengan membaca sinyal analog yang masuk ke pin ADC pada mikrokontroler STM32. Sinyal tersebut dikonversi menjadi data digital, kemudian diproses menggunakan metode moving average untuk mengurangi gangguan (noise) sehingga sinyal menjadi lebih stabil dan mudah dianalisis. Setelah proses penyaringan, sistem menggunakan nilai ambang (threshold) tetap sebagai batas untuk menentukan adanya detak.

Ketika nilai sinyal hasil filter melebihi nilai threshold, mikrokontroler mendeteksi adanya detak dan mengaktifkan LED hijau pada pin PB0 selama sesaat, kemudian dimatikan kembali sehingga menghasilkan efek kedipan. Jika nilai sinyal berada di bawah threshold, LED tetap dalam kondisi mati. Proses ini berlangsung secara berulang dengan waktu sampling yang cepat, sehingga LED berkedip mengikuti pola perubahan sinyal yang menyerupai detak jantung secara real-time.

4. Flowchart dan Listing Program [back]


Flowchart :




Listing Program :
#include "main.h" /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc1; /* USER CODE BEGIN PV */ uint32_t adcValue = 0; uint32_t filteredValue = 0; uint8_t beatDetected = 0; #define FILTER_SIZE 10 uint16_t buffer[FILTER_SIZE]; uint8_t indexBuf = 0; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_ADC1_Init(void); /* USER CODE BEGIN 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; } /* USER CODE END 0 */ int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); /* USER CODE BEGIN 2 */ HAL_ADC_Start(&hadc1); /* USER CODE END 2 */ /* Infinite loop */ while (1) { // ==== BACA ADC ==== HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1, 10); adcValue = HAL_ADC_GetValue(&hadc1); // ==== FILTER ==== filteredValue = moving_average(adcValue); // ==== THRESHOLD ==== uint32_t threshold = 2000; // ==== DETEKSI DETAK ==== if(filteredValue > threshold && beatDetected == 0) { beatDetected = 1; // LED HIJAU ON HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); HAL_Delay(100); // LED OFF HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); } if(filteredValue < threshold) { beatDetected = 0; } 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.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; 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 ================= */ 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.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 ================= */ static 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); // LED PB0 GPIO_InitStruct.Pin = GPIO_PIN_0; 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_RESET); }

5. Kondisi [back]

Percobaan 1 Kondisi 8
Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi LED warna menyala hijau dengan pola yang sama dengan detak jantung

6. Video Simulasi [back]







7. Download File [back]

Download HTML [Download]
Download File Rangkaian  [Download]
Download Listing Program [Download]
Download Video Simulasi [Download]
Datasheet Mikrokontroler STM32F103C8 [Download]
Datasheet Sensor Infrared [Download]
Datasheet LED [Download]
Datasheet Buzzer [Download]







Comments

Popular posts from this blog

Tugas Elektronika