Sunteți pe pagina 1din 24

MATLAB

ROTACIONES EN EL ESPACIO 3D DE LOS ANGULOS DE EULER


Programa que se comunica con PROTEUS va RS232 para rotaciones 3D

Autor:

Ingeniero Electrnico: Monteza Zevallos Fidel Tomas

Noviembre de 2017 (Segunda Edicin)

V. J. M. J. / A. M. M. J.
ndice general

Introduccin

1.- Rotaciones con respecto a los ejes X, Y y Z

2.- Matrices de giro con ngulos de Euler en el mismo sentido de las agujas del reloj

3.- Matrices de giro con ngulos de Euler en el sentido opuesto de las agujas del reloj

4. Lneas del algoritmo de la funcin: vector3d (Vector en tres dimensiones)

5. Lneas del algoritmo de la funcin: circunferencia1 (Dibujar los ngulos de rotacin)

6. Lneas del algoritmo del programa: SERIAL_ROTACIONXN1 (Dibujar la rotacin de un vector sobre el Eje X en un sistema
3D)

7. Lneas del algoritmo del programa que ser grabado en el microcontrolador PIC16F877A para controlar la rotacin de un
vector sobre el Eje X en un sistema 3D

8. Circuito electrnico implementado en PROTEUS con la Conversin Analgica a Digital de la seal de un Potencimetro
para que controle la rotacin de un vector sobre el Eje Z de un sistema 3D

9. Programacin de la interface Virtual Serial Ports Emulator para crear puertos RS232 virtuales

10. Secuencia del funcionamiento del control de posicin del vector en un sistema 3D.
Introduccin
Los ngulos de Euler constituyen un conjunto de tres coordenadas angulares que sirven para especificar la orientacin de un sistema de referencia de ejes
ortogonales, normalmente mvil, respecto a otro sistema de referencia de ejes ortogonales normalmente fijos.

Fueron introducidos por Leonhard Euler en mecnica del slido rgido para describir la orientacin de un sistema de referencia solidario con un slido rgido
en movimiento.

Dados dos sistemas de coordenadas xyz y XYZ con origen comn, es posible especificar la posicin de un sistema en trminos del otro
usando tres ngulos , y .

La definicin matemtica es esttica y se basa en escoger dos planos, uno en el sistema de referencia y otro en el triedro rotado. En el
esquema adjunto seran los planos xy y XY. Escogiendo otros planos se obtendran distintas convenciones alternativas, las cuales se
llaman de Tait-Bryan cuando los planos de referencia son no-homogneos (por ejemplo, xy y XY son homogneos, mientras xy y XZ no
lo son).

La interseccin de los planos coordenados xy y XY escogidos se llama lnea de nodos, y se usa para definir los tres ngulos:
es el ngulo entre el eje x y la lnea de nodos.
es el ngulo entre el eje z y el eje Z.
es el ngulo entre la lnea de nodos y el eje X.

Dos sistemas de coordenadas ortogonales en el que se muestran los ngulos de Euler

Ms adelante se establecer que los tres ngulos de Euler descritos son los valores de las tres rotaciones intrnsecas que describen el
sistema.
1.- Rotaciones con respecto a los ejes X, Y y Z

En tres dimensiones se pueden hacer tres rotaciones:


- Rotacin en OX
- Rotacin en OY
- Rotacin en OZ

2.- Matrices de giro con ngulos de Euler en el mismo sentido de las agujas del reloj

1 0 0 0 0
0 0 1 0 0
0 0 0 0 1
Matriz de giro en el Eje X Matriz de giro en el Eje Y Matriz de giro en el Eje Z

3.- Matrices de giro con ngulos de Euler en el sentido opuesto de las agujas del reloj

