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
c) Kipas DC
d) Push Button
e) Motor Driver l298N
f) Adaptor
g) Resistor
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
Post a Comment