Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 20

Project Report

Problem Based Learning

A. Judul : User Interface pada Panel Kontrol Motor 3 Phasa


menggunakan keypad dan LCD
B. Nama/NRP/Kelas : Sujono/1310161036/2 D4 Elektro Industri B
C. Tanggal Pelakasanaan :
a. Tanggal Penyerahan Tugas : 28 Maret 2018
b. Tanggal Mulai Pengerjaan : 28 Maret 2018
c. Tanggal Selesai : 5 April 2018
d. Tanggal Unggah ke eLearning : 5 April 2018
D. Problem

Untuk mengurangi arus awal yang sangat besar pada motor tiga phasa maka diperlukan
sistem kendali motor tiga phasa menggunakan tiga buah MC untuk starting star-delta, gambar
1 ditunjukkan perangkat yang telah tersedia serta wiring diagram, dan untuk memudahkan
alur kendali diberikan timing diagram seperti ditunjukkan pada gambar 2. Digunakan keypad
untuk mengendalikan sinyal (SG) ke magnetic contactor, serta LCD untk menampilkan status
dari motor saat itu.

Gambar 1 Peralatan yang tersedia


E. Tujuan
 Mengendalikan starting motor tiga phasa dengan konfigurasi star-delta untuk
mengurangi arus saat start.
 Untuk mengendalikan start motor digunakan user interface keypad.
 Untuk mengetahui status dari motor digunakan display LCD.
 Membuat menu user interface dengan mnggunakan keypad dan LCD.
F. Layout

Untuk membangun sistem sesuai yang dikehendaki maka perlu penambahan signal
conditioning SC pada masing-masing perangkat input dan output serta komponen
relay untuk menegndalikan MC. Seperti pada gambar 2.
Gambar 2 Blok diagram fungsi
G. User Requirement
 Awal mula menghidupkan LCD akan muncul tulisan yang memerintahkan
untuk menekan [A] untuk melanjutkan ke menu.
 Setelah menekan [A] maka akan ditampilkan dua opsi yaitu [1]START dan
[2]STOP. Untuk menjalankan motor 3 phase tekan tombol 1 pada keypad.
Status yang muncul pada layar LCD adalah “PROSES”. Tunggulah waktu
minimal 5 detik untuk menunggu perpindahan dari bentuk delta ke star.
 Tombol 2 pada keypad berfungsi untuk menghentikan jalannya motor.
 Jika terjadi kesalahan yang meliputi OH (Over Heat), OC (Over Current) dan
OS (Over Speed) motor akan berhenti dan kesalahan yang dimaksud akan
ditampilkan di layar LCD
H. Tabel Hasil Output
No. Nama Perangkat Label Alamat Keterangan
Port
1. LCD LCD PD0-PD7 Berlogic 1 jika ditekan dan
berlogic 0 jika dilepas
2. Keypad KEYPAD PE8- Berlogic 1 jika dilepas dan
PE15 berlogic 0 jika ditekan
3. MC 1 K1 PE0 Logic 1 lampu akan
menyala dan sebaliknya
4. MC2 K2 PE1 Logic 1 lampu akan
menyala dan sebaliknya
5. MC3 K3 PE2 Logic 1 lampu akan
menyala dan sebaliknya
6. BUZZER BUZZER PB3 Logic 1 lampu akan
menyala dan sebaliknya
7. Sensor Over OH PC7 Logic 1 buzzer akan
Heat menyala dan sebaliknya
8. Sensor Over OC PC8 Logic 1 lampu akan
Current menyala dan sebaliknya
9. Sensor Over OS PC9 Logic 1 lampu akan
Speed menyala dan sebaliknya

Time Chart
A B

I. Flowchart

If(W==2)
START

K1=K2=K3=0 LCD Tertulis


LCD TERTULIS [1]run[2]stop
Kontrol Pompa STATUS: STOP
Tkn [A]utk Mulai K1=0;k2=0;k3=0

Delay 0,1s
If(PB1==1)

W==’ ’
LCD Tertulis
[1]run[2]stop
STATUS: OS
If(W==A) K1=0;k2=0;k3=0

LCD Tertulis
If(PB2==1)
[1]run[2]stop
STATUS:

