MODUL 2 PERCOBAAN 2 KONDISI 10


1. Prosedur[Kembali]

  1. Menyiapkan alat dan bahan.
  2. Merangkai komponen pada breadboard sesuai dengan gambar rangkaian percobaan.
  3. Menghubungkan masing masing pin input output.
  4. Mengunggah program menggunakan ST-LINK ke mikrokontroler.
  5. Jalankan Rangkaian

2. Hardware dan Diagram Blok[Kembali]

  • STM32 Nucleo 
  • G474RE  
  • LDR Sensor 
  • Push Button 
  • Motor Servo 
  • Breadboard 
  • Adaptor

3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]





Wokwi

Prinsip Kerja:

Prinsip kerja sistem diawali dari sensor cahaya LDR (Light Dependent Resistor) yang berfungsi sebagai pendeteksi intensitas cahaya lingkungan. Nilai resistansi LDR akan berubah sesuai dengan kondisi cahaya yang diterimanya, yaitu resistansi menurun saat kondisi terang dan meningkat saat kondisi gelap. Perubahan resistansi ini kemudian dikonversi menjadi perubahan tegangan melalui rangkaian pembagi tegangan, sehingga dapat dibaca oleh mikrokontroler sebagai sinyal analog.

Selanjutnya, mikrokontroler akan memproses nilai tegangan tersebut dengan membandingkannya terhadap nilai ambang batas (threshold) yang telah ditentukan. Apabila sensor mendeteksi kondisi lingkungan terang (nilai tegangan tertentu yang merepresentasikan cahaya tinggi), maka mikrokontroler akan mengirimkan sinyal kontrol berupa PWM (Pulse Width Modulation) ke motor servo untuk menggerakkan jemuran ke posisi keluar (di luar atap), sehingga pakaian dapat terkena sinar matahari secara optimal.

Sebaliknya, apabila sensor mendeteksi kondisi lingkungan gelap (yang dapat diasumsikan sebagai mendung atau hujan), maka mikrokontroler akan mengirimkan sinyal PWM dengan nilai berbeda untuk menggerakkan motor servo ke posisi masuk (di dalam atap). Hal ini bertujuan untuk melindungi jemuran dari air hujan.

Dengan demikian, sistem ini bekerja secara otomatis berdasarkan intensitas cahaya lingkungan tanpa memerlukan intervensi pengguna, sehingga meningkatkan efisiensi dan keamanan dalam proses penjemuran pakaian.

4. Flowchart dan Listing Program[Kembali]




Flowchart

Listing Program:

#include "main.h" // HANDLE ADC_HandleTypeDef hadc1; TIM_HandleTypeDef htim3; // VARIABLE uint8_t manual_mode = 0; uint8_t posisi_servo = 0; uint8_t last_button = 1; // THRESHOLD #define LDR_THRESHOLD 2000 // ================= 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 PA0 GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // BUTTON PB1 GPIO_InitStruct.Pin = GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &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 (FIX 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 state) { if (state == 0) { __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1000); // Posisi Masuk } else { __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 2000); // Posisi Keluar } } // ================= 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) { // ===== BUTTON TOGGLE (MANUAL) ===== uint8_t button = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1); if (last_button == 1 && button == 0) { manual_mode = !manual_mode; posisi_servo = !posisi_servo; set_servo(posisi_servo); HAL_Delay(50); } last_button = button; // ===== MODE OTOMATIS (LOGIKA TERBALIK) ===== if (!manual_mode) { uint16_t ldr = read_LDR(); // Perubahan di sini: Menggunakan '>' agar Terang = Masuk if (ldr > LDR_THRESHOLD) { posisi_servo = 0; // Terang -> Jemuran Masuk (Atap) } else { posisi_servo = 1; // Gelap -> Jemuran Keluar } set_servo(posisi_servo); } HAL_Delay(100); } } #ifndef __MAIN_H #define __MAIN_H #include "stm32c0xx_hal.h" // PIN DEFINITIONS #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 PROTOTYPES void SystemClock_Config(void); void MX_GPIO_Init(void); void MX_ADC1_Init(void); void MX_TIM3_Init(void); #endif

5. Video Demo[Kembali]

-

6. Kondisi[Kembali]

Buatlah rangkaian dengan kondisi ketika sensor cahaya (LDR) mendeteksi lingkungan terang, maka jemuran akan berada di luar atap (servo pada posisi keluar). Sebaliknya, ketika lingkungan gelap, jemuran akan masuk ke dalam atap (servo pada posisi masuk) untuk menghindari hujan.


8. Download File[Kembali]


Tidak ada komentar:

Posting Komentar

   BAHAN PRESENTASI UNTUK MATA KULIAH ELEKTRONIKA 2024 Oleh  : MUHAMMAD RHAKA AULIA (2310953009) Dosen Pengampu  : Dr. Darwison, MT Referens...