LA Percobaan 8








1. Prosedur [Kembali]
  • Rangkai semua komponen pada board sesuai dengan percobaan pada modul 
  • Buat program untuk STM32 di STM32CubeIDE, sesuaikan konfigurasinya dengan rangkaian pada board dan kondisi yang dipakai
  • Sambungkan laptop yang sudah menjalankan Program ke rangkaian yang sudah dibuat
  • Jalankan hasilnya

2. Hardware dan Diagram Blok[Kembali]

1. STM32F103C8


2. LED

3. Resistor



4. Motor Stepper


5. ULN2003A


3. Rangkaian Simulasi dan Prinsip Kerja[Kembali]

Rangkaian Simulasi:


Prinsip Kerja:
  1. Input dari Potensiometer (Analog ke ADC)

    • Potensiometer digunakan untuk menghasilkan tegangan variabel (0–3.3V).

    • Tegangan ini dibaca oleh pin ADC di Raspberry Pi Pico (misalnya ADC0).

    • Nilai ADC tersebut dikonversi menjadi data digital 0–65535 atau 0–1023 tergantung pustaka yang digunakan.

  2. Kontrol Servo Motor

    • Raspberry Pi Pico menghasilkan sinyal PWM (Pulse Width Modulation) pada salah satu GPIO untuk mengatur sudut servo motor (0°–180°).

    • Nilai PWM ini biasanya merupakan hasil konversi dari input potensiometer.

    • Misalnya, semakin besar nilai potensiometer → semakin besar sudut servo.

  3. Output ke Buzzer (Opsional atau Tambahan)

    • Buzzer mungkin digunakan untuk:

      • Memberi peringatan ketika sudut servo mencapai batas tertentu.

      • Memberi bunyi saat potensiometer diputar cepat.

    • Pico akan mengaktifkan buzzer melalui digital output (misal: GPIO High untuk menyuplai 3.3V ke buzzer).


Kesimpulan

Rangkaian ini menunjukkan penerapan sederhana dari sistem kontrol berbasis mikrokontroler, di mana input analog (potensiometer) digunakan untuk mengatur posisi servo motor, dan buzzer digunakan sebagai sinyal peringatan tambahan. Rangkaian ini cocok untuk belajar topik seperti:

  • ADC (Analog to Digital Converter),

  • PWM (Pulse Width Modulation),

  • Kontrol servo,

  • Penggunaan input-output digital.

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
#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}; // Counter
Clockwise
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]
Buatlah rangkaian seperti gambar pada percobaan 2, buatlah ketika soil moisture sensor mendeteksi kelembapan tanah basah, LED RGB menampilkan warna Biru

6. Video Simulasi[Kembali]







7. Download File[Kembali]

Rangkaian [download]
Video simulasi [download]
Datasheet Raspberry Pi Pico [Download]
Datasheet Resistor [Download]
Datasheet LED [Download]

Komentar

Postingan populer dari blog ini

Tugas Besar (Parkir Otomatis)