Tugas Pendahuluan Dan Laporan Akhir 1
1. Prosedur [kembali]
- Langkah-langkah percobaan pada proteus :
- 1. Buka software proteus
- 2. Siapkan alat dan bahan yaitu dengan komponen utama STM32F103C8, sensor suhu LM35, kipas DC, Resistor, Motor Driver l298N, Push Button
- 3. Rangkai sesuai gambar percobaan
- 4. Rancang kerja rangkaian sesuai kondisi
- 5. Masukan Program ke dalam software STM32CubeIDE lalu build untuk mendapatkan file .hex
- 6. Setelah dapat file hex nya, masukkan file hex ke dalam stm pada proteus
- 7. Simulasikan rangkaian
Langkah-langkah percobaan langsung: - Siapkan seluruh komponen yang dibutuhkan seperti STM32F103C8, sensor suhu LM35, kipas DC, Resistor, Motor Driver l298N, Push Button, ST-LINK, resistor 220Ω, serta kabel jumper.
- Rangkai komponen sesuai dengan gambar yang ada di modul
- Pastikan semua koneksi sudah sesuai, tidak ada kabel yang longgar atau terbalik.
- Hubungkan board STM32 ke komputer menggunakan ST-LINK, lalu lakukan pemrograman sesuai dengan flowchart yang telah dibuat.
- Setelah program berhasil di-upload, silahkan run untuk memastikan logika dan rangkaian sudah benar.
2. Hardware dan Diagram Blok [kembali]
- a. Hardware
1. STM32F103C8TM32F103C8 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.2. Sensor Suhu LM353. Kipas DCLM35 temperature sensor adalah sensor suhu analog berbasis IC yang digunakan untuk mengukur temperatur lingkungan dalam satuan derajat Celsius (°C).
Kipas DC adalah kipas yang menggunakan sumber listrik arus searah (Direct Current / DC) untuk menggerakkan motor sehingga menghasilkan aliran udara.
4. Motor Driver l298NMotor Driver L298N adalah modul driver motor berbasis IC L298 yang digunakan untuk mengendalikan motor DC atau motor stepper dengan bantuan mikrokontroler.
5. Push ButtonPush button adalah saklar mekanik sederhana yang bekerja saat ditekan untuk menghubungkan atau memutus aliran listrik dalam suatu rangkaian.6. ResistorResistor 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. Adaptor
8. Jumper
9. Breadboard
b. Diagram Blok
3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
4. Flowchart dan Listing Program [kembali]
- Flowchart
- Program
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim1;
/* USER CODE BEGIN PV */
uint32_t adcValue = 0;
float voltage = 0;
float temperature = 0;
volatile uint8_t system_on = 1;
uint8_t fan_state = 0; // 0 = mati, 1 = hidup
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM1_Init(void);
static void MX_ADC1_Init(void);
/* USER CODE BEGIN 0 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_4)
{
system_on = !system_on;
}
}
/* USER CODE END 0 */
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM1_Init();
MX_ADC1_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
/* USER CODE END 2 */
/* Infinite loop */
while (1)
{
// =========================
// BACA SUHU LM35
// =========================
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
adcValue = HAL_ADC_GetValue(&hadc1);
voltage = (adcValue / 4095.0f) * 3.3f;
temperature = voltage * 100.0f;
// Optional: stabilisasi pembacaan
temperature = ((int)(temperature * 10)) / 10.0f;
if(system_on)
{
// =========================
// HISTERESIS
// =========================
if(temperature >= 31.0f)
{
fan_state = 1; // nyala
}
else if(temperature <= 30.0f)
{
fan_state = 0; // mati
}
// =========================
// EKSEKUSI KIPAS
// =========================
if(fan_state == 1)
{
HAL_GPIO_WritePin(GPIOA, IN1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, IN2_Pin, GPIO_PIN_RESET);
float duty = 0.0f;
if(temperature >= 40.0f)
{
duty = 1.0f; // full speed
}
else if(temperature >= 31.0f)
{
duty = (temperature - 31.0f) / 9.0f;
}
else
{
duty = 0.0f;
}
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,
(uint32_t)(duty * 65535));
}
else
{
// MATI TOTAL
HAL_GPIO_WritePin(GPIOA, IN1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, IN2_Pin, GPIO_PIN_RESET);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
}
}
else
{
// OFF manual
HAL_GPIO_WritePin(GPIOA, IN1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, IN2_Pin, GPIO_PIN_RESET);
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
fan_state = 0;
}
HAL_Delay(200);
}
}
/**
* @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;
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.DiscontinuousConvMode = 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_1CYCLE_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
static void MX_TIM1_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
htim1.Instance = TIM1;
htim1.Init.Prescaler = 0;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 65535;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim1);
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig);
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_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
HAL_GPIO_WritePin(GPIOA,
IN1_Pin | IN2_Pin,
GPIO_PIN_RESET);
GPIO_InitStruct.Pin = IN1_Pin | IN2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
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 Error_Handler(void)
{
__disable_irq();
while (1)
{
}
}
.
7. Video Simulasi [kembali]
Percobaan 4
8. Download File [kembali]
- Download Tugas Pendahuluan (klik disini)
- Download Laporan Akhir (klik disini)
- Download Datasheet Sensor LM35 (klik disini)
- Download Datasheet Motor l298N (klik disini)
- Download Datasheet Resistor (klik disini)
- Download Datasheet Push Button (klik disini)

Komentar
Posting Komentar