M2_TP2



Percobaan 2 kondisi 1
Led RGB, Motor Stepper, & Soil Moisture


1. Prosedur[Kembali]

    1. Buat rangkaian di Proteus sesuai dengan kondisi percobaan.
    2. Buat program di STM32.
    4. Jalankan simulasinya 
    5. Selesai.

2. Hardware dan Diagram Blok[Kembali]

Hardware :

  • STM32


  • Push button
  • Buzzer


  • LED RGB


  • Resistor

  • Soil Moisture Sensor



3. Rangkaian Simulasi[Kembali]

  • Rangkaian sebelum di running




  • Rangkaian setelah di running




  • Prinsip Kerja 
Rangkaian ini dibuat mengikuti gambar pada Percobaan 2 dengan menggunakan sensor soil moisture sebagai input dan LED RGB sebagai output, yang semuanya dikendalikan oleh mikrokontroler STM32. Sensor soil moisture dihubungkan ke salah satu pin ADC pada STM32 untuk membaca tingkat kelembapan tanah secara analog. Sistem ini dirancang untuk mendeteksi kondisi tanah kering berdasarkan nilai ambang batas yang telah ditentukan. Ketika nilai ADC yang terbaca melebihi 200, hal ini menunjukkan bahwa tanah berada dalam kondisi kering. Dalam keadaan tersebut, STM32 akan mengaktifkan LED RGB untuk menyala dengan warna hijau sebagai indikator bahwa tanah memerlukan penyiraman. Sebaliknya, jika nilai ADC berada di bawah atau sama dengan 200, menandakan bahwa kelembapan tanah masih mencukupi, maka LED RGB akan tetap dalam keadaan mati atau menampilkan warna lain sesuai kebutuhan. Penggunaan ADC pada STM32 memungkinkan pembacaan data dari sensor secara akurat, sedangkan kontrol LED RGB dilakukan melalui pin GPIO atau sinyal PWM yang mengatur intensitas dari masing-masing kanal warna LED.


4. Flowchart dan Listing Program[Kembali]

  • 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)

{

HAL_ADC_Start(&hadc1);

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

uint16_t adc_val = HAL_ADC_GetValue(&hadc1);


if (adc_val > 2500) { // Tanah Kering

HAL_GPIO_WritePin(LED_PORT, Green_Pin, GPIO_PIN_SET);

HAL_GPIO_WritePin(LED_PORT, Red_Pin | Blue_Pin, GPIO_PIN_RESET);

}

else { // Tanah Basah

HAL_GPIO_WritePin(LED_PORT, Red_Pin | Green_Pin | Blue_Pin, GPIO_PIN_RESET);

}

}

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. Kondisi[Kembali]

Percobaan 2 Kondisi 1

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

6. Video Simulasi[Kembali]

     







7. Download File[Kembali]

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









 

Komentar

Postingan populer dari blog ini

Modul 1 Input Output

Modul 3

Tugas Besar