Laporan akhir M2 = 1 (percobaan 8)






1. Prosedur [kembali]
  1. Pertama pelajari lah modul yang sesuai dengan percobaan kita yaitu modul 2 percobaan 8
  2. stelah itu coba pastikan semua keperluan sudah lengkap seperti alat dan bahan yang digunakan ataupun aplikasi yang akan kita gunakan nantik seperti pada percobaan 8 ini menggunakan stm32ide
  3. selanjutnya bagi lah anggota klompok itu untuk sebagian mengerjakan rangkaian dan sebagian mengerjakan programnya
  4. rangkailah dan buatklah programnya sesuai dengan modul pada percobaan yang kita lakukan
  5. setelah dirasa sudah benar dan program berjalan dengan baik
  6. lalu sambungkanlah rangkaian tadi dengan program yang telah dibuat
  7. lalu pastikan dulu semua sudah benar2 tersambung dengan baik
  8. jika sudah berhasil terhubung 
  9. cobalah jalankan rangkaian dan jika rangkaian berfungsi sesuai dengan pada modul dan percobaan berarti percobaan kita sudah berhasil dilakukan
2. Hardware dan Diagram Blok [kembali]
  • Touch Sensor Module (TOUCH1)

  • Potensiometer (RV2)

  • Mikrokontroler STM32F103C8T6 (U1)

  • Driver Motor ULN2003A (U2)

  • Motor Stepper

  • Diagram blok


3. Rangkaian Simulasi dan Prinsip Kerja [kembali]
  • Rangkaian simulasi
  • Prinsip Kerja

