TUGAS PENDAHULUAN 2





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


1. Prosedur [kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Buat program untuk mikrokontroler STM32F103C8 di software STM32 CubeIDE.
3. Compile program dalam format hex, lalu upload ke dalam mikrokontroler.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
5. Selesai.

 

2. Hardware dan Diagram Blok [kembali]

Hardware :

  • Mikrokontroler STM32F103C8


  • Sensor Soil Moisture


  • LED RGB


  • Resistor
  • Potensiometer

  • Powersupply




Diagram Blok




3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
  • Rangkaian sebelum di running


  • Rangkaian setelah di running



  • Prinsip Kerja

    1.     Sensor Kelembaban Tanah (Soil Moisture Sensor)

    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
    Berfungsi untuk membaca nilai ADC dari sensor kelembaban tanah dan mengendalikan LED indikator serta motor stepper. Kemudian nilai dari sensor dibaca menggunakan pin ADC1 Channel 0.

    3.     Motor Stepper
    Terkoneksi ke GPIOB pin 8–11, Dimana dikendalikan menggunakan urutan langkah
    STEP_SEQ_CW untuk rotasi searah jarum jam. Hanya akan aktif bila kembaban tanah tinggi.

    4.     Fungsi Utama dalam Program
    RunStepper() digunakan untuk mengaktifkan motor satu langkah per siklus dengan delay yang ditentukan.
    MX_GPIO_Init() dan MX_ADC1_Init() untuk inisialisasi pin dan ADC


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 // Menyala saat tanah basah

#define LED_GREEN_PIN GPIO_PIN_13 // Mati saat tanah basah

#define LED_BLUE_PIN GPIO_PIN_14 // Tidak digunakan


#define LED_PORT GPIOB


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


ADC_HandleTypeDef hadc1;


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

HAL_ADC_Start(&hadc1);

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

uint16_t adc_val = HAL_ADC_GetValue(&hadc1);


// Asumsikan nilai < 1500 berarti tanah basah

if (adc_val < 1500) {

// Tanah basah - jalankan motor CW

HAL_GPIO_WritePin(LED_PORT, LED_RED_PIN, GPIO_PIN_SET); // Merah nyala

HAL_GPIO_WritePin(LED_PORT, LED_GREEN_PIN, GPIO_PIN_RESET); // Hijau mati


RunStepper(STEP_SEQ_CW, 10);

} else {

// Tanah kering - motor tidak jalan

HAL_GPIO_WritePin(LED_PORT, LED_RED_PIN, GPIO_PIN_RESET); // Merah mati

HAL_GPIO_WritePin(LED_PORT, LED_GREEN_PIN, GPIO_PIN_SET); // Hijau nyala


HAL_Delay(200);

}

}

}

}


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;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

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; // Sesuaikan dengan pin sensor

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) {}

}

 

6. Video Simulasi [kembali]




7. Download file [kembali]
  1. HTML [klik]
  2. Rangkayan [klik]
  3. Vidio Simulasi [klik]









Tidak ada komentar:

Posting Komentar

     BAHAN PRESENTASI     MATA KULIAH ELEKTRONIKA 2022 Oleh Mutia Azzahra 2210953018 DOSEN PENGAMPU DR. DARWISON, M.T. Referensi  1. Darwiso...