TUGAS PENDAHULUAN 1




MODUL 2

TUGAS PENDAHULUAN 1 


1. Prosedur [kembali]

  1. Membuat proyek baru pada STM32CubeIDE dengan memilih mikrokontroler STM32F103C8, kemudian mengatur pin dengan menjadikan PA0 sebagai input ADC untuk sensor LM35, serta beberapa pin output (misalnya PA2, PA3, PA8) untuk mengontrol driver motor L298 (IN1, IN2, dan ENA).

  2. Selanjutnya dilakukan generate code, lalu menambahkan program pada file main.c dengan logika membaca suhu dari LM35, dimana jika suhu melebihi batas tertentu maka motor akan aktif melalui driver L298, dan jika di bawah batas maka motor berhenti.

  3. Setelah itu, program di-build hingga menghasilkan file berekstensi .hex yang akan digunakan dalam simulasi di Proteus.

  4. Kemudian merancang rangkaian pada Proteus sesuai gambar, dengan menambahkan komponen STM32F103C8, sensor LM35, resistor 10 kΩ (pull-up/reset), driver L298, motor DC, serta sumber tegangan +3.3V dan +6V. Koneksi dilakukan dengan menghubungkan output LM35 ke PA0, pin kontrol L298 (IN1, IN2, ENA) ke pin output STM32, serta motor ke output L298, dan memastikan semua ground terhubung menjadi satu.

  5. Berikutnya, file .hex dimasukkan ke dalam komponen STM32 pada Proteus melalui pengaturan program file.

  6. Terakhir, simulasi dijalankan untuk mengamati hasil, dimana perubahan suhu pada LM35 akan mempengaruhi kerja motor, yaitu motor akan menyala saat suhu tinggi dan berhenti saat suhu rendah sesuai dengan program yang dibuat.


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.

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. Push Button
Push button adalah komponen sakelar sederhana yang berfungsi untuk menghubungkan atau memutuskan aliran arus listrik dalam suatu rangkaian dengan cara menekan tombolnya. Pada penggunaan mikrokontroler, komponen ini berperan sebagai perangkat input digital yang bekerja berdasarkan prinsip logika high atau low, di mana status penekanannya dapat dibaca oleh pin GPIO atau digunakan untuk memicu mekanisme interrupt eksternal. Agar pembacaan sinyal tetap stabil dan terhindar dari kondisi floatingpush button biasanya dikonfigurasi menggunakan resistor pull-up atau pull-down yang memastikan level tegangan input tetap berada pada kondisi logika yang jelas saat tombol tidak sedang ditekan.

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

    4. Breadboard
Breadboard adalah papan sirkuit tanpa solder yang digunakan sebagai media untuk merakit dan menguji purwarupa rangkaian elektronik secara sementara. Papan ini memiliki lubang- lubang koneksi yang terhubung secara internal (horizontal di bagian tengah dan vertikal di jalur daya samping) sehingga memudahkan pengguna untuk menghubungkan sensor, mikrokontroler, dan komponen lainnya dengan kabel jumper. Penggunaan breadboard sangat efisien dalam tahap pengembangan karena memungkinkan komponen untuk dilepas dan dipasang kembali dengan mudah tanpa merusak jalur sirkuit.


5. LM35



LM35 adalah sensor suhu yang sangat populer dalam rangkaian elektronika karena mudah digunakan dan cukup akurat.


6. Motor Driver



Motor driver adalah rangkaian atau modul yang digunakan untuk mengendalikan motor (DC, stepper, atau servo) karena mikrokontroler seperti Arduino atau STM32 tidak mampu langsung memberi arus besar ke motor.


7. Motor DC



Motor DC adalah perangkat yang mengubah energi listrik arus searah (DC) menjadi energi mekanik berupa putaran.


8. Diagram Blok



3. Rangkaian Simulasi dan Prinsip Kerja [kembali]



Prinsip Kerja : 

Prinsip kerja rangkaian ini dimulai ketika sistem diberi catu daya, dimana mikrokontroler STM32 berada dalam kondisi standby dan kipas (motor DC) masih dalam keadaan mati. Sensor suhu LM35 mulai bekerja dengan membaca suhu lingkungan dan mengirimkan sinyal analog ke pin ADC (PA0) pada STM32 secara terus-menerus. Pada kondisi awal ini, sistem belum mengaktifkan motor hingga ada input dari tombol.

Ketika tombol ditekan satu kali, STM32 akan mendeteksi sinyal input tersebut dan mengaktifkan driver motor L298 melalui pin kontrol (IN1, IN2, dan ENA). Akibatnya, motor DC yang berfungsi sebagai kipas akan mulai berputar (ON). Setelah kipas menyala, mikrokontroler tetap melakukan pembacaan suhu dari sensor LM35 secara kontinu untuk memantau kondisi lingkungan.