1 0 0 0 0
0 0 1 0 0
0 0 0 0 1
Matriz de giro en el Eje X Matriz de giro en el Eje Y Matriz de giro en el Eje Z
4. Lneas del algoritmo de la funcin: vector3d (Vector en tres dimensiones)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Programa que permite visualizar el grafico de vectores. Importante en esta funcion las lineas se encuentran comentadas
% Esta funcion puede graficar vectores 2D y vectores 3D con flechas dependiendo de las dimensiones de entrada
%
% Ejemplo de un vector 3D: p0 = [1 2 3]; % Coordenadas del punto inicial p0
% p1 = [4 5 6]; % Coordenadas del punto final p1
% color = 'r' % Color rojo seleccionado
% ancho = 10 % Grozor del vector
% vector3d(p0,p1,color,ancho)
%
% Ejemplo de un vector 2D: p0 = [1 2]; % Coordenadas del punto inicial p0
% p1 = [4 5]; % Coordenadas del punto final p1
% color = 'r' % Color rojo seleccionado
% ancho = 10 % Grozor del vector
% vector3d(p0,p1,color,ancho)
%
% Debe ingresar los valores de p0 p1 color tal como se indica lineas arriba en el Command Window
% Tipeando vector3d(p0,p1,color,ancho) en el Command Window se graficara la linea de un vector con una flecha
% desde el punto p0 al punto p1 en color rojo y con un grozor de 10
% Otra alternativa es que puede tipear directamente en el Command Window:
% vector3d([1 2 3],[4 5 6],'r',10) % Visulizara un vector en 3D
% vector3d([1 2],[4 5],'r',10) % Visulizara un vector en 2D
% Puede seleccionar cualquier color tan solo cambiando el tercer elemento de la funcion
% Puede seleccionar cualquier grozor tan solo cambiando el cuarto elemento de la funcion
% Si no desea trabajar directamente con la funcion, puede ejecutar el archivo VECTOR2D1.
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% p0, p1, color, ancho son parametros de entrada. Se dibuja una flecha que representa un vector desde p0 a p1
function vector3d(p0,p1,color,ancho)

%Con estas lineas se podra lograr la grafica de vectores en un sistema 3D (x,y,z)


if max(size(p0))==3 % El maximo tamao de valores de p0 (x0,y0,z0) debe ser 3 (Representa el punto inicial del vector 3D)
if max(size(p1))==3 % El maximo tamao de valores de p1(x1,y1,z1) debe ser 3 (Representa el punto final del vector 3D)
x0 = p0(1); % El valor que se ingrese en la primera posicion de p0 sera asignado a la variable x0
y0 = p0(2); % El valor que se ingrese en la segunda posicion de p0 sera asignado a la variable y0
z0 = p0(3); % El valor que se ingrese en la tercera posicion de p0 sera asignado a la variable z0
x1 = p1(1); % El valor que se ingrese en la primera posicion de p1 sera asignado a la variable x1
y1 = p1(2); % El valor que se ingrese en la segunda posicion de p1 sera asignado a la variable y1
z1 = p1(3); % El valor que se ingrese en la tercera posicion de p1 sera asignado a la variable z1
plot3([x0;x1],[y0;y1],[z0;z1],color,'LineWidth',ancho); % Se grafica una linea entre el punto p0 y el punto p1

p = p1-p0; % Restamos los valores del punto final (p1) menos los valores del punto inicial (p0)
alpha = 0.07; % Tamao de la cabeza de flecha relativo a la longitud del vector
beta = 0.2; % Ancho de la base de la cabeza de flecha relativo a su longitud

hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))];


hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))];
hw = [z1-alpha*p(3);z1;z1-alpha*p(3)];

hold on % Mantenemos el grafico de de la linea que represnta al vector 3D


plot3(hu(:),hv(:),hw(:),color,'LineWidth',ancho) % Se grafica la cabeza de flecha del vector
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Estas lineas se activaran SOLO si se ejecuta la funcion desde el Command Window tal como se sugiere en los comentarios de cabecera%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% grid on
% xlabel('EJE X','Color','r') % Dar nombre al eje X
% ylabel('EJE Y','Color','g') % Dar nombre al eje Y
% zlabel('EJE Z','Color','b') % Dar nombre al eje Z
% hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
hold off
else
error('p0 y p1 deben tener las mismas dimensiones') % ALERTA para solo aceptar que p0 y p1 sean de igual extension
end

%Con estas lineas se podra lograr la grafica de vectores en un sistema 2D (x,y)


elseif max(size(p0))==2 % El maximo tamao de valores de p0 (x0,y0) debe ser 2 (Representa el punto inicial del vector 2D)
if max(size(p1))==2 % El maximo tamao de valores de p1 (x0,y0) debe ser 2 (Representa el punto inicial del vector 2D)
x0 = p0(1); % El valor que se ingrese en la primera posicion de p0 sera asignado a la variable x0
y0 = p0(2); % El valor que se ingrese en la segunda posicion de p0 sera asignado a la variable y0
x1 = p1(1); % El valor que se ingrese en la primera posicion de p1 sera asignado a la variable x1
y1 = p1(2); % El valor que se ingrese en la segunda posicion de p1 sera asignado a la variable y1
plot([x0;x1],[y0;y1],color,'LineWidth',ancho); % Se grafica una linea entre el punto p0 y el punto p1

