BAHAN PRESENSTASI UNTUK MATA KULIAH ELEKTRONIKA 2022




Oleh :

Adib Naufal Sayyid

2210953002 


Dosen Pengampu :

Darwison, M.T.

Rizki Wahyu Pratama, M.T


Referensi:

a. Darwison, 2010, ” Teori, Simulasi, dan Aplikasi Elektronika ” ”, Jilid 1, ISBN: 978-602-9081-10-7, CV Ferila, Padang. 
b. Darwison, 2010, ” Teori, Simulasi, dan Aplikasi Elektronika ””,Jilid 2,  ISBN: 978-602-9081-10-8, CV Ferila, Padang.
c. Robert L. Boylestad and Louis Nashelsky, Electronic Devices and Circuit Theory, Pearson, 2013 
d. Jimmie J. Cathey, Theory and Problems of Electronic Device and Circuit, McGraw Hill, 2002.
e. Keith Brindley, Starting Electronics, Newness 3rd Edition, 2005.
f. Ian R. Sinclair and John Dunton, Practical Electronics Handbook, Newness, 2007.
g. John M. Hughes, Practical Electronics: Components and Techniques, O’Reilly Media, 2016.
 


Jurusan Teknik Elektro
Fakultas Teknik
Padang 2022

LA modul 2 percobaan 2






1. Prosedur [kembali]
  • Siapkan alat dan bahan
  • Rangkai alat dan bahan sesuai dengan gambar pada modul
  • Hubungkan hardware pada software
  • Inputkan listing program
  • Uji Coba hasilnya


2. Hardware dan Diagram Blok [kembali]

  • STM32F103C8


  • RGB LED

  • Motor 


  • RESISTOR

  • Soil Moisture Sensor


3. Rangkaian Simulasi dan Prinsip Kerja [kembali]


prinsip kerja :

Rangkaian ini dirancang untuk memantau kelembaban tanah dan memberikan respon otomatis melalui indikator visual serta aktuator mekanis. Proses dimulai dari sensor soil moisture yang berfungsi mendeteksi tingkat kelembaban tanah dan menghasilkan sinyal output analog. Sinyal ini kemudian diterima oleh mikrokontroler ATmega16 melalui pin ADC (Analog to Digital Converter), di mana nilainya dianalisis oleh program untuk menentukan kondisi tanah.

Berdasarkan hasil pembacaan kelembaban, mikrokontroler mengontrol LED RGB sebagai indikator visual. Warna merah menyala saat tanah sangat kering, hijau menandakan kondisi lembab yang ideal, dan biru (jika digunakan) mengindikasikan tanah terlalu basah. LED RGB ini dihubungkan ke tiga pin output digital pada mikrokontroler, masing-masing melalui resistor pembatas untuk mengatur arus.

Jika tanah terdeteksi dalam kondisi kering di bawah ambang batas yang ditentukan, mikrokontroler akan mengaktifkan motor stepper sebagai tindakan otomatis. Motor ini dapat difungsikan untuk membuka katup air, mengoperasikan sistem penyiram, atau mekanisme lain yang bertujuan menyiram tanaman. Untuk mengendalikan motor stepper, digunakan driver seperti ULN2003 yang menerima sinyal kontrol langsung dari pin mikrokontroler, memastikan gerakan motor presisi dan sesuai dengan kebutuhan sistem.


4. Flowchart dan Listing Program [kembali]


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. Video Demo [kembali]


6. Kondisi [kembali]

Percobaan 2 : Led RGB, Motor Stepper, & Soil Moisture

7. Video Simulasi [kembali]



8. Download file [kembali]
Download Video Disini
Download Video Disini

Komentar

Postingan populer dari blog ini