Percobaan 2 Kondisi 8



1. Prosedur [kembali]

  1. Memahami kondisi atau skenario yang akan digunakan pada percobaan.
  2. Setelah itu, buka website Wokwi.
  3. Siapkan alat dan bahan yang diperlukan.
  4. Buat rangkaian sesuai dengan kondisi yang diinginkan dan mengikuti modul yang ada.
  5. Tulis kode program sesuai instruksi untuk menjalankan rangkaian.
  6. Jalankan simulasi untuk melihat apakah rangkaian sudah bekerja dengan baik.
  7. Jika semua langkah sudah dilakukan, maka proses selesai.

2. Hardware dan Diagram Blok [kembali]

A. Hardware

a)     STM32 Nucleo G474RE

NUCLEO-F411RE STM32 64 ARM Development Board with STM32F411RE MCU ...

b)      LDR Sensor

LDR Light Dependent Resistor Sensor at ₹ 12/piece in Mumbai | ID ...

c)      Motor Servo

Penggunaan Motor Servo dalam Otomasi Industri - Sebuah Tinjauan ...

d) Adaptor

Power adaptor for torch flashlight landline phones,,cordless phones ...

e)     Breadboard

ABS 800 Pin Breadboard at Rs 80/piece in Vadodara | ID: 22340937912

f)     Push Button

Push Button Switch


B. Diagram Blok



3. Rangkaian Simulasi dan Prinsip Kerja [kembali]

Prinsip Kerja

Alat ini bekerja dengan membaca nilai cahaya dari sensor LDR melalui ADC. Jika nilai LDR menunjukkan kondisi gelap, maka servo akan bergerak ke posisi jemuran masuk ke dalam atap. Jika cahaya berada pada kondisi sedang, servo mengatur jemuran pada posisi setengah terbuka. Sedangkan jika sensor mendeteksi lingkungan terang, servo akan bergerak ke posisi jemuran berada di luar atap. Dengan demikian, alat ini dapat mengatur posisi jemuran secara otomatis berdasarkan intensitas cahaya lingkungan.

4. Flowchart dan Listing Program [kembali]

Flowchart:


Listing Program:

A.    main.c

#include "main.h"

 

// HANDLE

ADC_HandleTypeDef hadc1;

TIM_HandleTypeDef htim3;

 

// THRESHOLD LDR

#define BATAS_GELAP   1500

#define BATAS_TERANG  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();

  __HAL_RCC_GPIOB_CLK_ENABLE();

 

  GPIO_InitTypeDef GPIO_InitStruct = {0};

 

  // LDR

  GPIO_InitStruct.Pin = LDR_PIN;

  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  HAL_GPIO_Init(LDR_PORT, &GPIO_InitStruct);

 

  // BUTTON

  GPIO_InitStruct.Pin = BUTTON_PIN;

  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

  GPIO_InitStruct.Pull = GPIO_PULLUP;

  HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct);

 

  // SERVO

  GPIO_InitStruct.Pin = SERVO_PIN;

  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;

  HAL_GPIO_Init(SERVO_PORT, &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;

  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim3.Init.Period = 20000 - 1;

 

  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 CONTROL =================

void set_servo(uint8_t posisi)

{

  if (posisi == 0)

  {

    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1000);

    // Gelap: jemuran berada di dalam atap

  }

  else if (posisi == 1)

  {

    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1500);

    // Cahaya sedang: jemuran setengah terbuka

  }

  else

  {

    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 2000);

    // Terang: jemuran berada di luar atap

  }

}

 

// ================= 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 nilai_ldr = read_LDR();

 

    if (nilai_ldr < BATAS_GELAP)

    {

      set_servo(0);

    }

    else if (nilai_ldr >= BATAS_GELAP && nilai_ldr < BATAS_TERANG)

    {

      set_servo(1);

    }

    else

    {

      set_servo(2);

    }

 

    HAL_Delay(100);

  }

}

 

B.    main.h

#ifndef __MAIN_H

#define __MAIN_H

 

#include "stm32c0xx_hal.h"

 

// PIN

#define LDR_PIN     GPIO_PIN_0

#define LDR_PORT    GPIOA

 

#define BUTTON_PIN  GPIO_PIN_1

#define BUTTON_PORT GPIOB

 

#define SERVO_PIN   GPIO_PIN_6

#define SERVO_PORT  GPIOA

 

// FUNCTION

void SystemClock_Config(void);

void MX_GPIO_Init(void);

void MX_ADC1_Init(void);

void MX_TIM3_Init(void);

 

#endif

5. Video Demo [kembali]

Pada Laporan Akhir

6. Kondisi [kembali]

Percobaan 2 Kondisi 8

Buatlah rangkaian dengan kondisi ketika sensor cahaya (LDR) mendeteksi lingkungan terang, maka jemuran berada di luar atap. Jika cahaya sedang, jemuran berada pada posisi setengah terbuka, dan jika gelap, jemuran berada di dalam atap.

7. Video Simulasi [kembali]

8. Download File [kembali]

Rangkaian Simulasi WokWi [Download]

Program [Download]

Vidio [Klik]

Datasheet STM32 Nucleo G474RE  [Download]

Datasheet LDR Sensor [Download]

Datasheet Push Button [Download]

Motor Servo [Download]

Datasheet Breadboard [Download] 

Adaptor [Download] 

HTML [Download]















Comments

Popular posts from this blog