p = p1-p0; % Restamos los valores del punto final (p1) menos los valores del punto inicial (p0)
alpha = 0.1; % Tamao de la cabeza de flecha relativo a la longitud del vector
beta = 0.1; % Ancho de la base de la cabeza de flecha relativo a su longitud

hu = [x1-alpha*(p(1)+beta*(p(2)+eps)); x1; x1-alpha*(p(1)-beta*(p(2)+eps))];


hv = [y1-alpha*(p(2)-beta*(p(1)+eps)); y1; y1-alpha*(p(2)+beta*(p(1)+eps))];

hold on
plot(hu(:),hv(:),color,'LineWidth',ancho) % Se grafica la cabeza de flecha

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Estas lineas se activaran SOLO si se ejecuta la funcion desde el Command Window tal como se sugiere en los comentarios de cabecera%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% grid on
% xlabel('EJE X','Color','r') % Dar nombre al eje X
% ylabel('EJE Y','Color','g') % Dar nombre al eje Y
% hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

else
error('p0 y p1 deben tener las mismas dimensiones') % ALERTA para solo aceptar que p0 y p1 seab de igual extension
end
else
error('ATENCION: Esta funcion solo acepta vectores 2D o 3D') % ALERTA que indica los dos tipos de sistemas vectoriales a graficar
end
Se tipea la funcion vector3d en el Command Window con sus respectivos datos para obtener un vector 2D

Grafico de un vector 2D con los datos ingresados en la funcion vector3d


Se tipea la funcion vector3d en el Command Window con sus respectivos datos para obtener un vector 3D

Grafico de un vector 3D con los datos ingresados en la funcion vector3d


5. Lneas del algoritmo de la funcin: circunferencia1 (Dibujar los ngulos de rotacin)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Funcion circunferencia3d que permite visualizar una circunferencia con centro en (0,0,0) del sistema 3D. Las lineas se encuentran comentadas
% Valores sugeridos:
% puntox = 1; % Valor de activacion del Eje X
% puntoy = 1; % Valor de activacion del Eje Y
% puntoz = 0; % Valor de activacion del Eje Z
% x = 0; % Valor del Eje X
% y = 0; % Valor del Eje Y
% z = 1; % Valor del Eje Z
% radio = 2; % Valor del radio de la circunferencia
% angulo1 = 0; % Punto inicial del angulo de giro del grafico
% angulo2 = 2*pi; % Angulo de giro del grafico
% color = 'r' % Color rojo seleccionado
% ancho = 10 % Grozor la linea de la circunfrencia
%
% Tipeando en el Command Window:
% circunferencia1(1,1,0,0,0,1,2,0,2*pi,'b',5) Se graficara la circunferencia color azul en el plano XY (El Eje Z puede tener cualquier valor)
% circunferencia1(1,0,1,0,1,0,2,0,2*pi,'g',5) Se graficara la circunferencia color verde en el plano XZ (El Eje Y puede tener cualquier valor)
% circunferencia1(0,1,1,1,0,0,2,0,2*pi,'r',5) Se graficara la circunferencia color rojo en el plano YZ (El Eje X puede tener cualquier valor)
%
%INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function circunferencia1(puntox,puntoy,puntoz,x,y,z,radio,angulo1,angulo2,color,ancho)

r = radio; % Valor del radio de la circunferencia


Theta1 = angulo1; % Valor del angulo descrito durante el giro
Theta2 = angulo2; % Valor del angulo descrito durante el giro

if puntoz == 0 & puntoy == 1 & puntox == 1 % Graficamos el circulo en el plano XY (El Eje Z puede tener cualquier valor)
h = x; % Valor del Eje X (Punto central de la circunferencia)
i = y; % Valor del Eje Y (Punto central de la circunferencia)
j = z; % Valor del Eje Z (Punto central de la circunferencia)

t = Theta1:Theta2/20:Theta2; % Declaramos a t desde Theta1 hasta el valor de Theta2 en espacios de Theta2/20