Rangkaian ini bekerja dengan menggunakan sensor sentuh sebagai input utama. Ketika sensor disentuh, sensor akan mengeluarkan sinyal logika tinggi (HIGH) dari pin output-nya. Sinyal ini kemudian diteruskan ke mikrokontroler STM32 (U1) melalui salah satu pin input digital. Setelah mikrokontroler menerima sinyal dari sensor sentuh, ia akan memproses sinyal tersebut sesuai dengan program yang telah ditanamkan di dalamnya. Jika kondisi terpenuhi, mikrokontroler akan mengirimkan sinyal kontrol ke IC ULN2003A (U2), yang berfungsi sebagai driver untuk motor. ULN2003A ini akan mengatur arus yang masuk ke motor stepper, sehingga motor dapat bergerak sesuai instruksi. Dengan kata lain, sentuhan pada sensor akan menyebabkan motor stepper aktif dan berputar sesuai logika kontrol yang telah ditentukan di dalam mikrokontroler. Tegangan 3.3V digunakan untuk mensuplai daya ke seluruh rangkaian, termasuk sensor sentuh, mikrokontroler, dan ULN2003A. Di samping itu, terdapat juga potensiometer yang kemungkinan digunakan untuk pengaturan tegangan referensi atau input tambahan ke mikrokontroler, tergantung dari fungsi yang diinginkan


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 TOUCH_SENSOR_PORT GPIOB
#define TOUCH_SENSOR_PIN GPIO_PIN_0
#define MOTOR_DC_PORT GPIOB
#define MOTOR_DC_PIN GPIO_PIN_7
// Mode Stepper
const uint8_t STEP_SEQ_CW[4] = {
 (1<<0), // IN1
 (1<<1), // IN2
 (1<<2), // IN3
 (1<<3) // IN4
};
const uint8_t STEP_SEQ_CCW[4] = {
 (1<<3), // IN4
 (1<<2), // IN3
 (1<<1), // IN2
 (1<<0) // IN1
};
ADC_HandleTypeDef hadc1;
uint8_t current_mode = 0; // 0=CW, 1=CCW
volatile uint8_t touch_state = 0;
void SystemClock_Config(void);
void MX_GPIO_Init(void);
void MX_ADC1_Init(void);
void RunStepper(const uint8_t *sequence, uint8_t speed);
void Error_Handler(void);
int main(void) {
 HAL_Init();
 SystemClock_Config();
 MX_GPIO_Init();
 MX_ADC1_Init();
 while (1) {
 // Saat tidak disentuh, jalankan stepper seperti biasa
 if (HAL_GPIO_ReadPin(TOUCH_SENSOR_PORT, TOUCH_SENSOR_PIN) == 
GPIO_PIN_RESET) {
HAL_ADC_Start(&hadc1);
 if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
 uint16_t adc_val = HAL_ADC_GetValue(&hadc1);
 current_mode = (adc_val < 2048) ? 0 : 1; // 0 = CW, 1 = CCW
 }
 if (current_mode == 0) {
 RunStepper(STEP_SEQ_CW, 5);
 } else {
 RunStepper(STEP_SEQ_CCW, 5);
 }
 }
 HAL_Delay(1);
 }
}
void RunStepper(const uint8_t *sequence, uint8_t speed) {
 static uint8_t step = 0;
 HAL_GPIO_WritePin(STEPPER_PORT, IN1_PIN, (sequence[step] & (1<<0)) ? 
GPIO_PIN_SET : GPIO_PIN_RESET);
 HAL_GPIO_WritePin(STEPPER_PORT, IN2_PIN, (sequence[step] & (1<<1)) ? 
GPIO_PIN_SET : GPIO_PIN_RESET);
 HAL_GPIO_WritePin(STEPPER_PORT, IN3_PIN, (sequence[step] & (1<<2)) ? 
GPIO_PIN_SET : GPIO_PIN_RESET);
 HAL_GPIO_WritePin(STEPPER_PORT, IN4_PIN, (sequence[step] & (1<<3)) ? 
GPIO_PIN_SET : GPIO_PIN_RESET);
 step = (step + 1) % 4;
 HAL_Delay(speed);
}
void MX_GPIO_Init(void) {
 GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOB_CLK_ENABLE();
 __HAL_AFIO_REMAP_SWJ_NOJTAG(); // Optional: disable JTAG to free PB3-PB4 if 
needed
 // Konfigurasi Touch Sensor sebagai input dengan EXTI (interrupt)
 GPIO_InitStruct.Pin = TOUCH_SENSOR_PIN;
 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 HAL_GPIO_Init(TOUCH_SENSOR_PORT, &GPIO_InitStruct);
 // Aktifkan NVIC untuk EXTI0
 HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
 HAL_NVIC_EnableIRQ(EXTI0_IRQn);
 // Konfigurasi Motor DC (PB7)
 GPIO_InitStruct.Pin = MOTOR_DC_PIN;
 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 HAL_GPIO_Init(MOTOR_DC_PORT, &GPIO_InitStruct);
 // Konfigurasi Stepper Motor (PB8-PB11)
 GPIO_InitStruct.Pin = IN1_PIN | IN2_PIN | IN3_PIN | IN4_PIN;
 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 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 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 HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
 if (GPIO_Pin == TOUCH_SENSOR_PIN) {
 GPIO_PinState pinState = HAL_GPIO_ReadPin(TOUCH_SENSOR_PORT, 
TOUCH_SENSOR_PIN);
 if (pinState == GPIO_PIN_SET) {
 // Touch sensor ditekan - nyalakan motor DC, matikan stepper
 HAL_GPIO_WritePin(MOTOR_DC_PORT, MOTOR_DC_PIN, GPIO_PIN_SET);
 HAL_GPIO_WritePin(STEPPER_PORT, IN1_PIN|IN2_PIN|IN3_PIN|IN4_PIN, 
GPIO_PIN_RESET);
 } else {
 // Touch sensor dilepas - matikan motor DC
 HAL_GPIO_WritePin(MOTOR_DC_PORT, MOTOR_DC_PIN, 
GPIO_PIN_RESET);
 }
 }
}
// IRQ Handler untuk EXTI0
void EXTI0_IRQHandler(void) {
 HAL_GPIO_EXTI_IRQHandler(TOUCH_SENSOR_PIN);
}
void Error_Handler(void) {
 while(1) {}
}

 

5. Vidio Demo [kembali]

  • Vidio saat melakukan percobaan


6. Analisa [kembali]
7. Video Simulasi [kembali]
(sama dengan vidio demo)


8. Download file [kembali]
  1. Vidio Rangkaian [disni]
  2. Listing Program [disini]
  3. Gambar Rangkaian [disini]
  4. Analisa [disini]

Komentar

Postingan populer dari blog ini

MODUL 1 MIKRO

TUGAS BESAR "KONTROL BANJIR OTOMATIS"

MODUL 2 SISDIG