Selanjutnya, apabila suhu yang terbaca oleh LM35 melebihi 30°C, STM32 akan memberikan respon berupa penurunan kecepatan motor secara bertahap. Hal ini dilakukan dengan mengurangi sinyal PWM pada pin ENA driver L298, sehingga tegangan efektif ke motor berkurang dan putaran kipas melambat secara perlahan. Proses perlambatan ini berlangsung selama kurang lebih 5 detik hingga akhirnya motor berhenti sepenuhnya (OFF).

Sebaliknya, jika suhu masih berada pada 30°C atau di bawahnya, maka kipas akan tetap berputar normal tanpa perubahan kecepatan. Dengan demikian, sistem ini menggabungkan kontrol manual melalui tombol untuk menyalakan kipas, serta kontrol otomatis berbasis suhu untuk mematikan kipas secara halus (soft stop), sehingga kerja sistem menjadi lebih aman dan efisien.

4. Flowchart dan Listing Program [kembali]




Listing Program : 

#include "main.h"


/* ================= VARIABLE ================= */

ADC_HandleTypeDef hadc1;


/* ================= PROTOTYPE ================= */

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_ADC1_Init(void);


/* ================= ADC ================= */

uint32_t Read_ADC(void)

{

HAL_ADC_Start(&hadc1);

HAL_ADC_PollForConversion(&hadc1, 100);

uint32_t adc = HAL_ADC_GetValue(&hadc1);

HAL_ADC_Stop(&hadc1);

return adc;

}


float Read_Temperature(void)

{

uint32_t adc = Read_ADC();

float voltage = adc * 3.3f / 4095.0f;

return voltage * 100.0f;

}


/* ================= FAN ================= */

void Fan_ON(void)

{

HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET);

HAL_GPIO_WritePin(IN2_GPIO_Port, IN2_Pin, GPIO_PIN_RESET);

}


void Fan_OFF(void)

{

HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_RESET);

HAL_GPIO_WritePin(IN2_GPIO_Port, IN2_Pin, GPIO_PIN_RESET);

}


/* ================= STOP PERLAHAN 5 DETIK ================= */

void Fan_Slow_Stop(void)

{

int steps = 20;

int total_time = 5000;

int delay_step = total_time / steps;


for (int duty = 100; duty >= 0; duty -= (100 / steps))

{

uint32_t start = HAL_GetTick();


while (HAL_GetTick() - start < delay_step)

{

HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_SET);

HAL_Delay(duty / 10);


HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, GPIO_PIN_RESET);

HAL_Delay((100 - duty) / 10);

}

}


Fan_OFF();

}


/* ================= MAIN ================= */

int main(void)

{

HAL_Init();

SystemClock_Config();


MX_GPIO_Init();

MX_ADC1_Init();


uint8_t fan_status = 0;

uint8_t last_button = GPIO_PIN_SET;


Fan_OFF();


while (1)

{

float suhu = Read_Temperature();

uint8_t button = HAL_GPIO_ReadPin(BUTTON_GPIO_Port, BUTTON_Pin);


/* Tombol sekali tekan */

if (button == GPIO_PIN_RESET && last_button == GPIO_PIN_SET)

{

HAL_Delay(50);


if (HAL_GPIO_ReadPin(BUTTON_GPIO_Port, BUTTON_Pin) == GPIO_PIN_RESET)

{

fan_status = 1;

Fan_ON();

}

}


last_button = button;


/* Suhu > 30°C */

if (fan_status == 1 && suhu > 30.0f)

{

fan_status = 0;

Fan_Slow_Stop();

}


HAL_Delay(100);

}

}


/* ================= GPIO ================= */

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__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.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);


GPIO_InitStruct.Pin = BUTTON_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_PULLUP;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}


/* ================= 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;

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;


HAL_ADC_ConfigChannel(&hadc1, &sConfig);

}


/* ================= CLOCK ================= */

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;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;


HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

}


/* ================= ERROR ================= */

void Error_Handler(void)

{

__disable_irq();

while (1) {}

}


5. Video Demo [kembali]


6. Kondisi [kembali]

Percobaan 3 Kondisi 6

Buatlah rangkaian seperti percobaan 3 dengan kondisi ketika sensor tombol ditekan sekali maka kipas hidup dan ketika sensor suhu >30 C maka kipas mati secara perlahan selama 5 detik.


7. Video Simulasi [kembali]


8. Link Download [kembali]

Komentar

Postingan populer dari blog ini