LAPORAN AKHIR 2



1. Prosedur [kembali]

  1. Susun rangkaian alat sesuai prosedur yang tercantum pada modul.
  2. Jalankan Proteus, lalu buat rangkaian komponen mengikuti skema pada modul.
  3. Buka STM32CubeIDE dan lakukan pengaturan pin untuk menentukan fungsi GPIO sebagai input dan output.
  4. Upload program ke mikrokontroler STM32.
  5. Jalankan sistem untuk menguji program.

2. Hardware dan Diagram Blok [kembali]

  • 1. Resistor


    2. Push Button


    3. Breadboard

    4. Motor Driver

    5. Kipas DC
    6. Sensor Suhu lm35

    7. Adaptor

     8. STM32F103C8


    • Diagram Blog

3. Rangkaian Simulasi dan Prinsip Kerja [kembali]


Prinsip Kerja:
  • Deteksi Suhu (Input Analog): Sensor LM35 temperature sensor mengukur suhu lingkungan dan menghasilkan tegangan linier sekitar 10 mV untuk setiap kenaikan 1°C.
  • Konversi Data (ADC): Tegangan analog tersebut masuk ke mikrokontroler STM32F103C8T6 dan dikonversi menjadi data digital 12-bit dengan rentang 0–4095.
  • Pengolahan Logika Kontrol: Data digital diolah untuk mendapatkan nilai suhu aktual, kemudian dibandingkan dengan setpoint guna menentukan tingkat kecepatan kipas.
  • Penggerak Daya (Motor Driver): Karena arus dari mikrokontroler terbatas, sinyal kontrol diteruskan ke L298N motor driver module yang berfungsi sebagai penguat daya untuk menggerakkan kipas DC.
  • Modulasi Kecepatan (PWM): Kecepatan kipas diatur menggunakan sinyal PWM; semakin tinggi suhu, duty cycle meningkat sehingga putaran kipas menjadi lebih cepat.
  • Interaksi Manual (Interrupt): Push button dengan sistem interrupt (EXTI) memungkinkan kontrol ON/OFF secara langsung tanpa menunggu proses utama selesai.
  • Manajemen Waktu: Fungsi HAL_GetTick() digunakan untuk mengatur pembacaan sensor dan pembaruan kecepatan secara periodik tanpa menghentikan eksekusi program (non-blocking).

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

    (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]

Video Demo Percobaan 3

6. Analisa [kembali]





7. Download File [kembali]

Komentar

Postingan populer dari blog ini

2.12 Voltage-Multiplier Circuits

Tugas Besar - Pengamanan ATM

Modul 1- Potensiometer & Tahanan Geser dan Jembatan Wheatstone