Percobaan 1 Kondisi 7

Percobaan 1

TUGAS PENDAHULUAN 

PERCOBAAN 1 KONDISI 7

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

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 floating, push 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]


Prinspi Kerja: 
Prinsip kerja rangkaian indikator detak jantung ini dimulai ketika sensor heartbeat mendeteksi denyut nadi melalui ujung jari dan mengirimkan sinyal analog ke mikrokontroler untuk dikonversi menjadi data digital melalui fitur ADC. Data digital tersebut kemudian diolah oleh program untuk menghitung nilai BPM (Beats Per Minute); apabila sensor membaca nilai BPM lebih dari 60, maka mikrokontroler akan mengirimkan sinyal output untuk mengaktifkan LED sehingga menyala berwarna kuning dan memicu buzzer agar mengeluarkan bunyi sebagai indikator peringatan. Seluruh proses ini berjalan secara real-time di mana mikrokontroler terus memantau input sensor dan secara otomatis memberikan respon pada komponen output sesuai dengan ambang batas parameter yang telah ditentukan dalam kode program.

 4. Flowchart dan Listing Program [kembali]
Flowchart:


Listing Program:

/* USER CODE BEGIN Header */

/**

******************************************************************************

* @file : main.c

* @brief : Sensor di PA0 (>60%) -> Menyalakan LED PB1 & Buzzer PB11, mematikan PB0 & PB10.

******************************************************************************

*/

/* USER CODE END Header */


/* Includes ------------------------------------------------------------------*/

#include "main.h"


/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */

#define FILTER_SIZE 10

/* USER CODE END PD */


/* Private variables ---------------------------------------------------------*/

ADC_HandleTypeDef hadc1;


/* USER CODE BEGIN PV */

uint32_t adcValue = 0;

uint32_t filteredValue = 0;

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 PFP */

uint32_t Calculate_Moving_Average(uint16_t new_value);

/* USER CODE END PFP */


/* USER CODE BEGIN 0 */

uint32_t Calculate_Moving_Average(uint16_t new_value)

{

buffer[indexBuf] = new_value;

indexBuf++;

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

// Matikan semua LED dan Buzzer di awal program

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

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

/* USER CODE END 2 */


/* Infinite loop */

while (1)

{

/* --- SENSOR A0 MENGONTROL PB1 DAN PB11 --- */

HAL_ADC_Start(&hadc1);

if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)

{

adcValue = HAL_ADC_GetValue(&hadc1);

filteredValue = Calculate_Moving_Average(adcValue);


// Resolusi ADC 12-bit adalah 4095. 60% dari 4095 adalah sekitar 2457.

// Jika nilai potensiometer > 60%

if (filteredValue > 2457)

{

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); // LED PB1 ON

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET); // Buzzer PB11 ON


HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // LED PB0 OFF

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET); // LED PB10 OFF

}

else

{

// Jika nilai <= 60%, matikan PB1 dan PB11

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); // LED PB1 OFF

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET); // Buzzer PB11 OFF


// Pastikan PB0 dan PB10 juga tetap dalam keadaan mati

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);

}

}

HAL_ADC_Stop(&hadc1);


HAL_Delay(10);

}

}


/**

* @brief System Clock Configuration

*/

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.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); }


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;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); }


PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;

PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { Error_Handler(); }

}


/**

* @brief ADC1 Initialization Function

*/

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

hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;

hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;

hadc1.Init.NbrOfConversion = 1;

if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); }


sConfig.Channel = ADC_CHANNEL_0;

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;

if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); }

}


/**

* @brief GPIO Initialization Function

*/

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


// Matikan semua output di awal

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


/* Configure PB0, PB1, PB10, PB11 as Output */

GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}


/* USER CODE BEGIN 4 */


/* USER CODE END 4 */


void Error_Handler(void)

{

__disable_irq();

while (1){}

}


#ifdef USE_FULL_ASSERT

void assert_failed(uint8_t *file, uint32_t line){}

#endif

 5. Video Demo [kembali]

 6. Kondisi [kembali]

Percobaan 1 Kontrol Lampu Lorong

Kondisi 7 : Buatlah rangkaian seperti pada gambar percobaan 1 dengan kondisi sensor heartbeat membaca BPM >60 dan LED menyala warna kuning serta buzzer berbunyi

7. Video Simulasi [kembali]


8. Download File [kembali]

Tidak ada komentar:

Posting Komentar

 BAHAN PRESENTASI MATA KULIAH ELEKTRONIKA      Oleh : Husni Mubarok (2310952012) Dosen Pengampu : Dr. Darwison, M.T. DEPARTEMEN TEKNIK ELEKT...