LCD Tertulis
[1]run[2]stop
If(W==1)
STATUS: OH
K1=0;k2=0;k3=0

LCD Tertulis
[1]run[2]stop
STATUS: Proses If(PB3==1)
K1=1;k2=1;k3=0

Delay 3s LCD Tertulis


[1]run[2]stop
STATUS: OC
LCD Tertulis K1=0;k2=0;k3=0
[1]run[2]stop
STATUS: Run
K1=1;k2=0;k3=1
END

A B
J. Program Source Code

/**

******************************************************************************

* @file : main.c

* @brief : Main program body

******************************************************************************

** This notice applies to any and all portions of this file

* that are not between comment pairs USER CODE BEGIN and

* USER CODE END. Other portions of this file, whether

* inserted by the user or by software development tools

* are owned by their respective copyright owners.

* COPYRIGHT(c) 2018 STMicroelectronics

* Redistribution and use in source and binary forms, with or without modification,

* are permitted provided that the following conditions are met:

* 1. Redistributions of source code must retain the above copyright notice,

* this list of conditions and the following disclaimer.

* 2. Redistributions in binary form must reproduce the above copyright notice,

* this list of conditions and the following disclaimer in the documentation

* and/or other materials provided with the distribution.

* 3. Neither the name of STMicroelectronics nor the names of its contributors

* may be used to endorse or promote products derived from this software

* without specific prior written permission.

* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE

* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL

* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR

* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER

* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,

* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

******************************************************************************

*/

/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "stm32f4xx_hal.h"

/* USER CODE BEGIN Includes */

#include "lcd_character.h"

#include "keypad_4x4.h"

#include "stdio.h"

#include "stdlib.h"

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/


/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

/* USER CODE BEGIN PFP */

/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**

* @brief The application entry point.

* @retval None

*/

int main(void)

/* USER CODE BEGIN 1 */

char w;

int PB1,PB2,PB3;

/* USER CODE END 1 */


/* MCU Configuration----------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */

HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */

SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */

MX_GPIO_Init();

/* USER CODE BEGIN 2 */

lcd_init();

keypad_init();

/* USER CODE END 2 */

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)
{

lcd_gotoxy(0,0);

lcd_puts("Kontrol Pompa ");

lcd_gotoxy(0,1);

lcd_puts("Tkn [A]utk Mulai");

if(w=='A')

lcd_gotoxy(0,0);

lcd_puts("Tkn[1]Run[2]Stop");

lcd_gotoxy(0,1);

lcd_puts("Status : ");

do

w=keypad_get_key_value();

HAL_Delay(100);

}while(w==' ');

if(w=='1')
//PENGGUNA MENEKAN KEYPAD 1

lcd_gotoxy(0,0);

lcd_puts("Tkn[1]Run[2]Stop");

lcd_gotoxy(0,1);

lcd_puts("Status : Proses ");

HAL_GPIO_WritePin(GPIOE,K1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOE,K2_Pin,GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE,K3_Pin,GPIO_PIN_RESET);

HAL_Delay(3000);

lcd_gotoxy(0,0);

lcd_puts("Tkn[1]Run[2]Stop");

lcd_gotoxy(0,1);

lcd_puts("Status : Run ");

HAL_GPIO_WritePin(GPIOE,K1_Pin,GPIO_PIN_SET);

HAL_GPIO_WritePin(GPIOE,K2_Pin,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOE,K3_Pin,GPIO_PIN_SET);

do

w=keypad_get_key_value();

HAL_Delay(100);

}while(w==' ');

if(w=='2')
//PENGGUNA MENEKAN KEYPAD 2

lcd_gotoxy(0,0);

lcd_puts("Tkn[1]Run[2]Stop");

lcd_gotoxy(0,1);

lcd_puts("Status : Stop ");

HAL_GPIO_WritePin(GPIOE,K1_Pin,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOE,K2_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOE,K3_Pin,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB,BUZZER_Pin,GPIO_PIN_RESET);

do

w=keypad_get_key_value();

HAL_Delay(100);

}while(w==' ');

do

PB1=HAL_GPIO_ReadPin(GPIOC,OS_Pin);

}while(PB1==' ');

