Tugas Pendahuluan 2


Percobaan 2 Kondisi 1

1. Prosedur [Kembali]

  • Rangkai semua komponen 
  • Buat program di STM32 CubeIDE
  • Jalankan program dan cobakan sesuai kondisi

Hardware :

  • STM32F103C8 


  • Sensor Kelembapan Tanah 


  • LED RGB


  • Resistor



Diagram Blok


  • Rangkaian

  • Prinsip Kerja

Rangkaian terdiri dari sebuah sensor kelembaban tanah yang menghasilkan sinyal analog yang kemudian dikoneksikan ke salah satu channel ADC (Analog-to-Digital Converter) pada mikrokontroler STM32. Sensor tersebut mengeluarkan tegangan yang mencerminkan kadar air dalam tanah: semakin tinggi kadar air, maka tegangan output sensor semakin rendah, sedangkan semakin kering tanah, tegangan output semakin tinggi.

Saat sistem dinyalakan, STM32 terlebih dahulu melakukan beberapa proses inisialisasi. Fungsi HAL_Init() digunakan untuk menginisialisasi hardware internal, SystemClock_Config() mengatur sistem clock agar seluruh fungsi mikrokontroler berjalan stabil, MX_GPIO_Init() mengatur port GPIO (terutama untuk LED RGB), dan MX_ADC1_Init() mengonfigurasi ADC untuk membaca sinyal analog dari sensor. Setelah semua inisialisasi selesai, sistem masuk ke dalam loop utama (while(1)) untuk melakukan tugas monitoring secara berulang.

Di dalam loop ini, program pertama-tama memulai konversi ADC menggunakan HAL_ADC_Start(&hadc1). Setelah memastikan konversi selesai dengan HAL_ADC_PollForConversion(&hadc1), program membaca nilai hasil konversi menggunakan HAL_ADC_GetValue(&hadc1). Nilai ini adalah angka digital antara 0 sampai 4095, yang mewakili kondisi kelembaban tanah.

Program kemudian membandingkan hasil pembacaan tersebut dengan angka batasan (threshold) sebesar 2500. Jika nilai pembacaan lebih besar dari 2500, itu menandakan tanah dalam kondisi kering. Sebagai respon, sistem akan menyalakan LED hijau (yang terhubung ke pin PB13) sebagai indikator bahwa tanah membutuhkan perhatian atau penyiraman. Bersamaan dengan itu, LED warna lain (merah dan biru) akan dipastikan mati untuk menghindari campuran warna. Namun, jika nilai ADC lebih kecil atau sama dengan 2500, artinya tanah dalam kondisi basah, maka seluruh LED termasuk LED hijau akan dimatikan, menunjukkan bahwa tanah dalam kondisi baik dan tidak perlu tindakan.

Siklus ini terus berulang setiap 200 milidetik (HAL_Delay(200)), sehingga sistem mampu secara real-time memantau perubahan kelembaban tanah dan langsung mengubah status LED sesuai kondisi terkini. 

  • Flowchart
  • Listing Program

/* USER CODE BEGIN Header */

/**

******************************************************************************

* @file : main.c

* @brief : Main program body

******************************************************************************

*/

/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/

#include "main.h"


#define STEPPER_PORT GPIOB

#define IN1_input GPIO_PIN_8

#define IN2_input GPIO_PIN_9

#define IN3_input GPIO_PIN_10

#define IN4_input GPIO_PIN_11


#define LED_PORT GPIOB

#define Red GPIO_PIN_12

#define Green GPIO_PIN_13

#define Blue GPIO_PIN_14


/* Private variables ---------------------------------------------------------*/

ADC_HandleTypeDef hadc1;


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_ADC1_Init(void);

void Error_Handler(void); // <-- Tambah titik koma disini


/* USER CODE BEGIN 0 */


/* USER CODE END 0 */


/**

* @brief The application entry point.

* @retval int

*/

int main(void)

{

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_ADC1_Init();


while (1)

{

// Mulai konversi ADC

HAL_ADC_Start(&hadc1);


// Tunggu hingga konversi selesai

if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK)

{

uint16_t adc_reading = HAL_ADC_GetValue(&hadc1);


if (adc_reading > 2500)

{

// Kondisi tanah kering: Hidupkan LED hijau, matikan LED lain

HAL_GPIO_WritePin(LED_PORT, Green_Pin, GPIO_PIN_SET);

HAL_GPIO_WritePin(LED_PORT, Red_Pin, GPIO_PIN_RESET);

HAL_GPIO_WritePin(LED_PORT, Blue_Pin, GPIO_PIN_RESET);

}

else

{

// Kondisi tanah basah: Matikan semua LED

HAL_GPIO_WritePin(LED_PORT, Red_Pin, GPIO_PIN_RESET);

HAL_GPIO_WritePin(LED_PORT, Green_Pin, GPIO_PIN_RESET);

HAL_GPIO_WritePin(LED_PORT, Blue_Pin, GPIO_PIN_RESET);

}

}


// Tunda sebelum pembacaan berikutnya

HAL_Delay(200);

}


}


/**

* @brief System Clock Configuration

* @retval None

*/

void SystemClock_Config(void)

{

RCC_OscInitTypeDef RCC_OscInitStruct = {0};

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};


RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

RCC_OscInitStruct.HSIState = RCC_HSI_ON;

RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Error_Handler();

}


RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;


if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

{

Error_Handler();

}


PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;

PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

{

Error_Handler();

}

}


/**

* @brief ADC1 Initialization Function

* @param None

* @retval None

*/

static void MX_ADC1_Init(void)

{

ADC_ChannelConfTypeDef sConfig = {0};


hadc1.Instance = ADC1;

hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;

hadc1.Init.ContinuousConvMode = DISABLE;

hadc1.Init.DiscontinuousConvMode = DISABLE;

hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;

hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;

hadc1.Init.NbrOfConversion = 1;

if (HAL_ADC_Init(&hadc1) != HAL_OK)

{

Error_Handler();

}


sConfig.Channel = ADC_CHANNEL_0;

sConfig.Rank = ADC_REGULAR_RANK_1;

sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;

if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)

{

Error_Handler();

}

}


/**

* @brief GPIO Initialization Function

* @param None

* @retval None

*/

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__HAL_RCC_GPIOD_CLK_ENABLE();

__HAL_RCC_GPIOA_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();


HAL_GPIO_WritePin(GPIOB, IN1_input|IN2_input|IN3_input|IN4_input|Red_Pin|Green_Pin|Blue_Pin, GPIO_PIN_RESET);


GPIO_InitStruct.Pin = IN1_input|IN2_input|IN3_input|IN4_input|Red_Pin|Green_Pin|Blue_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}


/**

* @brief This function is executed in case of error occurrence.

* @retval None

*/

void Error_Handler(void)

{

__disable_irq();

while (1)

{

}

}


#ifdef USE_FULL_ASSERT

void assert_failed(uint8_t *file, uint32_t line)

{

}

#endif /* USE_FULL_ASSERT */

5. Video Demo [Kembali]


6. Kondisi [Kembali]

Buatlah rangkaian seperti gambar pada percobaan 2, buatlah ketika soil moisture sensor mendeteksi kelembapan tanah kering, LED RGB menampilkan warna Hijau

HTML [Download]
Rangkaian [Download
Video Simulasi [Download 
Listring Program [Download 


Tidak ada komentar:

Posting Komentar

   BAHAN PRESENTASI UNTUK MATA KULIAH  ELEKTRONIKA 2023 Nama : Hadi Andhika Jafta NIM : 2210951009 Dosen Pengampu : Dr. Darwison, MT...