LA2 M2




PERCOBAAN 2 Led RGB, Motor Stepper, & Soil Moisture

1. Prosedur[Kembali]

  1. Rangkai semua komponen sesuai dengan percobaan pada modul 
  2. Buat program untuk STM32 di STM32CubeIDE, sesuaikan konfigurasinya dengan rangkaian pada proteus dan kondisi yang dipakai
  3. Upload program ke STM32
  4. Jalankan rangkaian

2. Hardware dan Diagram Blok[Kembali]

1. STM32F103C8


2. RGB LED



3. Resistor



4. Motor Stepper


5. Sensor Soil Moisture

6. Motor Driver




3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian: 


Prinsip Kerja:

1.      Input Analog (Potensiometer):

  • Potensiometer terhubung ke ADC1 Channel 0 pada STM32.
  • Nilai ADC dibaca terus-menerus dan digunakan untuk menentukan mode kerja motor stepper.
    • ADC < 1365 → Mode CW (Clockwise)
    • 1365 ≤ ADC < 2730 → Mode CCW (Counter-Clockwise)
    • ADC ≥ 2730 → Mode Oscillate (Bolak-balik)

2.      Motor Stepper Driver:

  • Motor dikendalikan melalui 4 pin GPIO (PB8–PB11) yang terhubung ke input driver motor stepper (seperti ULN2003 atau lainnya).
  • Sequence motor diatur melalui array STEP_SEQ_CW dan STEP_SEQ_CCW sesuai arah putaran.

3.      Indikator LED:

  • Tiga buah LED sebagai penanda mode aktif:
    • Merah menyala → CW
    • Hijau menyala → CCW
    • Biru menyala → Oscillate
  • LED dikendalikan melalui GPIO PB12, PB13, dan PB14.

4.      Mode Kontrol:

  • Mode CW: Motor berputar searah jarum jam dengan delay tetap.
  • Mode CCW: Motor berputar berlawanan arah jarum jam.
  • Mode Oscillate: Motor berputar maju-mundur (bolak-balik), berubah arah setelah mencapai langkah terakhir dalam urutan stepper.

5.      Loop Utama (Main Loop):

  • Membaca nilai ADC → Menentukan mode → Menyalakan LED → Menjalankan motor sesuai urutan.

4. Flowchart dan Listing Program[Kembali] 

Flowchart:




Listing Program:

#include "stm32f1xx_hal.h"

// Konfigurasi Hardware

#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_RED_PIN GPIO_PIN_12

#define LED_GREEN_PIN GPIO_PIN_13

#define LED_BLUE_PIN GPIO_PIN_14

#define LED_PORT GPIOB

// Mode Stepper

const uint16_t STEP_SEQ_CW[4] = {0x0100, 0x0200, 0x0400, 0x0800}; // Clockwise

const uint16_t STEP_SEQ_CCW[4] = {0x0800, 0x0400, 0x0200, 0x0100}; // Counter-Clockwise

ADC_HandleTypeDef hadc1;

uint8_t current_mode = 0; // 0=CW, 1=CCW, 2=Oscillate

uint8_t direction = 0; // Untuk mode oscillate

void SystemClock_Config(void);

void MX_GPIO_Init(void);

void MX_ADC1_Init(void);

void RunStepper(const uint16_t *sequence, uint8_t speed);

void Error_Handler(void);

int main(void) {

HAL_Init();

SystemClock_Config();

MX_GPIO_Init();

MX_ADC1_Init();

while (1) {

// Baca potensiometer untuk pilih mode

HAL_ADC_Start(&hadc1);

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

uint16_t adc_val = HAL_ADC_GetValue(&hadc1);

// Tentukan mode

if (adc_val < 1365) { // Mode 1: CW

current_mode = 0;

HAL_GPIO_WritePin(LED_PORT, LED_RED_PIN, GPIO_PIN_SET);

HAL_GPIO_WritePin(LED_PORT, LED_GREEN_PIN|LED_BLUE_PIN, GPIO_PIN_RESET);

}

else if (adc_val < 2730) { // Mode 2: CCW

current_mode = 1;

HAL_GPIO_WritePin(LED_PORT, LED_GREEN_PIN, GPIO_PIN_SET);

HAL_GPIO_WritePin(LED_PORT, LED_RED_PIN|LED_BLUE_PIN, GPIO_PIN_RESET);

}

else { // Mode 3: Oscillate

current_mode = 2;

HAL_GPIO_WritePin(LED_PORT, LED_BLUE_PIN, GPIO_PIN_SET);

HAL_GPIO_WritePin(LED_PORT, LED_RED_PIN|LED_GREEN_PIN, GPIO_PIN_RESET);

}

}

// Eksekusi mode

switch(current_mode) {

case 0: // CW

RunStepper(STEP_SEQ_CW, 10);

break;

case 1: // CCW

RunStepper(STEP_SEQ_CCW, 10);

break;

case 2: // Oscillate

if(direction == 0) {

RunStepper(STEP_SEQ_CW, 5);

if(STEPPER_PORT->ODR == (STEPPER_PORT->ODR & 0x00FF) | STEP_SEQ_CW[3])

direction = 1;

} else {

RunStepper(STEP_SEQ_CCW, 5);

if(STEPPER_PORT->ODR == (STEPPER_PORT->ODR & 0x00FF) | STEP_SEQ_CCW[3])

direction = 0;

}

break;

}

}

}

void RunStepper(const uint16_t *sequence, uint8_t speed) {

static uint8_t step = 0;

STEPPER_PORT->ODR = (STEPPER_PORT->ODR & 0x00FF) | sequence[step];

step = (step + 1) % 4;

HAL_Delay(speed);

}

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;

RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

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();

}

}

void MX_GPIO_Init(void) {

GPIO_InitTypeDef GPIO_InitStruct = {0};

__HAL_RCC_GPIOB_CLK_ENABLE();

// Konfigurasi LED

GPIO_InitStruct.Pin = LED_RED_PIN | LED_GREEN_PIN | LED_BLUE_PIN;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_PULLDOWN; // Tambahkan pull-down

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // High speed untuk stabil

HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);

// Konfigurasi Stepper

GPIO_InitStruct.Pin = IN1_PIN | IN2_PIN | IN3_PIN | IN4_PIN;

HAL_GPIO_Init(STEPPER_PORT, &GPIO_InitStruct);

}

void MX_ADC1_Init(void) {

ADC_ChannelConfTypeDef sConfig = {0};

hadc1.Instance = ADC1;

hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;

hadc1.Init.ContinuousConvMode = DISABLE;

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_71CYCLES_5;

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

Error_Handler();

}

}

void Error_Handler(void) {

while(1) {}

}



5. Analisa[Kembali]





6. Video Demo[Kembali]



7. Download File[Kembali]

Video simulasi [download]
Datasheet Resistor [Download]
Datasheet LED [Download]
Datasheet STM32F1038 [download]





Posting Komentar

Lebih baru Lebih lama