Laporan Akhir Percobaan 3 (M3)



1. Prosedur [kembali]

1.     Siapkan alat dan bahan yang diperlukan.

2.     Rangkai sensor suhu, fan dc, dan push button sesuai rangkaian.

3.     Hubungkan STM32 ke komputer menggunakan kabel USB.

4.     Buka program pada STM32CubeIDE lalu upload program ke mikrokontroler.

5.     Jalankan alat dan amati kondisi awal sistem.

6.     Berikan perubahan suhu pada sensor untuk menguji respon sistem.

7.     Amati fan dc saat suhu mencapai 27°C atau lebih.

8.     Tekan push button untuk menguji fungsi ON/OFF sistem.

9.      Catat hasil pengamatan dan pastikan alat bekerja sesuai program.

2. Hardware dan Diagram Blok [kembali]

A. Hardware

a) STM32F103C8

b) Sensor Suhu Lm35

LM35 / LM 35 ( Sensor Suhu LM35 ) - JUAL ARDUINO | Jual Arduino Jogja ...

 

c) Kipas DC

Jual Cooling Fan KIPAS 12V DC Brushless pendingin high speed 8 8x8 cm ...

 

d) Push Button

Push Button Switch

 

e) Motor Driver l298N

l298 Dual Bridge Motor Driver Module | Microchip.lk

 

f) Adaptor

Power adaptor for torch flashlight landline phones,,cordless phones ...

 

g) Resistor

SINKITA 100PCS 10K Ohm Copper Pin Metal Film Fixed Resistor 1/4W 0.25W ...

  


B. Diagram Blok


3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

Prinsip Kerja:

Prinsip kerja rangkaian ini yaitu sensor suhu digunakan untuk mendeteksi temperatur lingkungan, kemudian nilainya dibaca oleh mikrokontroler dan diubah menjadi nilai suhu dalam derajat Celcius. Jika suhu mencapai atau melebihi 27°C, maka sistem akan menyalakan output dan mengatur kecepatan motor atau kipas menggunakan sinyal PWM sesuai besar suhu yang terdeteksi. Semakin tinggi suhu, maka kecepatan motor akan semakin meningkat. Sebaliknya, jika suhu berada di bawah 27°C, maka output dan motor akan dimatikan. Sistem juga dilengkapi tombol push button untuk menyalakan atau mematikan sistem secara manual.

4. Flowchart dan Listing Program [kembali]

Ø  Flowchart


Ø  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.0;

float temperature = 0.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.0;

 

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

        __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. Analisa [kembali]


7. Download File [kembali]

         STM32F103C8T6 [Download]

         Datasheet Sensor Suhu Lm35 [Download]

         Datasheet Kipas DC [Download]

         Datasheet Push Button [Download]

         Datasheet Motor Driver l298N  [Download]

         Datasheet Breadboard [Download]

         Datasheet Adaptor [Download]

         Datasheet Resistor  [Download]

         Listing Program [Download]

         Vidio Demo [Klik]

         Analisa [Download]

        HTML [Download]















Comments

Popular posts from this blog