if(PB1==1)
//TERJADI OVER SPEED

lcd_gotoxy(0,0);

lcd_puts("Sistem Mati ");

lcd_gotoxy(0,1);

lcd_puts("Over Speed ");

HAL_GPIO_WritePin(GPIOE,K1_Pin,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOE,K2_Pin,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOE,K3_Pin,GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOB,BUZZER_Pin,GPIO_PIN_SET);

}
// do

// {

// PB2=HAL_GPIO_ReadPin(GPIOC,OH_Pin);

// }while(PB2==' ');

//

// if(PB2)
//TERJADI OVER SPEED

// {

// lcd_gotoxy(0,0);

// lcd_puts("Sistem Mati ");

// lcd_gotoxy(0,1);

// lcd_puts("Over Heat ");

// HAL_GPIO_WritePin(GPIOE,K1_Pin,GPIO_PIN_RESET);

// HAL_GPIO_WritePin(GPIOE,K2_Pin,GPIO_PIN_RESET);

// HAL_GPIO_WritePin(GPIOE,K3_Pin,GPIO_PIN_RESET);

// HAL_GPIO_WritePin(GPIOB,BUZZER_Pin,GPIO_PIN_SET);

// }

//

//

// do

// {

// PB3=HAL_GPIO_ReadPin(GPIOC,OC_Pin);

// }while(PB3==' ');

//

// if(PB3)
//TERJADI OVER CURRENT
// {

// lcd_gotoxy(0,0);

// lcd_puts("Sistem Mati ");

// lcd_gotoxy(0,1);

// lcd_puts("Over Current ");

// HAL_GPIO_WritePin(GPIOE,K1_Pin,GPIO_PIN_RESET);

// HAL_GPIO_WritePin(GPIOE,K2_Pin,GPIO_PIN_RESET);

// HAL_GPIO_WritePin(GPIOE,K3_Pin,GPIO_PIN_RESET);

// HAL_GPIO_WritePin(GPIOB,BUZZER_Pin,GPIO_PIN_SET);

// }

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

/* USER CODE END 3 */

/**

* @brief System Clock Configuration

* @retval None

*/

void SystemClock_Config(void)

RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;

/**Configure the main internal regulator output voltage

*/

__HAL_RCC_PWR_CLK_ENABLE();

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

/**Initializes the CPU, AHB and APB busses clocks

*/

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;

RCC_OscInitStruct.HSEState = RCC_HSE_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLM = 8;

RCC_OscInitStruct.PLL.PLLN = 336;

RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;

RCC_OscInitStruct.PLL.PLLQ = 7;

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

_Error_Handler(__FILE__, __LINE__);

/**Initializes the CPU, AHB and APB busses clocks

*/

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)

_Error_Handler(__FILE__, __LINE__);

/**Configure the Systick interrupt time

*/

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

/**Configure the Systick

*/

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

/* SysTick_IRQn interrupt configuration */

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

/** Configure pins as

* Analog

* Input

* Output

* EVENT_OUT
* EXTI

*/

static void MX_GPIO_Init(void)

GPIO_InitTypeDef GPIO_InitStruct;

/* GPIO Ports Clock Enable */

__HAL_RCC_GPIOE_CLK_ENABLE();

__HAL_RCC_GPIOH_CLK_ENABLE();

__HAL_RCC_GPIOC_CLK_ENABLE();

__HAL_RCC_GPIOD_CLK_ENABLE();

__HAL_RCC_GPIOB_CLK_ENABLE();

/*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(GPIOE, K3_Pin|KEYPADE12_Pin|KEYPADE13_Pin|KEYPADE14_Pin

|KEYPADE15_Pin|K1_Pin|K2_Pin, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(GPIOD, LCD_Pin|LCDD1_Pin|LCDD2_Pin|LCDD3_Pin

|LCDD4_Pin|LCDD5_Pin|LCDD6_Pin|LCDD7_Pin, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */

HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);

/*Configure GPIO pins : K3_Pin KEYPADE12_Pin KEYPADE13_Pin KEYPADE14_Pin

KEYPADE15_Pin K1_Pin K2_Pin */


