Sabtu, 25 April 2026

M2 : Tugas Pendahuluan 2

 

[KEMBALI KE MENU SEBELUMNYA]



Tugas Pendahuluan 2 Modul 2
(Percobaan 2 Kondisi 9)

1. Prosedur 
[Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler STM32 NUCLEO-G474RE di software STM32 CubeIDE.
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
5. Selesai.


Hardware :

a) Mikrokontroler STM32 NUCLEO-G474RE








2. LDR Sensor







3. Push Button




4. Power Supply

 
5. Motor Servo





6. Adaptor



7. Breadboard



Diagram Blok  :








Rangkaian Simulasi Sebelum dirunning:





Rangkaian Simulasi Setelah dirunning:
 






Prinsip Kerja : 

Prinsip kerja dari sistem jemuran otomatis ini adalah memanfaatkan sensor cahaya LDR (Light Dependent Resistor) sebagai pendeteksi intensitas cahaya lingkungan yang kemudian diolah oleh mikrokontroler STM32 untuk menentukan posisi jemuran. LDR akan menghasilkan nilai resistansi yang berubah sesuai dengan banyaknya cahaya yang diterima, di mana semakin gelap kondisi lingkungan maka nilai pembacaan ADC akan berada di bawah ambang batas yang telah ditentukan. Mikrokontroler secara terus-menerus membaca data analog dari LDR melalui fitur ADC, kemudian membandingkannya dengan nilai LDR_THRESHOLD. Apabila nilai yang terbaca lebih kecil dari ambang batas, sistem menganggap cuaca mendung atau kurang cahaya sehingga jemuran perlu diamankan. Berdasarkan kondisi tersebut, mikrokontroler akan memberikan sinyal PWM ke motor servo untuk menggerakkan jemuran masuk ke dalam atap.

Sebaliknya, apabila sensor LDR mendeteksi intensitas cahaya yang tinggi sehingga nilai pembacaan ADC berada di atas ambang batas, sistem menganggap kondisi cuaca terang dan aman untuk menjemur pakaian. Dalam keadaan ini, mikrokontroler langsung mengubah duty cycle sinyal PWM sehingga motor servo bergerak ke posisi keluaran, yaitu menggeser jemuran ke luar atap. Sistem bekerja secara otomatis tanpa adanya kondisi perantara maupun pengendalian manual, sehingga perpindahan posisi jemuran hanya memiliki dua keadaan yaitu masuk atau keluar. Dengan metode ini, jemuran dapat merespons perubahan cahaya secara real-time dan sederhana, sehingga pakaian dapat terlindungi saat kondisi gelap serta memperoleh sinar matahari maksimal saat kondisi terang.



Flowchart :



Listing Program :
a. main.c
#include "main.h"

ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim3;

#define LDR_THRESHOLD 2000

void SystemClock_Config(void);
void MX_GPIO_Init(void);
void MX_ADC1_Init(void);
void MX_TIM3_Init(void);

void set_servo(uint8_t state)
{
 if (state == 0)
 {
  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1000); // jemuran masuk atap
 }
 else
 {
  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 2000); // jemuran keluar atap
 }
}

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);
}

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 < LDR_THRESHOLD)
  {
   set_servo(0); // cahaya di bawah ambang batas -> jemuran masuk
  }
  else
  {
   set_servo(1); // cahaya di atas ambang batas -> jemuran keluar
  }

  HAL_Delay(100);
 }
}

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);
}

void MX_GPIO_Init(void)
{
 __HAL_RCC_GPIOA_CLK_ENABLE();

 GPIO_InitTypeDef GPIO_InitStruct = {0};

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

 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);
}

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);
}

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);
}


b. main.h
#ifndef __MAIN_H
#define __MAIN_H

#include "stm32c0xx_hal.h"

#define LDR_PIN GPIO_PIN_0
#define LDR_PORT GPIOA

#define SERVO_PIN GPIO_PIN_6
#define SERVO_PORT GPIOA

void SystemClock_Config(void);
void MX_GPIO_Init(void);
void MX_ADC1_Init(void);
void MX_TIM3_Init(void);

#endif


Percobaan 2 Kondisi 9




Download HTML [Download]
Download File Rangkaian [Download] [wokwi link]
Download Video Simulasi [Download]
Datasheet Mikrokontroler STM32 NUCLEO-G474RE [Download]
Datasheet Sensor LDR [Download]

Datasheet Servo Motor [Download]

Tidak ada komentar:

Posting Komentar

M2 : Tugas Pendahuluan 2

  [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Prosedur 2. Hardware dan Diagram Blok 3. Rangkaian Simulasi dan Prinsip Kerja 4. Flowchart ...