Percobaan 2 kondisi 7
(Led RGB, Motor Stepper, & Soil Moisture)
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Hardware dan Diagram Blok[Kembali]
Hardware :
- Mikrokontroler STM32F103C8
- Sensor Soil Moisture
- LED RGB
3. Rangkaian Simulasi[Kembali]
- Rangkaian sebelum di running
- Prinsip Kerja
Berfungsi untuk mengukur tinggat kelembaban tanah, dengan output berupa tegangan analok yang bervariasi tergantung kadar air dalam tanah. Semakin basah tanah, semakin rendah nilai ADC karena konduktivitas tinggi berlaku sebaliknya.
2). Mikrokontroler STM32
- LED merah menyala
- LED hijau mati
- Motor stepper berputar searah jarum jam (CW)
- LED merah mati
- LED hijau menyala
- Motor tidak berputar
4. Flowchart dan Listing Program[Kembali]
- Flowchart
- Listing Program
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Defines -------------------------------------------------------------------*/
#define STEPPER_PORT GPIOB
#define IN1_Pin GPIO_PIN_8
#define IN2_Pin GPIO_PIN_9
#define IN3_Pin GPIO_PIN_10
#define IN4_Pin GPIO_PIN_11
#define LED_PORT GPIOB
#define Red_Pin GPIO_PIN_12
#define Green_Pin GPIO_PIN_13
#define Blue_Pin 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);
/* 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
{
// Hidupkan LED Hijau
HAL_GPIO_WritePin(LED_PORT, Green_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_PORT, Red_Pin | Blue_Pin, GPIO_PIN_RESET);
// Gerakkan stepper motor 1 putaran (contoh: 2048 langkah)
for (int i = 0; i < 2048; i++)
{
Stepper_Step(i % 4);
HAL_Delay(2); // Delay antar langkah (atur sesuai kebutuhan)
}
}
else // Tanah Basah
{
HAL_GPIO_WritePin(LED_PORT, Red_Pin | Green_Pin | Blue_Pin, GPIO_PIN_RESET);
}
}
HAL_Delay(200);
}
}
/**
* @brief Fungsi untuk menggerakkan stepper motor (mode full-step 4 langkah)
*/
void Stepper_Step(int step)
{
switch (step)
{
case 0:
HAL_GPIO_WritePin(STEPPER_PORT, IN1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(STEPPER_PORT, IN2_Pin | IN3_Pin | IN4_Pin, GPIO_PIN_RESET);
break;
case 1:
HAL_GPIO_WritePin(STEPPER_PORT, IN2_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(STEPPER_PORT, IN1_Pin | IN3_Pin | IN4_Pin, GPIO_PIN_RESET);
break;
case 2:
HAL_GPIO_WritePin(STEPPER_PORT, IN3_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(STEPPER_PORT, IN1_Pin | IN2_Pin | IN4_Pin, GPIO_PIN_RESET);
break;
case 3:
HAL_GPIO_WritePin(STEPPER_PORT, IN4_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(STEPPER_PORT, IN1_Pin | IN2_Pin | IN3_Pin, GPIO_PIN_RESET);
break;
}
}
/**
* @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_Pin | IN2_Pin | IN3_Pin | IN4_Pin |
Red_Pin | Green_Pin | Blue_Pin, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = IN1_Pin | IN2_Pin | IN3_Pin | IN4_Pin |
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)
{
/* User can add his own implementation to report the file name and line number */
}
#endif /* USE_FULL_ASSERT */
Percobaan 2 Kondisi 7






.jpg)








Tidak ada komentar:
Posting Komentar