GPIO_InitStruct.Pin = K3_Pin|KEYPADE12_Pin|KEYPADE13_Pin|KEYPADE14_Pin

|KEYPADE15_Pin|K1_Pin|K2_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

/*Configure GPIO pins : KEYPAD_Pin KEYPADE9_Pin KEYPADE10_Pin KEYPADE11_Pin */

GPIO_InitStruct.Pin = KEYPAD_Pin|KEYPADE9_Pin|KEYPADE10_Pin|KEYPADE11_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_PULLUP;

HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

/*Configure GPIO pins : OS_Pin OH_Pin OC_Pin */

GPIO_InitStruct.Pin = OS_Pin|OH_Pin|OC_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_PULLDOWN;

HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

/*Configure GPIO pins : LCD_Pin LCDD1_Pin LCDD2_Pin LCDD3_Pin

LCDD4_Pin LCDD5_Pin LCDD6_Pin LCDD7_Pin */

GPIO_InitStruct.Pin = LCD_Pin|LCDD1_Pin|LCDD2_Pin|LCDD3_Pin

|LCDD4_Pin|LCDD5_Pin|LCDD6_Pin|LCDD7_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pin : BUZZER_Pin */

GPIO_InitStruct.Pin = BUZZER_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Pull = GPIO_NOPULL;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

HAL_GPIO_Init(BUZZER_GPIO_Port, &GPIO_InitStruct);

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**

* @brief This function is executed in case of error occurrence.

* @param file: The file name as string.

* @param line: The line in file as a number.

* @retval None

*/

void _Error_Handler(char *file, int line)

/* USER CODE BEGIN Error_Handler_Debug */

/* User can add his own implementation to report the HAL error return state */

while(1)

}
/* USER CODE END Error_Handler_Debug */

#ifdef USE_FULL_ASSERT

/**

* @brief Reports the name of the source file and the source line number

* where the assert_param error has occurred.

* @param file: pointer to the source file name

* @param line: assert_param error line source number

* @retval None

*/

void assert_failed(uint8_t* file, uint32_t line)

/* USER CODE BEGIN 6 */

/* User can add his own implementation to report the file name and line number,

tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* USER CODE END 6 */

#endif /* USE_FULL_ASSERT */

/**

* @}

*/

/**

* @}

*/

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


K. Fungsional Test dan Hasil

Link Video Youtube

https://youtu.be/zl3wrz9tDW8

L. Kelemahan dan Kelebihan


a. Kelemahan
i. Masih tidak dapat menghitung berapa kali dia mati ataupun berapa kali
error
ii. Sehingga tidak dapat mengerti seberapa baik motor yang akan
digunakan
iii. Masih belum bisa dikendalikan dari smartphone
b. Keunggulan
i. Sudah dapat menggunakan pengontrolan melalui LCD dan keypad.
ii. Lebih praktis karena dikendalikan dari satu tempat.
iii. Sudah dapat memberi tahu pengguna apabila terjadi kesalahan dengan
menggunakan buzzer
iv. Dapat menghentikan motor apabila terjadi kesalahan yakni over speed,
over heat dan over current
M. Inovasi Pengembangan berdasarkan Kelemahan yang diperoleh
Inovasi yang dapat ditawarkan dari kelemahan yang didapatkan adalah dengan
menambahkan aplikasi yang dapat diunduh ke dalam smartphone pengguna. Nantinya
mikrontroler akan mengirimkan data melalui bluetooth kepada smartphone pengguna.
Dan juga harapannya aplikasi ini dapat memberitahukan kondisi dari motor yang
digunakan apakah masih layak dioperasikan atau tidak.
N. Kesimpulan
Pada saat starting motor terjadi arus yang sangat tinggi untuk mengurangi
arus yang terlalu tinggi ini dilakukan dengan cara menggunakan ranngkaian star delta.
Pengontrolan star delta ini dapat dilakukan dengan menggunakan mikrokontroler.
Program ini masih memiliki kelemahan yang bisa dikembangkan inovasinya dapat
mempermudah pengguna. Inovasi yang ditawarkan adalah menggunakan smartphone,
dimana pengontrolan dapat dilakukan di dalam smartphone yang kita pakai sehari-
hari.

You might also like