Eje_x = h+r*cos(t); % La variable Eje_x es el valor inicial del grafico en el Eje X
Eje_y = i+r*sin(t); % La variable Eje_y es el valor inicial del grafico en el Eje Y
Eje_z = j+0*sin(t); % Aqui el eje Z es cero

end

if puntoz == 1 & puntoy == 0 & puntox == 1 % Graficamos el circulo en el plano XZ (El Eje Y puede tener cualquier valor)
h = x; % Valor del Eje X (Punto central de la circunferencia)
i = y; % Valor del Eje Y (Punto central de la circunferencia)
j = z; % Valor del Eje Z (Punto central de la circunferencia)

t = Theta1:Theta2/20:Theta2; % Declaramos a t desde Theta1 hasta el valor de Theta2 en espacios de Theta2/20


Eje_x = h+r*cos(t); % La variable Eje_x es el valor inicial del grafico en el Eje X
Eje_y = i+0*sin(t); % Aqui el eje Y es cero
Eje_z = j+r*sin(t); % La variable Eje_z es el valor inicial del grafico en el Eje Z

end
if puntoz == 1 & puntoy == 1 & puntox == 0 % Graficamos el circulo en el plano YZ (El Eje X puede tener cualquier valor)
h = x; % Valor del Eje X (Punto central de la circunferencia)
i = y; % Valor del Eje Y (Punto central de la circunferencia)
j = z; % Valor del Eje Z (Punto central de la circunferencia)

t = Theta1:Theta2/20:Theta2; % Declaramos a t desde Theta1 hasta el valor de Theta2 en espacios de Theta2/20


Eje_x = h+0*sin(t); % Aqui el eje X es cero
Eje_y = i+r*cos(t); % La variable Eje_y es el valor inicial del grafico en el Eje Y
Eje_z = j+r*sin(t); % La variable Eje_z es el valor inicial del grafico en el Eje Z

end

plot3(h,i,j,'o','MarkerFaceColor',color) % Graficar el punto central de la circunferencia


hold on % Mantener el grafico del punto central de la circunferencia
plot3(Eje_x,Eje_y,Eje_z,color,'LineWidth',ancho) % Graficar la circunferencia en las coordenadas X Y Z
grid on

axis square % Adaptar que la figura salga en un cuadrado


xlabel('EJE X','Color','r') % Dar nombre al eje X
ylabel('EJE Y','Color','g') % Dar nombre al eje Y
zlabel('EJE Z','Color','b') % Dar nombre al eje Z

end

Grafico de una circunferencia con los datos ingresados en la funcion circunferencia1


6. Lneas del algoritmo del programa: SERIAL_ROTACIONXN1 (Dibujar la rotacin de un vector sobre el Eje X en un sistema 3D)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo que toma datos por un puerto serial y grafica la Rotacion 3D sobre el Eje X de un Vectior de Posicion
% Se declara la variable que con el nmero de muestras que el usuario requiere tomar.
% MATLAB utiliza el COM2 mientras que PROTEUS utiliza el COM1
% Debe recordar tener activo PROTEUS para iniciar la transmision RS232 y Presionar Enter para iniciar la transmision RS232
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

close all; % Cerramos todo


clc; % Limpiamos el Command Window
muestras = 200; % Determinamos el numero de muestras que sera 700

Py = [0;1;0]; % Vector rotacion en el eje Y del sistema de referencia


Pz = [0;0;1]; % Vector rotacion en el eje Z del sistema de referencia

p0 = [0;0;0]; % Coordenadas del punto de inicio comun p0 (Centro de coordenadas)


PX1 = [4;0;0]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PY1 = [0;4;0]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PZ1 = [0;0;4]; % Coordenadas del punto final positivo comun a p0 (Centro de coordenadas)
PX2 = [-4;0;0]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)
PY2 = [0;-4;0]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)
PZ2 = [0;0;-4]; % Coordenadas del punto final negativo comun a p0 (Centro de coordenadas)

%Borra datos que se encuentren previos y vuelve a declarar el puerto y la velocidad de transmisin
delete(instrfind({'port'},{'COM2'})); % Borramos cualquier eleccion de puerto seria RS232 anterior
puerto = serial('COM2'); % seleccionamos un nuevo puerto serial RS232
puerto.BaudRate = 4800; % Establecemos la velocidad de comunicacion en Baudios

