Laporan Praktikum 1 M2




Percobaan 2
Led RGB, Motor Stepper, & Soil Moisture

1. Prosedur
[Kembali]

1. Rangkai semua komponen pada breadboard yang terhubung ke mikrokontroler STM32F103C8.
2. Buat program untuk mikrokontroler STM32F103C8 di software STM32 CubeIDE.
3. Build program yang telah dibuat, lalu inputkan program ke dalam mikrokontroler melalui stlink.
4. Setelah program diinputkan, uji rangkaian yang telah dirangkai sesuai dengan output yang ditentukan.
5. Selesai.

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Mikrokontroler STM32F103C8
STM32F103C8 board – Microscale

2. Sensor Soil Moisture

3. Stepper Driver ULN2003

 
4. Motor Stepper

 
5. Breadboard
BREADBOARD / PROJECTBOARD / PROTOBOARD 400 HOLES di M-kontrol | Tokopedia
 
6. RGB LED
Jual LED RGB 4 PIN WARNA MERAH HIJAU BIRU 5mm ( ARDUINO ) - Common Cathode  - Jakarta Barat - Ardushop-id | Tokopedia
 
7. Resistor

8. Jumper 


Diagram Blok  :


3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi:


Prinsip Kerja : 
Rangkaian ini menggunakan mikrokontroler STM32F103C8, yang terdiri dari input yaitu sensor soil moisture, dengan 2 output yaitu RGB LED dan Motor Stepper. Sensor soil moisture sebagai input dihubungkan ke pin PA0-WKUP, untuk outputnya yaitu motor stepper yang mana masing-masing pin PB8, PB9, PB10, PB11 pada mikrokontroler STM32F103C8 dihubungkan ke modul Stepper Driver ULN2003 yang kemudian outputnya dihubungkan ke motor stepper. Untuk RGB LED, masing-masing kakinya dihubungkan terlebih dahulu ke resistor, dimana kaki red terhubung ke pin PB12, kaki green terhubung ke pin PB13, dan kaki blue terhubung ke pin PB14.
Setelah itu lakukan konfigurasi di software STM32 CubeIDE. Maka pada tampilan pin out dan konfigurasi dari mikrokontrolernya, berdasarkan rangkaian yang telah dibuat, inputannya yaitu Sensor soil moisture terhubung ke pin PA0-WKUP. Pin PB8, PB9, PB10, PB11 sebagai pin konfigurasi motor stepper. Kemudian outputnya yaitu kaki red terhubung ke pin PB12, kaki green terhubung ke pin PB13, kaki blue terhubung ke pin PB14. Selanjutnya dilakukan konfigurasi pada debug dengan memilih serial wire, kemudian pada bagian RCC dipilih crystal / ceramic resonator.
Ketika konfigurasinya telah selesai, save project dan kemudian akan ditampilkan halaman pemrograman. Disini sudah langsung tersedia beberapa program karena konfigurasi yang telah dilakukan sebelumnya. Untuk pemrogramannya dimulai dari #include “main.h” yang merupakan fungsi utamanya. Yang perlu ditambahkan disini adalah codingan pada bagian loopnya, yang terletak di dalam kurung kurawal pada bagian while.
Setelah programnya selesai, dilanjutkan dengan build program tersebut dan diinputkan ke mikrokontroler melalui stlink. Setelah programnya diinputkan, dapat dilakukan uji coba pada rangkaiannya, yang mana ketika dijalankan, apabila sensor soil moisture mendeteksi tanah basah, outputnya yaitu LED RGB berwarna merah dan motor steppernya akan berputar clockwise. Kemudian apabila sensor soil moisture mendeteksi tanah kering, outputnya yaitu LED RGB berwarna biru dan motor steppernya akan berputar oscillate. Serta ketika sensor soil moisture mendeteksi tanah normal, outputnya yaitu LED RGB berwarna hijau dan motor steppernya akan berputar counter clockwise.

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_PORT GPIOB
#define LED_RED_PIN GPIO_PIN_12
#define LED_GREEN_PIN GPIO_PIN_13
#define LED_BLUE_PIN GPIO_PIN_14

// ======================== Mode Stepper Motor ========================
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

// ======================== Variabel Global ========================
ADC_HandleTypeDef hadc1;
uint8_t current_mode = 0; // 0 = CW, 1 = CCW, 2 = Oscillate
uint8_t direction = 0; // Untuk mode Oscillate

// ======================== Deklarasi 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);

// ======================== Fungsi Utama ========================
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();

while (1) {
// Baca potensiometer
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
uint16_t adc_val = HAL_ADC_GetValue(&hadc1);

// Tentukan mode berdasarkan nilai ADC
if (adc_val < 1365) {
current_mode = 0; // CW
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; // CCW
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; // Oscillate
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 berdasarkan nilai current_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 & 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 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 ========================
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();

// 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 Motor
GPIO_InitStruct.Pin = IN1_PIN | IN2_PIN | IN3_PIN | IN4_PIN;
HAL_GPIO_Init(STEPPER_PORT, &GPIO_InitStruct);
}

// ======================== Inisialisasi ADC ========================
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();
}
}

// ======================== Error Handler ========================
void Error_Handler(void) {
while (1) {}
}


5. Video Demo [Kembali]


6. Analisa [Kembali]


7. Download File [Kembali]

Download HTML [Download]
Download Video Demo [Download]
Datasheet Mikrokontroler STM32F103C8 [Download]
Datasheet Sensor Soil Moisture [Download]
Datasheet RGB LED [Download]
Datasheet Motor Stepper [Download]
Download Datasheet Resistor [Download]
 

Tidak ada komentar:

Posting Komentar

  BAHAN PRESENTASI UNTUK MATA KULIAH  MIKROPROSESOR DAN MIKROKONTROLER 2024     Nama : Salahuddin Al Ajubi NIM : 2210951006 Dosen...