Persiapan komponen: Siapkan mikrokontroler STM32F103C8 (Blue Pill), driver motor L298, sensor suhu LM35, motor DC, resistor 10kΩ, dan catu daya terpisah untuk motor.
Koneksi sensor LM35 (U2):
- Hubungkan pin 1 (VCC) ke +3.3V
- Hubungkan pin 2 (VOUT) ke pin PA0 (ADC input) pada STM32
- Hubungkan pin 3 (GND) ke ground
Koneksi STM32 ke L298 (U3):
- Hubungkan PA4 ke IN1 pada L298
- Hubungkan PA5 ke IN2 pada L298
- Hubungkan pin PWM (misal PA6/PA7) ke ENA untuk kontrol kecepatan
- Hubungkan SENSA dan SENSB ke ground melalui resistor atau langsung ke ground jika tidak digunakan untuk current sensing
Koneksi motor:
- Hubungkan motor DC ke terminal OUT1 dan OUT2 pada L298
Koneksi power L298:
- Hubungkan VCC (pin 9) ke +5V untuk logic supply
- Hubungkan VS (pin 4) ke catu daya motor terpisah (+5V hingga +35V sesuai kebutuhan motor)
- Hubungkan GND (pin 8) ke common ground
Pull-up resistor: Pasang resistor R1 (10kΩ) dari pin NRST ke +3.3V untuk menjaga stabilitas reset.
Koneksi ground: Pastikan ground STM32, ground L298, dan ground catu daya motor semuanya terhubung bersama.
2. Hardware dan Diagram Blok[Kembali]
1. STM32F103C8
2. Resistor
.jpeg)
3. L298N
Modul L298N bekerja berdasarkan prinsip H-Bridge (jembatan-H), yaitu rangkaian yang memungkinkan motor DC berputar ke dua arah (maju dan mundur) dengan cara mengatur polaritas tegangan pada motor.
Di dalamnya terdapat dua kanal driver sehingga dapat mengontrol:
- 2 motor DC secara independen, atau
- 1 motor stepper
Pengendalian dilakukan melalui:
- Pin IN1–IN4 → menentukan arah putaran motor
- Pin ENA dan ENB → mengatur kecepatan motor menggunakan sinyal PWM
Cara kerja dasar:
- IN1 = HIGH, IN2 = LOW → Motor A berputar maju
- IN1 = LOW, IN2 = HIGH → Motor A berputar mundur
- IN1 = IN2 = LOW atau HIGH → motor berhenti (brake/stop)
- ENA/ENB diberi PWM → mengatur kecepatan motor (0–100%)
Selain itu, modul ini menggunakan suplai:
- 12V (Vs) → untuk motor
- 5V → untuk logika (Arduino dan IC driver)
- GND → harus disatukan (common ground)
2. Prosedur Kerja Penggunaan L298N
a. Persiapan Komponen
- Modul L298N
- Motor DC
- Mikrokontroler (Arduino/STM32)
- Sumber tegangan (baterai 5–12V atau lebih sesuai motor)
b. Rangkaian Koneksi
-
Hubungkan motor ke terminal:
- Motor A → OUT1 dan OUT2
- Motor B → OUT3 dan OUT4
-
Hubungkan catu daya:
- +V motor → pin 12V L298N
- GND → GND L298N
-
Hubungkan kontrol ke mikrokontroler:
- IN1 – IN4 → pin digital Arduino/STM32
- ENA / ENB → pin PWM (untuk kontrol kecepatan)
-
Satukan ground:
- GND L298N ↔ GND mikrokontroler
c. Pengaturan Mode Kerja
- Pasang jumper ENA/ENB → motor kecepatan penuh
- Lepas jumper ENA/ENB → kecepatan diatur PWM
d. Pengoperasian
- Berikan logika pada IN1–IN4 untuk menentukan arah motor
- Kirim sinyal PWM pada ENA/ENB untuk mengatur kecepatan
- Motor akan berputar sesuai kombinasi input
Sensor suhu LM35 adalah komponen elektronika yang memiliki fungsi untuk mengubah besaran suhu menjadi besaran listrik dalam bentuk tegangan.
Pinout:
- LM35, LM35A -> range pengukuran temperature -55ºC hingga +150ºC.
- LM35C, LM35CA -> range pengukuran temperature -40ºC hingga +110ºC.
- LM35D -> range pengukuran temperature 0ºC hingga +100ºC.
- Rentang suhu yang jauh, antara -55 sampai +150ºC
- Low self-heating, sebesar 0.08 ºC
- Beroperasi pada tegangan 4 sampai 30 V
- Tidak memerlukan pengkondisian sinyal
- Membutuhkan tegangan untuk beroperasi.
5.Motor
6. Vcc / Batrey
- Input voltage: ac 100~240v / dc 10~30v
- Output voltage: dc 1~35v
- Max. Input current: dc 14a
- Charging current: 0.1~10a
- Discharging current: 0.1~1.0a
- Balance current: 1.5a/cell max
- Max. Discharging power: 15w
- Max. Charging power: ac 100w / dc 250w
- Jenis batre yg didukung: life, lilon, lipo 1~6s, lihv 1-6s, pb 1-12s, nimh, cd 1-16s
- Ukuran: 126x115x49mm
- Berat: 460gr