fopen(puerto); % Abre el puerto a utilizar


conteo = 1; % Se inicializa la variable conteo en 1

fprintf('\n Recuerde tener activo PROTEUS para iniciar la transmision RS232\n')


fprintf('\n Presionar Enter para iniciar la transmision RS232\n')
pause % La pausa se levantara al presionar ENTER

%Ciclo para ir realizando la grafica paso a paso


while conteo<=muestras
valor_entrada = fscanf(puerto,'%d')'; % Toma el valor recibido por el puerto desde Cero a 255 y lo guarda en la variable

angulo1_rad = acos(cos((valor_entrada/255)*pi)); % Angulo en radianes


angulo1_grad = (angulo1_rad*360)/(2*pi); % Conversion del angulo en radianes a grados
Longitud1 = norm(Py); % Hallamos la norma del vector Py

% Matriz de rotacion en el eje X en el sentido opuesto a las agujas del reloj del espacio 3D
%Rx = [1 0 0;0 cos((valor_entrada/255)*pi)) sin((valor_entrada/255)*pi));0 -sin((valor_entrada/255)*pi)) cos((valor_entrada/255)*pi))];

% Matriz de rotacion en el eje X en el mismo sentido a las agujas del reloj del espacio 3D
% Rx = [1 0 0;0 cos((valor_entrada/255)*pi)) -sin((valor_entrada/255)*pi));0 sin((valor_entrada/255)*pi)) cos((valor_entrada/255)*pi))];
% Py2 = Rx*Py % Rotacion del vector Py en el eje X originando el vector Py2
% Pz3 = Rx*Pz % Rotacion del vector Pz en el eje X originando el vector Pz3
Py2 = (rotx((valor_entrada/255)*pi))*Py; % Ecuacion con la funcion rotx semejante a la matriz Rx
Pz3 = (rotx((valor_entrada/255)*pi))*Pz; % Ecuacion con la funcion rotx semejante a la matriz Rx

vector3d(p0,Py,'g',1) % Graficamos el vector de inicio del desplazamiento del vector Py


hold on
vector3d(p0,Pz,'b',1) % Graficamos el vector de inicio del desplazamiento del vector Pz
hold on

vector3d(p0,PX1,'r',2) % Graficamos el vector del Eje X positivo


hold on
vector3d(p0,PY1,'g',2) % Graficamos el vector del Eje Y positivo
hold on
vector3d(p0,PZ1,'b',2) % Graficamos el vector del Eje Z positivo
hold on
vector3d(p0,PX2,'r',2) % Graficamos el vector del Eje X negativo
hold on
vector3d(p0,PY2,'g',2) % Graficamos el vector del Eje Y negativo
hold on
vector3d(p0,PZ2,'b',2) % Graficamos el vector del Eje Z negativo
hold on

circunferencia1(0,1,1,0,0,0,0.2,0,((valor_entrada/255)*pi),'g',2) % Graficamos el angulo descrito por el giro del vector Py en el plano YZ


hold on
circunferencia1(0,1,1,1,0,0,0.5,0,((valor_entrada/255)*pi)*3,'r',2) % Graficamos una circunferencia de referencia de giro del Eje Y
hold on

vector3d(p0,Py2,'g',1) % Graficamos el vector Py2


hold on
vector3d(p0,Pz3,'b',1) % Graficamos el vector Pz3

xlabel('EJE X','Color','r') % Dar nombre al eje X


ylabel('EJE Y','Color','g') % Dar nombre al eje Y
zlabel('EJE Z','Color','b') % Dar nombre al eje Z
grid on % Activamos las rejillas
title(['ROTACION DEL EJE X',' ','Angulo Theta1 = ' num2str(angulo1_grad)]); % Declaramos un titulo con los resultados del angulo
axis([-Longitud1 Longitud1 -Longitud1 Longitud1 -Longitud1 Longitud1]); % Establecemos un sistema de ejes fijo para el vector Py
pause(0.01)

conteo = conteo+1; % Se inicializa la cuenta de la variable conteo


end

