TP Prak mikro modul 2

  

PERCOBAAN 2 KONDISI 5



PERCOBAAN 2 KONDISI 6

1. Prosedur[Kembali]

1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk IC STM32 di software STM32IDE.
3. Compile program tadi, lalu upload file dengan format .hex ke dalam development board STM32.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.

2. Hardware dan Diagram Blok[Kembali]

a. Hardware
1. STM32F103C8
Fungsi utama STM32 adalah sebagai pengontrol sistem, mampu melakukan pemrosesan data dan menjalankan instruksi untuk berbagai aplikasi, mulai dari perangkat sederhana hingga sistem yang kompleks. 

2. Potensiometer

Potensiometer adalah resistor tiga terminal dengan sambungan geser yang membentuk pembagi tegangan dapat disetel.


3. Motor DC

Fungsi utama motor DC (direct current) adalah mengubah energi listrik menjadi energi mekanik. Motor DC digunakan dalam berbagai aplikasi, mulai dari perangkat elektronik kecil hingga mesin industri yang besar. 

4. Motor Stepper

Motor stepper memiliki fungsi utama untuk mengubah pulsa listrik menjadi gerakan mekanis yang presisi, yaitu gerakan diskrit atau langkah-langkah. Gerakan ini memungkinkan kontrol posisi dan kecepatan yang akurat tanpa sensor umpan balik.

5. ULN2003A
ULN2003 adalah IC driver yang berfungsi untuk mengendalikan beban induktif seperti motor stepper, solenoid, dan relai dari mikrokontroler atau rangkaian logika lainnya. IC ini dapat digunakan untuk menggerakkan perangkat berarus tinggi atau bertegangan tinggi yang tidak dapat ditoleransi oleh mikrokontroler. 

6. Touch Sensor
Fungsi utama sensor sentuh (touch sensor) adalah untuk mendeteksi sentuhan atau tekanan pada sebuah permukaan dan merespons dengan sinyal listrik atau tindakan tertentu.

b. Diagram Blok



3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]




Gambar rangkaian percobaan 2 kondisi 5 
Prinsip Kerja:
Sensor kelembaban tanah mendeteksi kondisi tanah (basah atau kering). Jika tanah basah, sensor mengeluarkan sinyal rendah (LOW) ke mikrokontroler. Mikrokontroler membaca sinyal ini dan Menampilkan status kelembaban lewat LED RGB (kemungkinan untuk indikator visual). Mengaktifkan motor stepper dan mengatur agar berputar berlawanan arah jarum jam (counter clockwise)Driver ULN2003A digunakan sebagai penguat arus untuk mengendalikan motor stepper dengan aman. Motor stepper hanya berputar saat kondisi tanah terdeteksi basah, sesuai teks “kelembapan tanah basah, Motor Stepper berputar secara Counter Clockwise”.

4. Flowchart dan Listing Program[Kembali]
a. Flowchart



b. Listing Program


#include "stm32f1xx_hal.h"

#include "stm32f1xx_hal_rcc.h"


// Konfigurasi Pin Stepper

#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


// Konfigurasi LED RGB

#define LED_PORT GPIOB

#define LED_RED_PIN GPIO_PIN_12

#define LED_GREEN_PIN GPIO_PIN_13

#define LED_BLUE_PIN GPIO_PIN_14


// Urutan langkah stepper

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

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


ADC_HandleTypeDef hadc1;


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

uint8_t direction = 0; // Untuk Oscillate mode


// Prototipe fungsi

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 nilai ADC (potensiometer)

HAL_ADC_Start(&hadc1);

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

{

uint16_t adc_val = HAL_ADC_GetValue(&hadc1);


// Tentukan mode berdasarkan ADC

if (adc_val < 1365) {

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

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 {

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 stepper sesuai mode

switch (current_mode)

{

case 0: // CW

RunStepper(STEP_SEQ_CCW, 10);

break;


case 1: // CCW

RunStepper(STEP_SEQ_CW, 10);

break;


case 2: // Oscillate

if (direction == 0)

{

RunStepper(STEP_SEQ_CW, 5);

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

direction = 1;

}

else

{

RunStepper(STEP_SEQ_CCW, 5);

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

direction = 0;

}

break;

}

}

}


// Fungsi untuk menjalankan stepper

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

}


// Konfigurasi clock default (HSI)

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

}

}


// Inisialisasi GPIO

void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};


__HAL_RCC_GPIOB_CLK_ENABLE(); // Aktifkan clock GPIOB


// LED pin output

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


// Stepper pin output

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

HAL_GPIO_Init(STEPPER_PORT, &GPIO_InitStruct);

}


// Inisialisasi ADC1 untuk potensiometer

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


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

{

Error_Handler();

}

}


// Error Handler

void Error_Handler(void)

{

while (1) {}

}

5. Kondisi[Kembali]
P2K5 : Buatlah rangkaian seperti gambar pada percobaan 2, buatlah ketika soil moisture sensor mendeteksi kelembapan tanah basah, Motor Stepper berputar secara Counter Clockwise

6. Video Simulasi[Kembali]





7. Download File[Kembali]

Rangkaian [download]
Video simulasi [download]








Tidak ada komentar:

Posting Komentar

   Bahan Presentasi Mata kuliah Elektronika TA Semester Genap 2023 Dosen Pengampu : Darwison, M.T. Oleh : Ahmad Bukhari 2210952018 A. Darwis...