Tugas Pendahuluan 2 Modul 2

 [KEMBALI KE MENU SEBELUMNYA]


Tugas Pendahuluan 2 Modul 2
(Percobaan 2 Kondisi 9)

1. Prosedur [back]

1. Rangkai rangkaian di wokwi sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler STM32 NUCLEO-G474RE di software STM32 CubeIDE.
3. Salin program main.c dan main.h dari stm32cubeide ke wokwi
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada wokwi.
5. Selesai.

2. Hardware dan Diagram Blok [back]

Hardware :

1) Mikrokontroler STM32 NUCLEO-G474RE








2. LDR Sensor




3. Buzzer


4. Power Supply

 
5. Motor Servo


6. push button



7. Adaptor



8. Breadboard



Diagram Blok  :







3. Rangkaian Simulasi dan Prinsip Kerja [back]

Rangkaian Simulasi Sebelum dirunning:







Rangkaian Simulasi Setelah dirunning:
 





Prinsip Kerja : 

   Program ini berfungsi sebagai sistem jemuran otomatis yang memanfaatkan sensor cahaya (LDR) dan motor servo yang dikendalikan oleh mikrokontroler STM32. Cara kerjanya dimulai ketika sistem dijalankan, di mana mikrokontroler melakukan inisialisasi terhadap sistem clock, GPIO, ADC, serta timer PWM yang digunakan untuk mengontrol servo. Sensor LDR yang terhubung pada pin analog (PA0) akan membaca intensitas cahaya lingkungan, kemudian nilai analog tersebut dikonversi menjadi data digital melalui ADC dengan resolusi 12-bit.

Nilai hasil pembacaan cahaya selanjutnya dibandingkan dengan nilai ambang batas yang telah ditentukan (misalnya 2300) untuk membedakan kondisi terang dan gelap. Pada bagian utama program, sistem secara terus-menerus melakukan pembacaan nilai cahaya. Jika nilai yang terbaca lebih kecil dari ambang batas, yang menunjukkan kondisi gelap, maka servo akan digerakkan ke posisi tertentu (sekitar 1200 µs) sehingga jemuran masuk atau tertutup. Sebaliknya, jika nilai cahaya lebih besar dari ambang batas, yang menandakan kondisi terang, servo akan bergerak ke posisi lain (sekitar 1800 µs) sehingga jemuran keluar atau terbuka.

Pengaturan posisi servo dilakukan menggunakan sinyal PWM dari Timer 3 dengan periode sekitar 20 ms (50 Hz), yang merupakan standar pengendalian motor servo. Proses ini dijalankan secara berulang dengan jeda waktu singkat, sehingga sistem dapat merespons perubahan intensitas cahaya secara cepat dan bekerja secara otomatis tanpa kondisi perantara.

4. Flowchart dan Listing Program [back]


Flowchart :





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

// HANDLE
ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim3;

// THRESHOLD (DIUBAH BIAR BEDA)
#define BATAS_CAHAYA 2300

// ================= 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;
  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 (DIMODIFIKASI) =================
void kontrol_jemuran(uint16_t cahaya)
{
  if (cahaya < BATAS_CAHAYA)
  {
    // GELAP → MASUK (ubah sudut)
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1200);
  }
  else
  {
    // TERANG → KELUAR (ubah sudut)
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1800);
  }
}

// ================= ADC READ =================
uint16_t baca_cahaya(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 nilaiCahaya = baca_cahaya();

    // tambahan biar beda
    if (nilaiCahaya > 4095) nilaiCahaya = 4095;

    kontrol_jemuran(nilaiCahaya);

    HAL_Delay(150);
  }
}

5. Kondisi [back]

Percobaan 2 Kondisi 9
Buatlah rangkaian dengan kondisi ketika sensor cahaya (LDR) mendeteksi cahaya di bawah ambang batas tertentu, maka jemuran akan masuk ke dalam atap secara otomatis. Jika berada di atas ambang batas tersebut, jemuran akan keluar ke luar atap tanpa kondisi perantara.

6. Video Simulasi [back]







7. Download File [back]

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

Comments

Popular posts from this blog

Tugas Elektronika