Laporan Akhir 2 - Modul 2




Pecobaan 2

1. Prosedur
[Kembali]
1. Siapkan komponen dan alat yang diperlukan seperti LED RGB, Soil Moisture sensor, resistor, Motor Stepper dan respberry pi pico 
2. Rangkai lah komponen seperti pada gambar percobaan di modul
3. jika komponen sudah selesai di rangkai, Inputkan listing program ke dalam software STM 32 dan hubungkan dengan rangkaian
5. Simulasikan Rangkaian

2. Hardware dan Diagram Blok [Kembali]
  • Rasberry Pi Pico
  • LED RGB
  • resistor
  • sensor Soil Moisture
  • Motor

  • Kapasitor

  • ULN2003a

3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

a. Rangkaian



b. Prinsip Kerja
 
  1. Pembacaan Kelembaban Tanah (Soil Moisture) via ADC:

    • Sensor soil moisture menghasilkan sinyal analog sesuai kelembaban tanah.

    • Nilai sinyal ini dibaca melalui kanal ADC (Analog to Digital Converter).

    • Nilai ADC kemudian digunakan untuk menentukan mode kerja motor stepper.

  2. Penentuan Mode Motor Berdasarkan Nilai ADC:

    • Nilai ADC dibagi menjadi tiga rentang:

      • Tanah Lembab → Mode Clockwise (CW) → LED Merah menyala

      • Tanah Normal → Mode Counter-Clockwise (CCW) → LED Hijau menyala

      • Tanah Kering → Mode Oscillate (bolak-balik) → LED Biru menyala

  3. Pengendalian Motor Stepper:

    • Motor stepper dikendalikan melalui urutan pulsa pada pin IN1–IN4.

    • Terdapat dua urutan langkah:

      • STEP_SEQ_CW[] untuk putaran searah jarum jam

      • STEP_SEQ_CCW[] untuk berlawanan arah jarum jam

    • Untuk mode oscillate, motor akan bergantian berputar CW dan CCW.

  4. Indikator LED RGB:

    • LED RGB menyala sesuai mode motor, membantu pengguna memahami kondisi saat ini secara visual.

 
4. Flowchart dan Listing Program [Kembali]

a. Flowchart

b. 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. Kondisi [Kembali]

Percobaan 2 Modul 2

6. Video Simulasi [Kembali]


7. Download File [Kembali]

Simulasi  klik disini
Gambar Simulasi  klik disini
Video Simulasi   klik disini
Listing Program  klik disini


Tidak ada komentar:

Posting Komentar

 BAHAN PRESENTASI UNTUK MATA KULIAH  ELEKTRONIKA Oleh : Salma Salsabila 2210952002    Dosen Pengampu : Darwison, M.T. Darwison, 2010, ”TEORI...