Laporan Akhir Percobaan 2



 

1. Prosedur  [kembali]

  1. Pahami terlebih dahulu kondisi yang akan digunakan
  2. Buka software Proteus 8.17
  3. Persiapkan alat dan bahan
  4. Buat rangkaian sesuai dengan kondisi dan modul
  5. Buka software STM32Cube IDE
  6. Setelah membuka software, pilih perangkat STM32F103C8T6
  7. Sesuaikan konfigurasi pin sesuai dengan rangkaian proteus
  8. Buat kode program untuk mengoperasikan rangkaian tersebut sesuai dengan kondisi
  9. Konfigurasi kan program dengan software Proteus
  10. Jalankan simulasi rangkaian.
  11. Proses selesai

2. Hardware dan Diagram Blok  [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)

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 Suhu LM35
Sensor suhu LM35 adalah sensor analog yang digunakan dalam praktikum Sistem Kontrol Suhu Ruangan untuk mendeteksi suhu lingkungan dengan mengubah besaran panas menjadi tegangan listrik yang linear. Sensor ini menghasilkan tegangan keluaran yang berbanding lurus dengan suhu dalam derajat Celcius, di mana nilai tersebut kemudian dibaca oleh ADC mikrokontroler untuk dikonversi menjadi data suhu digital guna mengontrol kecepatan kipas melalui teknik PWM.
    3. 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.
    4. Kipas DC
Kipas DC berperan sebagai aktuator pendingin yang kecepatannya dapat diatur secara dinamis. Perangkat ini bekerja dengan prinsip induksi elektromagnetik, di mana putaran motornya ditentukan oleh besar tegangan yang diterima. Melalui penggunaan sinyal PWM (Pulse Width Modulation), mikrokontroler dapat mengatur kecepatan kipas secara presisi; semakin besar nilai siklus kerja (duty cycle) yang diberikan, semakin cepat kipas berputar untuk menurunkan suhu ruangan hingga mencapai titik setpoint yang diinginkan.
    5. Motor Driven l298N



Motor Driver L298N adalah modul penggerak motor berbasis H-Bridge yang berfungsi sebagai jembatan daya antara mikrokontroler dan beban induktif seperti motor DC. Karena pin I/O pada mikrokontroler memiliki arus yang sangat terbatas, L298N digunakan untuk mengalirkan arus yang lebih besar dari sumber daya eksternal ke motor agar dapat berputar. Selain itu, modul ini memungkinkan pengendalian arah putaran motor (maju atau mundur) melalui pengaturan logika pin input, serta pengendalian kecepatan putaran melalui sinyal PWM (Pulse Width Modulation) yang mengatur tegangan rata-rata yang diterima oleh motor.
    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. 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.

     8Adaptor

Adaptor berfungsi sebagai sumber catu daya eksternal yang mengubah tegangan AC dari jala-jala listrik menjadi tegangan DC yang stabil. Komponen ini sangat krusial untuk menyuplai energi ke perangkat dengan konsumsi arus tinggi seperti motor DC dan kipas, karena pin daya pada mikrokontroler tidak mampu menyediakan arus yang cukup besar untuk beban mekanis tersebut. Dengan menggunakan adaptor yang terhubung ke modul motor driver, sistem dapat menjalankan aktuator secara optimal tanpa membebani atau merusak komponen logika utama.

     9Diagram Blok:

3. Rangkaian Simulasi dan Prinsip Kerja  [kembali]

Prinspi Kerja: 
Sistem ini bekerja dengan prinsip closed-loop (lengkung tertutup) sederhana untuk menjaga suhu ruangan tetap stabil. Pertama, Sensor Suhu LM35 mendeteksi panas di sekitar dan menghasilkan tegangan analog linear sebesar 10mV/°C. Sinyal analog ini diterima oleh pin ADC (Analog to Digital Converter) pada Arduino, yang kemudian mengonversi nilai tegangan tersebut menjadi data digital berupa derajat Celcius.

Setelah suhu terbaca, mikrokontroler memproses data tersebut berdasarkan parameter yang telah ditentukan dalam kode program. Jika suhu terdeteksi melebihi ambang batas (setpoint), Arduino akan mengirimkan sinyal PWM (Pulse Width Modulation) ke Motor Driver L298N. Motor driver kemudian meneruskan daya dari Adaptor (sumber daya eksternal) untuk memutar Kipas DC. Kecepatan kipas akan menyesuaikan secara otomatis: semakin tinggi suhu yang terbaca, semakin besar nilai duty cycle PWM yang diberikan, sehingga kipas berputar lebih cepat untuk mendinginkan ruangan hingga suhu kembali normal.

4. Flowchart dan Listing Program  [kembali]

Flowchart:
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]

6. Analisa  [kembali]

7. Link Download  [kembali]

Komentar

Postingan populer dari blog ini

ELEKTRONIKA