Informe Encoder

download Informe Encoder

of 10

description

Encoder

Transcript of Informe Encoder

DEPARTAMENTO DE ELCTRICA Y ELECTRNICA

CARRERA DE INGENIERIA ELECTRNICA EN AUTOMATIZACIN Y CONTROLInstrumentacin y Sensores

PRCTICAENCODER

Nombre:Mara BelnCarchi Cristian Vasco

Fecha: 03/07/2015

OBJETIVOS Mediante el uso de un encoder reconocer la velocidad de giro de un motor, la cual podr ser controlada por medio de un Arduino, en el cual se ingresara un dato por un teclado matricial y la lectura ser mostrado por un LCD de 16X2. Verificar el mximo de velocidad que puede ser generada en el motor a utilizar. Establecer condiciones de validacin mediante la programacin del Arduino para mejorar el funcionamiento y funcionalidad del dispositivo.

MATERIALES DE REFERENCIA Encoder Arduino Mega Teclado Matricial LCD Resistencias Motor de 12 V Fuente CDIGO ARDUINO#INCLUDE #INCLUDE LIQUIDCRYSTAL LCD(33, 31, 29, 27, 25, 23);BYTE PINSFILAS[FILAS] = {22, 24, 26, 28};BYTE PINSCOLUMNAS[COLUMNAS]={30, 32, 34};CONST BYTE FILAS=4;CONST BYTE COLUMNAS = 3;INT ANALOGO= 0;INT LEDPIN=3;INT LED13=13;INT ENCODER = 52;STRING ARRIBA="";STRING ABAJO="";STRING INSTRING="";FLOAT VELOCIDAD;FLOAT CAMBIOS=0;UNSIGNED LONG TIME;UNSIGNED LONG TIMEF;UNSIGNED LONG TIMEFT;UNSIGNED LONG TIMET;UNSIGNED LONG ERRORTIEMPO;INT ANTERIOR=LOW;FLOAT MEDIA=0;FLOAT PASOS=0;FLOAT MEDIATIEMPO=0;FLOAT SUMA=0;FLOAT DATOPWM=0;FLOAT BASEPWM=0;INT NUMMUESTRAS=715;INT NUMPROMEDIO=10;FLOAT DATOTECLADO=0;FLOAT DATOACTUAL=0;FLOAT NUMTIEMPO=0;FLOAT VALOR_IGUALAR=1;FLOAT ERROR=100.0;FLOAT ERRORENERGIA=0;

CHAR TECLAS[FILAS][COLUMNAS] = {{'1','2','3'},{'4','5','6'},{'7','8','9'},{'*','0','#'}};KEYPAD TECLADO = KEYPAD(MAKEKEYMAP(TECLAS), PINSFILAS, PINSCOLUMNAS, FILAS, COLUMNAS);CHAR TECLA;INT NUMERO=0;INT NUMERO2=0;INT CONT=1;INT NUM=0;VOID SETUP(){ SERIAL.BEGIN(9600); PINMODE(LED13, OUTPUT); PINMODE(LEDPIN, OUTPUT); PINMODE(ENCODER, INPUT); LCD.BEGIN(16, 2);}

VOID LOOP(){ INSTRING=""; CAMBIOS=0; AJUSTAR_CONV10MS(); INGRESAR_TECLADO_RPS(); AJUSTAR_RPS(); DATOTECLADO=NUMERO2; SERIAL.PRINTLN("***********"); SERIAL.PRINTLN("FUERA CICLO"); SERIAL.PRINTLN("***********"); IMPRIMITDATOSEXTRA(); LCD.SETCURSOR(0,0); LCD.PRINT(" "); LCD.SETCURSOR(0,1); LCD.PRINT(" "); LCD.SETCURSOR(0,0); LCD.PRINT("SP: "); LCD.PRINT(DATOTECLADO); IF (DATOTECLADO>34 ) { LCD.SETCURSOR(0,0); LCD.PRINT("OTRO VALOR"); LCD.SETCURSOR(0,1); LCD.PRINT("ENCODER 34"); } IF (DATOTECLADO 0) { INT INCHAR = SERIAL.READ(); IF (ISDIGIT(INCHAR)) { INSTRING += (CHAR)INCHAR; } DATOTECLADO=INSTRING.TOINT(); } ANALOGWRITE(LEDPIN,DATOTECLADO); DATOPWM=DATOTECLADO; } VOID INGRESARSERIAL() { WHILE (SERIAL.AVAILABLE() > 0) { INT INCHAR = SERIAL.READ(); IF (ISDIGIT(INCHAR)) { INSTRING += (CHAR)INCHAR; } DATOTECLADO=INSTRING.TOINT(); ERRORENERGIA=0; } RETURN; } VOID INGRESAR_TECLADO_RPS() { TECLA = TECLADO.GETKEY(); IF(TECLA == NO_KEY) { RETURN; }ELSE { NUMERO = TECLA - 48; IF (CONT==1){ NUM=NUMERO; } IF (CONT==2){ NUMERO2=NUM*10+NUMERO; CONT=0; } CONT=CONT+1; } RETURN; }/////////////////////////////////////////////////////////////////////////// VOID AJUSTAR_RPS() { IF(DATOTECLADO>=35.0) { SERIAL.PRINTLN("ERROR LIMITE RPS"); FUERA_RANGO();//PARA PROBAR LA VELOCIDAD MAXIMA RETURN; } IF(DATOACTUAL!=DATOTECLADO) { BUSCAR_LUGAR_CERCANO(); BASEPWM=DATOPWM; ERROR=40.0; } IF(ABS(ERROR)1.0 AND ABS(ERROR)1.0); DATOACTUAL=DATOTECLADO; RETURN; } VOID IGUALAR_RAPIDO() { IF(CAMBIOS==DATOTECLADO) { RETURN; } IF(CAMBIOSDATOTECLADO) { DATOPWM--; ANALOGWRITE(LEDPIN,DATOPWM); } RETURN; DATOPWM=0; DATOTECLADO=0; MEDIA=0; CAMBIOS=0; ERROR=100; ANALOGWRITE(LEDPIN,DATOPWM); ERRORENERGIA=100; RETURN; RETURN; } VOID BUSCAR(FLOAT VALOR,FLOAT MAXIMO) { DO { PROMEDIO(); IGUALAR(VALOR); ERROR=(DATOTECLADO-MEDIA)*100.0; ERROR/=(FLOAT)DATOTECLADO; } WHILE (ABS(ERROR)>1.0 AND ABS(ERROR)1.0 AND ABS(ERROR)