LA M2 Percobaan 3 Praktikum uP&uC

Nama : Nanda Zahril Pisya
Nim  :            2310953030


LAPORAN AKHIR

PERCOBAAN 2

 1. Prosedur [kembali]

  1. Membuka Wokwi dan membuat project baru dengan menggunakan board STM32F103C8T6, kemudian menambahkan komponen berupa push button dan LM35 sebagai input, L298 dan Motor DC 5V sebagai Output.
  2. Menyusun rangkaian dengan menghubungkan push button ke pin input mikrokontroler (misalnya ke pin A0 atau PA0) , kemudian menghubungkan ke L298 dan Motor DC.
  3. Menuliskan program pada editor Stm32CubeIDE untuk membaca Temperature sebagai simulasi sensor Suhu, dimana Sensor Suhu ditekan dimainkan sebagai kondisi Suhu sekarang.
  4. Menambahkan logika kontrol pada program yaitu ketika tombol tidak ditekan maka Servo akan berjalan manual. ketika sensor LM35 mendeteksi  Suhu 27 > maka Motor DC berputar.

 2. Hardware[kembali]

 1. STM32F103C8

Microcontroller

ARM Cortex-M3

Operating Voltage

3.3 V

Input Voltage (recommended)

5 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 LM35
 








Spesifikasi :

Parameter TeknisSpesifikasi / Nilai
Tegangan Operasi (VCC)4.0V hingga 30V DC
Konsumsi ArusSangat rendah (~60 µA)
Rentang Pengukuran Suhu-55°C hingga +150°C
Faktor Skala Linear (Sensitivitas)+10.0 mV/°C
Akurasi Dasar$\pm 0.5$°C (pada suhu ruang 25°C)
Sinyal OutputAnalog (Tegangan DC)
Efek Pemanasan Sendiri (Self-Heating)Sangat rendah (< 0.08°C di udara diam)
Impedansi OutputRendah (0.1 $\Omega$ untuk beban 1 mA)
Tipe Kemasan / PackagingTO-92 (Bentuk fisik mirip transistor kecil)
 
 
 
4. L298


Parameter TeknisSpesifikasi / Nilai
IC UtamaL298N (Dual H-Bridge Motor Driver)
Tegangan Logika (Vss)5V DC
Tegangan Penggerak Motor (Vs)5V hingga 35V DC
Arus Puncak Maksimal3A per channel (Hanya untuk lonjakan sesaat)
Arus Berkelanjutan (Continuous)2A per channel
Maksimal Daya Output25 Watt
Tegangan Sinyal Input Kontrol2.3V hingga 5V (Kompatibel dengan logika 3.3V)
Regulator Internal78M05 (Menyediakan output 5V jika dibutuhkan)
Dimensi Modul~43 mm x 43 mm x 27 mm


5. Button

Spesifikasi :


8. Adaptor



9. Breadboard

10. KIPAS 5V DC
Parameter TeknisSpesifikasi / Nilai
Tegangan Operasi Normal4.5V hingga 5.5V DC (Sangat stabil di 5V)
Tegangan Mulai (Start-up Voltage)~3.5V DC
Konsumsi Arus100 mA hingga 200 mA (Tergantung kecepatan dan merek)
Kecepatan Putaran (RPM)5000 hingga 7000 RPM
Aliran Udara (Airflow)~5.0 hingga 7.0 CFM (Cubic Feet per Minute)
Tipe Bantalan (Bearing Type)Sleeve Bearing (standar/murah) atau Dual Ball Bearing (awet/mahal)
Tingkat Kebisingan (Acoustic Noise)20 dB hingga 27 dB (Cukup hening)
Tipe MotorBrushless DC Motor (BLDC)
Konektor StandarJST-XH 2-Pin (Pitch 2.54mm) atau Dupont 2-Pin
Siklus Hidup (Life Expectancy)~30.000 jam (Sleeve) / ~50.000 jam (Ball Bearing)

Diagram Blok  :



 3. Rangkaian Simulasi dan Prinsip Kerja [kembali]





Prinsip Kerja: 
Merupakan kendali motor yang dipengaruhi oleh Sensor Suhu dan juga L298 untuk menggerakkan sebuah motor DC (Kipas Angin) 

 4. Flowchart dan Listing Program [kembali]
Flowchart :





Listing Program main.c :
 

#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;

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


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. Video Simulasi


8. Link Download [kembali]




















Komentar

Postingan populer dari blog ini

UTS