TP 2

 [KEMBALI KE MENU SEBELUMNYA]


Percobaan 3 Kondisi 4

1. Prosedur [Kembali]

  1. Menyiapkan alat dan bahan.
  2. Merangkai komponen pada breadboard sesuai dengan gambar rangkaian percobaan.
  3. Menghubungkan masing masing pin input output.
  4. Mengunggah program menggunakan ST-LINK ke mikrokontroler.
  5. Jalankan Rangkaian

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.

2. Sensor Suhu LM35

LM35 temperature sensor adalah sensor suhu analog berbasis IC yang digunakan untuk mengukur temperatur lingkungan dalam satuan derajat Celsius (°C).

3. Kipas DC

Kipas DC adalah kipas yang menggunakan sumber listrik arus searah (Direct Current / DC) untuk menggerakkan motor sehingga menghasilkan aliran udara.


4. Motor Driver l298N 

Motor Driver L298N adalah modul driver motor berbasis IC L298 yang digunakan untuk mengendalikan motor DC atau motor stepper dengan bantuan mikrokontroler.


5. Push Button

Push button adalah saklar mekanik sederhana yang bekerja saat ditekan untuk menghubungkan atau memutus aliran listrik dalam suatu rangkaian.

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. Adaptor



8. Jumper



9. Breadboard


Diagram Blok

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Percobaan 3 Kondisi 4

Prinsip Kerja Rangkaian

Rangkaian ini menggunakan sensor suhu LM35, mikrokontroler STM32F103C8, driver motor L298N, dan kipas DC sebagai output. Sensor LM35 berfungsi mendeteksi suhu ruangan dan menghasilkan tegangan analog yang sebanding dengan suhu. Tegangan analog tersebut dibaca oleh ADC pada STM32 untuk diproses menjadi nilai suhu.

Berdasarkan nilai suhu yang terbaca, STM32 menghasilkan sinyal PWM menuju driver motor L298N untuk mengatur kecepatan kipas. Pada kondisi suhu di bawah 20°C, kipas menyala dengan kecepatan yang berubah-ubah sesuai suhu. Semakin rendah suhu menuju 10°C, maka duty cycle PWM semakin kecil sehingga putaran kipas menurun secara linear.

Saat suhu mendekati 20°C, kipas berputar lebih cepat. Kemudian kecepatan kipas terus berkurang secara bertahap seiring penurunan suhu hingga mencapai 10°C. Ketika suhu tepat 10°C atau lebih rendah, STM32 menghentikan sinyal PWM sehingga driver L298N mematikan motor dan kipas berhenti berputar.

Driver L298N digunakan sebagai penguat arus karena arus keluaran STM32 tidak cukup untuk langsung menggerakkan motor DC. Sedangkan push button pada rangkaian dapat digunakan sebagai kontrol tambahan seperti ON/OFF sistem atau interrupt sesuai program yang digunakan.


4. Flowchart [Kembali]

  • Flowchart



Flowchart
  • Listing Program

#ifndef __MAIN_H

#define __MAIN_H


#include "stm32f1xx_hal.h"


// Motor L298

#define IN1_PIN GPIO_PIN_2

#define IN1_PORT GPIOA


#define IN2_PIN GPIO_PIN_3

#define IN2_PORT GPIOA


// Push Button

#define BTN_PIN GPIO_PIN_4

#define BTN_PORT GPIOA


void Error_Handler(void);


#endif


void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);

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


// Variabel

uint32_t adcValue = 0;

float voltage = 0;

float temperature = 0;

uint8_t system_on = 1;


// PWM linear turun

uint16_t duty = 60000;

uint32_t lastTick = 0;


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)

{

// ===== BACA LM35 =====

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;


// ===== LOGIKA FAN =====

if(system_on)

{

if(temperature >= 30.0)

{

// arah motor

HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET);

HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET);


// penurunan linear terhadap waktu

if(HAL_GetTick() - lastTick >= 200)

{

lastTick = HAL_GetTick();


if(duty > 1000)

{

duty -= 2000;

}

else

{

duty = 0;

}

}


__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty);

}

else

{

// suhu turun → reset

HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET);

HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET);


duty = 60000;

__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);

}

}

else

{

HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET);

HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET);

__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);

}


HAL_Delay(100);

}

}


void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct = {0};

RCC_ClkInitTypeDef RCC_ClkInitStruct = {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);

}


static void MX_ADC1_Init(void)

{

ADC_ChannelConfTypeDef sConfig = {0};


__HAL_RCC_ADC1_CLK_ENABLE();


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


__HAL_RCC_TIM1_CLK_ENABLE();


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


// PA2 & PA3 → Output motor

GPIO_InitStruct.Pin = IN1_PIN | IN2_PIN;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


// PA0 → Analog (LM35)

GPIO_InitStruct.Pin = GPIO_PIN_0;

GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


// PA4 → Button (polling)

GPIO_InitStruct.Pin = BTN_PIN;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_PULLUP;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}


void Error_Handler(void)

{

__disable_irq();

while (1) {}

}


5. Video Demo [Kembali]



6. Kondisi [Kembali]

M2 P2 K7: Buatlah rangkaian dengan kondisi ketika sensor cahaya (LDR) mendeteksi cahaya sangat rendah, maka jemuran akan segera masuk ke dalam atap. Jika cahaya sedang, jemuran berada pada posisi setengah terbuka, dan jika terang, jemuran berada di luar atap.


7. Video Simulasi [Kembali]





8. Download File [Kembali]

Rangkaian Simulasi [Klik]

Video Simulasi [Klik]

Komentar