LA M2 - Percobaan 2

[menuju akhir]

1. Prosedur [kembali]

1.siapkan soil mositure, resistor, RGB led, motor stepper

2.pilih STM32

3.buat rangkaian seperti percobaan 2 pada modul


2. Hardware dan Diagram Blok [kembali]

  • STM32


STM32 merupakan keluarga mikrokontroler berbasis ARM Cortex-M yang dikembangkan oleh STMicroelectronics. Mikrokontroler ini dirancang untuk aplikasi embedded system dengan berbagai fitur unggulan, termasuk efisiensi daya, performa tinggi, serta dukungan periferal yang luas.

Keunggulan STM32:

  • Arsitektur ARM Cortex-M yang mendukung berbagai tingkatan performa, mulai dari Cortex-M0 untuk aplikasi hemat daya hingga Cortex-M7 untuk komputasi berkecepatan tinggi.

  • Beragam varian dan konfigurasi, memungkinkan fleksibilitas dalam pemilihan sesuai dengan kebutuhan sistem.

  • Dukungan periferal yang luas, seperti ADC, PWM, UART, SPI, I2C, USB, dan Ethernet, yang memudahkan komunikasi dengan berbagai perangkat eksternal.

  • Penggunaan Hardware Abstraction Layer (HAL) yang menyederhanakan proses pemrograman dan meningkatkan kompatibilitas antar perangkat.

  • Kompatibilitas dengan berbagai lingkungan pengembangan, seperti STM32CubeIDE, Keil, IAR Embedded Workbench, dan Arduino (STM32duino).

Aplikasi STM32:
Mikrokontroler STM32 banyak digunakan dalam berbagai bidang, antara lain:

  • Sistem kendali motor (BLDC, servo, dan stepper)

  • Otomasi industri dan robotika

  • Sistem Internet of Things (IoT)

  • Pengolahan sinyal digital (DSP)

  • Elektronika medis dan perangkat pintar



  • RGB Led

RGB LED (Red, Green, Blue LED) adalah jenis LED yang terdiri dari tiga warna dasar—merah, hijau, dan biru—yang dapat dikombinasikan untuk menghasilkan berbagai warna cahaya. Dengan mengatur intensitas masing-masing warna, RGB LED dapat menampilkan spektrum warna yang luas.

RGB LED umumnya dikendalikan menggunakan mikrokontroler atau rangkaian elektronik dengan teknik PWM (Pulse Width Modulation) untuk mengatur kecerahan setiap warna. Ada dua jenis utama RGB LED:

  • Common Anode – Katoda (negatif) masing-masing warna terpisah, sementara anoda (positif) terhubung bersama.

  • Common Cathode – Anoda (positif) masing-masing warna terpisah, sementara katoda (negatif) terhubung bersama.



  • RESISTOR

Resistor adalah komponen untuk menghambat arus listrik. Pada rangkaian, resistor digunakan untuk menjaga RGB led tetap berada pada tegangan kerjanya.



  • SOIL MOISTURE

Sensor soil moisture resistif adalah sensor yang digunakan untuk mengukur kelembaban tanah dengan mendeteksi nilai resistansi antara dua probe logam yang ditanam dalam tanah.

Cara kerja sensor ini:

  • Ketika tanah basah, air yang mengandung ion membuat tanah lebih konduktif sehingga resistansi antara dua probe menjadi rendah

  • Ketika tanah kering, resistansi meningkat karena kurangnya air sebagai penghantar listrik

Sensor ini biasanya memiliki tiga pin:

  1. VCC (tegangan masukan, misalnya 3.3V atau 5V)

  2. GND (ground)

  3. OUT (output analog yang dibaca oleh pin ADC pada mikrokontroler)


  • MOTOR STEPPER DAN DRIVER



Motor stepper adalah motor listrik yang bergerak dalam langkah-langkah kecil tetap setiap kali menerima pulsa sinyal. Motor ini sangat cocok untuk aplikasi yang membutuhkan kontrol posisi dan kecepatan yang presisi, seperti printer 3D, CNC, atau robotik. Motor stepper bekerja berdasarkan prinsip elektromagnetik dengan beberapa kumparan (coil) di dalamnya. Saat arus dialirkan ke kumparan secara bergantian, rotor di dalam motor akan berputar langkah demi langkah.

Motor stepper memerlukan driver karena motor ini tidak bisa langsung dikendalikan oleh mikrokontroler atau sumber daya biasa. Berikut fungsi utama driver pada motor stepper:

  1. Mengatur arus dan tegangan
    Driver bertugas mengatur arus dan tegangan yang masuk ke motor sesuai kebutuhan. Mikrokontroler seperti Arduino atau ESP32 tidak mampu menyediakan arus sebesar yang dibutuhkan motor stepper secara langsung.

  2. Mengatur urutan pulsa
    Motor stepper bergerak berdasarkan pulsa-pulsa listrik yang diberikan ke lilitannya dalam urutan tertentu. Driver menerjemahkan sinyal dari mikrokontroler menjadi urutan sinyal yang tepat untuk menggerakkan motor secara akurat dan konsisten.

  3. Mengontrol kecepatan dan arah
    Dengan mengatur frekuensi dan arah pulsa, driver memungkinkan pengendalian kecepatan rotasi dan arah putaran motor.

  4. Memberikan mode operasi tambahan
    Beberapa driver mendukung microstepping, yaitu kemampuan memutar motor dalam langkah-langkah kecil, sehingga menghasilkan gerakan yang lebih halus dan presisi.



3. Rangkaian Simulasi dan Prinsip Kerja [kembali]


Pada rangkaian ini menggunakan STM32 sebagai mikrokontroller dengan inputnya adalah data analog dari sensor soil moisture. Soil moisture dihubungkan ke pin ADC pada STM32. Data analog dari soil moisture dibaca, lalu dikonversi menjadi data digital untuk mengatur led RGB dan putaran motor stepper. Ketika soil moisture mendeteksi pada tanah normal, maka led RGB bewarna hijau dan motor stepper berlawanan jarum jam. Ketika tanah basah, maka led bewarna merah dan stepper bergerak searah jarum jam. Ketika tanah kering, maka led bewarna biru dan stepper bergerak bolak-balik.





  • 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}; // CounterClockwise

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 Percobaan [kembali]






7. Download file [kembali]

  • Datasheet STM32 klik





[menuju awal]









Tidak ada komentar:

Posting Komentar

    BAHAN PRESENTASI UNTUK MATA KULIAH  ELEKTRONIKA 2022 Nama: Adnan Fauzan    NIM: 2210953001 Elektronika B Dosen Pengampu ; Darwison,M.T R...