Prinsip kerja push button pada dasarnya adalah untuk menghubungkan dan memutuskan aliran listrik. Namun, tombol tekan tidak memiliki kunci dan akan kembali ke posisi semula setelah ditekan.
Ketika tombol tekan ditekan, nilainya menjadi HIGH dan mengalirkan arus listrik. Namun, setelah dilepas, tombol akan bernilai LOW dan memutuskan arus listrik.
Namun, bagaimana tombol tekan bekerja bisa berbeda tergantung dari jenis tombol tersebut, apakah itu NO atau NC.
Oleh karena itu, penting untuk memahami konsep dasar dan spesifikasi dari tombol tekan yang akan digunakan pada setiap proyek.
3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Rangkaian Simulasi
Rangkaian ini merupakan sistem kontrol motor berbasis suhu yang memanfaatkan pembacaan analog dari sensor LM35. Sensor LM35 menghasilkan tegangan output yang proporsional terhadap suhu lingkungan dengan sensitivitas 10mV/°C, sehingga pada suhu 25°C sensor akan menghasilkan tegangan sekitar 250mV. Mikrokontroler STM32F103C8 membaca nilai tegangan ini melalui pin ADC PA0, kemudian mengkonversinya menjadi nilai suhu menggunakan perhitungan matematis dalam program. Berdasarkan nilai suhu yang terbaca, mikrokontroler menentukan apakah motor perlu diaktifkan atau tidak, misalnya untuk sistem pendingin yang menyala otomatis saat suhu melewati batas tertentu. Driver motor L298 menerima sinyal kontrol dari STM32 melalui pin IN1 dan IN2 untuk menentukan arah putaran motor, sementara pin ENA menerima sinyal PWM untuk mengatur kecepatan motor. Kombinasi logika IN1 dan IN2 menentukan apakah motor berputar searah jarum jam, berlawanan arah jarum jam, atau berhenti, sedangkan duty cycle PWM pada ENA mengontrol persentase daya yang diberikan ke motor sehingga kecepatan dapat divariasikan secara halus sesuai kebutuhan aplikasi.
4. Flowchart dan LIsting Program[Kembali]
Flowchart
Listing Program :
#include "main.h"
/* ================= HANDLE ================= */
ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim1;
/* ================= PROTOTYPE ================= */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_TIM1_Init(void);
/* ================= VARIABLE ================= */
uint32_t adcValue = 0;
float voltage = 0.0f;
float temperature = 0.0f;
uint8_t system_on = 1;
/* ================= MAIN ================= */
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.0f) * 3.3f;
temperature = voltage * 100.0f; // LM35 (10mV/°C)
if (system_on)
{
float duty = 0.0f;
/* ================= LOGIKA KIPAS ================= */
if (temperature < 30.0f)
{
/* >>> PELAN (jelas beda) <<< */
duty = 0.10f; // 10%
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
}
else if (temperature >= 30.0f && temperature < 40.0f)
{
/* >>> NAIK LINEAR 30–40°C <<< */
/* 30°C = 10%, 40°C = 100% */
duty = 0.10f + ((temperature - 30.0f) / 10.0f) * 0.90f;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
}
else
{
/* >>> ≥ 40°C → MATI <<< */
duty = 0.0f;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
}
/* ===== SET PWM ===== */
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,
(uint32_t)(duty * 65535));
}
else
{
/* ===== SYSTEM OFF ===== */
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);
}
}
/* ================= CLOCK ================= */
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);
}
/* ================= ADC ================= */
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; // PA0
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
/* ================= TIM1 PWM ================= */
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;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&htim1);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_MspPostInit(&htim1);
}
/* ================= GPIO ================= */
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
/* PA2 & PA3 (LED / Driver) */
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);
/* PA4 (BUTTON EXTI) */
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);
}
/* ================= EXTI CALLBACK ================= */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_4)
{
system_on = !system_on;
}
}
/* ================= ERROR ================= */
void Error_Handler(void)
{
__disable_irq();
while (1) {}
}
Buatlah rangkaian seperti percobaan 3 dengan kondisi ketika sensor LM35 mendeteksi suhu <30 C maka kipas menyala dengan kecepatan rendah dan saat suhu naik maka kecepatan kipas naik secara linear dan ketika suhu 40 C kipas mati.
1. Download HTML [disini]
2. Download Rangkaian Proteus [disini]
3. Download Vidio Rangkaian [disini]
4. Download Datasheet Sensor:
- datasheet Sensor LM35 [disini]
5. Download library Komponen:
- library Sensor LM35 [disini]
7. Download datasheet Motor [disini]
8. Download datasheet Led [disini]
9. Download listing program [disini]
10. Download data sheet [disini]



.jpg)








Tidak ada komentar:
Posting Komentar