%Cierra y borra el puerto utilizado, borra todas las variables utilizadas dando mensaje de Termino de Comunicacion RS232
fclose(puerto);
delete(puerto);
fprintf('\n FIN de la transmision RS232\n')
Programa MATLAB mostrando en la ventana Editor el programa SERIAL_ROTACIONXN1 (Dibujar la rotacin de un vector sobre el Eje X en un sistema 3D)
Grafico de rotacion 3D sobre el Eje Y (Color verde) con el programa SERIAL_ROTACIONXN1 (Dibujar la rotacin de un vector sobre el Eje X en un sistema 3D)
7. Lneas del algoritmo del programa que ser grabado en el microcontrolador PIC16F877A para controlar la rotacin de un
vector sobre el Eje X en un sistema 3D
'****************************************************************
'* Name : ADC5_2A.BAS *
'* Author : Mg. MONTEZA ZEVALLOS FIDEL T. *
'* Notice : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 14/11/2011 *
'* Version : 1.0 *
'* Notes : Conversion Analogico a Digital de un potenciometro*
'* y visualizar la velocidad parpadeo de un LED *
'* : Circuito PROTEUS ADC_5(MATLAB) *
'****************************************************************

DEFINE LCD_DREG PORTD 'Setea el puerto D para el bus de datos LCD D0,D1,D2,D3,D4,D5,D6,D7
DEFINE LCD_DBIT 4 'Setea el bit de comienzo de datos (0 o 4), 4 si el bus comienza en el bit 4 (PORTD4)
DEFINE LCD_RSREG PORTE 'Setea el puerto E para el port LCD Register Select (RS)
DEFINE LCD_RSBIT 0 'Setea el puerto E0 para el LCD Register Select
DEFINE LCD_EREG PORTE 'Setea el puerto E para el port LCD Enable (E)
DEFINE LCD_EBIT 1 'Setea el puerto E1 para el LCD Enable
DEFINE LCD_BITS 4 'Setea el tamao del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2 'Setea el numero de lineas en el LCD

Define ADC_BITS 8 'Fija nmero de bits del resultado (5,8,10)


Define ADC_CLOCK 3 'Fije EL CLOCK (rc = 3)
Define ADC_SAMPLEUS 50 'Fija el tiempo de muestreo en us. ADC_SAMPLEUS es el nmero de us que el programa espera
'entre fijar el canal y comenzar la conversin analogica/digital.

TRISC.6 = %0 'Setea el PORTC.6 como salida (TX SERIAL)


TRISA.0 = %1 'Setea el PORTA.0 como entrada (CONEXION DE POTENCIOMTERO)
ADCON1 = %00001110 'Setea el PORTA.0 como conversor, los dems Digitales
TRISB.6 = %0 'Setea el PORTB.6 como salida (CONEXION LED INDICADOR)

LED VAR PORTB.6


tiempo var word
datos var WORD 'Variable datos para guardar resultado
Pause 500 'Esperar 0.5 seg
tiempo = 0

Inicio:
ADCIN 0, datos 'Leer PORTA.0 y guardarlo en datos

'Transmision serial a 4800 Baudios (188)


SerOUT2 PORTC.6,188,[DEC datos,10,13]

Lcdout $FE,1," Velocidad RS232 "


Lcdout $FE,$C8,DEC3 datos 'Desplegar el valor de datos en decimal
HIGH LED 'Se ilumina el LED
PAUSE tiempo
low led 'Se apaga el LED
Pause tiempo
if datos=0 then tiempo=0
if datos>0 and datos<=31 then tiempo=1000
if datos>=32 and datos<=63 then tiempo=800
if datos>=64 and datos<=95 then tiempo=600
if datos>=96 and datos<=127 then tiempo=400
if datos>=128 and datos<=159 then tiempo=200
if datos>=160 and datos<=191 then tiempo=100
if datos>=192 and datos<=221 then tiempo=50
if datos>=222 and datos<=255 then tiempo=20

Goto inicio 'Volver a medir el conversor A/D


END

Programa Micro CodeStudio con el que implementa el programa ADC5_2A que ser grabado en el microcontrolador PIC16F877A para controlar la rotacin de un
vector sobre el Eje X en un sistema 3D
8. Circuito electrnico implementado en PROTEUS con la Conversin Analgica a Digital de la seal de un Potencimetro para
que controle la rotacin de un vector sobre el Eje Z de un sistema 3D

Circuito en el Programa PROTEUS en funcionamiento


9. Programacin de la interface Virtual Serial Ports Emulator para crear puertos RS232 virtuales
10. Secuencia del funcionamiento del control de posicin del vector en un sistema 3D.

S-ar putea să vă placă și