Senin, 11 Mei 2026

M2 LA 2


[menuju akhir]

1. Prosedur [Kembali ke Atas]

Langkah-langkah percobaan :

1. Siapkan alat dan bahan yaitu dengan komponen utama STM32F103C8, Sensor Suhu Lm35, Kipas DC, Push Button, Motor Driver l298N, Breadboard, Adaptor, Resistor

2. Rangkai sesuai gambar percobaan

3. Rancang kerja rangkaian sesuai flowchart

4. Inisialisasi STM32F103C8 dengan aplikasi STM32CUBE ID

5. Setelah dapat file hex nya, masukkan file hex ke dalam stm pada proteus

6. Tekan tombol “Play” untuk menjalankan simulasi

2. Hardware dan Diagram Blok [Kembali ke Atas]

a. Hardware

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



Touch sensor adalah sensor yang dapat mendeteksi sentuhan atau kontak dari jari manusia (atau objek lain) dan kemudian mengubahnya menjadi sinyal listrik.

3. Push Button

Push button adalah komponen input berupa saklar mekanis yang bekerja ketika ditekan (push) oleh pengguna untuk menghubungkan atau memutuskan aliran listrik dalam suatu rangkaian.

Secara prinsip kerja, push button memiliki dua kondisi utama, yaitu Normally Open (NO) dan Normally Closed (NC). Pada tipe Normally Open, dalam kondisi tidak ditekan rangkaian berada dalam keadaan terbuka (tidak mengalirkan arus), dan ketika tombol ditekan, rangkaian menjadi tertutup sehingga arus dapat mengalir. Sebaliknya, pada tipe Normally Closed, rangkaian dalam kondisi normal tertutup dan akan terbuka saat tombol ditekan.

4. Motor Driver l298N



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.

b. Diagram Blok

Uploading: 76928 of 76928 bytes uploaded.

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali ke Atas]

Prinsip Kerja :

Prinsip kerja rangkaian kontrol suhu ruangan ini dimulai saat sistem dinyalakan dan STM32 melakukan inisialisasi seluruh perangkat, seperti sensor suhu LM35, push button, dan driver motor L298. Setelah itu, sensor LM35 akan membaca suhu ruangan dan mengirimkan tegangan analog ke mikrokontroler STM32. Nilai suhu tersebut kemudian diolah menggunakan ADC untuk menentukan kondisi kipas.

Apabila suhu yang terdeteksi kurang dari 27°C, maka kipas dalam keadaan mati atau duty cycle PWM sebesar 0%. Jika suhu berada pada rentang 27°C–35°C, STM32 akan menghasilkan sinyal PWM dengan duty cycle sekitar 50%–100% sehingga kecepatan kipas meningkat sesuai kenaikan suhu. Saat suhu mencapai atau melebihi 35°C, kipas akan berputar maksimum dengan duty cycle PWM 100%.

Selain itu, sistem juga dilengkapi push button sebagai interrupt eksternal. Ketika tombol ditekan, interrupt akan dijalankan oleh STM32 sehingga kipas dapat dimatikan secara langsung tanpa menunggu proses pembacaan suhu berikutnya. Driver L298 berfungsi sebagai penguat arus dan tegangan untuk mengendalikan motor kipas berdasarkan sinyal PWM dari STM32. Dengan demikian, sistem dapat mengontrol suhu ruangan secara otomatis berdasarkan perubahan temperatur yang dideteksi sensor LM35.

4. Flowchart dan Listing Program [Kembali ke Atas]

a. Flowchart


b. Listing Program

#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 ke Atas]



6. Analisa[Kembali ke Atas]













7. Download File [Kembali ke Atas]


 

0 comments:

Posting Komentar