Tugas Pendahuluan 2 Modul 2


MODUL 1 PERCOBAAN 3 KONDISI 1


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]

        a. Hardware


STM32 NUCLEO-G474RE


PIR Sensor


Push Button


LED


Resistor



Relay


LDR Sensor

Breadboard


3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]


Rangkaian Simulasi
Prinsip Kerja

4. Flowchart dan Listing Program[Kembali]



Flowchart Rangkaian
Listing Program
#include "main.h"

// HANDLE
ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim3;

// THRESHOLD
#define GELAP_THRESHOLD   1500
#define SEDANG_THRESHOLD  3000

// ================= 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;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
}

// ================= GPIO =================
void MX_GPIO_Init(void)
{
  __HAL_RCC_GPIOA_CLK_ENABLE();

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  // LDR PA0
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // SERVO PA6
  GPIO_InitStruct.Pin = GPIO_PIN_6;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

// ================= ADC =================
void MX_ADC1_Init(void)
{
  __HAL_RCC_ADC_CLK_ENABLE();

  hadc1.Instance = ADC1;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;

  HAL_ADC_Init(&hadc1);
}

// ================= PWM SERVO =================
void MX_TIM3_Init(void)
{
  __HAL_RCC_TIM3_CLK_ENABLE();

  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 48 - 1;   // 1us
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 20000 - 1;   // 20ms (50Hz)

  HAL_TIM_PWM_Init(&htim3);

  TIM_OC_InitTypeDef sConfigOC = {0};
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 1500;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

  HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);
}

// ================= SERVO =================
void set_servo(uint8_t state)
{
  if (state == 0)
  {
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1000); // masuk penuh
  }
  else if (state == 1)
  {
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1500); // setengah terbuka
  }
  else
  {
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 2000); // keluar penuh
  }
}

// ================= ADC READ =================
uint16_t read_LDR(void)
{
  ADC_ChannelConfTypeDef sConfig = {0};

  sConfig.Channel = ADC_CHANNEL_0;
  sConfig.Rank = ADC_REGULAR_RANK_1;

  HAL_ADC_ConfigChannel(&hadc1, &sConfig);

  HAL_ADC_Start(&hadc1);
  HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);

  return HAL_ADC_GetValue(&hadc1);
}

// ================= MAIN =================
int main(void)
{
  HAL_Init();
  SystemClock_Config();

  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_TIM3_Init();

  HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);

  while (1)
  {
    uint16_t ldr = read_LDR();

    if (ldr < GELAP_THRESHOLD)
    {
      set_servo(0); // GELAP → masuk
    }
    else if (ldr < SEDANG_THRESHOLD)
    {
      set_servo(1); // SEDANG → setengah terbuka
    }
    else
    {
      set_servo(2); // TERANG → keluar
    }

    HAL_Delay(100);
  }

}

5. Video Demo[Kembali]

6. Kondisi[Kembali]
Buatlah rangkaian dengan kondisi ketika sensor cahaya (LDR) mendeteksi lingkungan gelap, maka jemuran akan masuk sepenuhnya ke dalam atap. Namun, jika cahaya berada pada kondisi sedang, jemuran berada pada posisi setengah terbuka, dan jika terang, jemuran berada di luar atap.

8. Download File[Kembali]

Rangkaian dan Program Proteus (Klik Disini)

Video Simulasi (Klik Disini)

HTML (Klik Disini)

Tidak ada komentar:

Posting Komentar

Habiburrahman 2310952014

BAHAN UNTUK PERKULIAHAN TEKNIK ELEKTRO   OLEH :  Habiburrahman 2310952014