Mecanismo Biela Manivela

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 16

MECANISMO BIELA MANIVELA El mecanismo de la figura tiene dimensiones AB=0.5 m y BC=1 m. El ngulo inicial es de 45 con respecto a la horizontal.

Encontrar la posicin del punto C.

SOLUCIN PARA LAS POSICIONES La posicin del punto C se puede ubicar e la interseccin de una circunferencia de centro en B y radio BC con una recta horizontal que pasa por A y C. Primera forma: Utilizando el comando Solve para resolver ecuaciones algebraicas en forma simblica. Se genera el siguiente cdigo de Matlab:
clear all clc close all %DATOS INICIALES AB=0.5; BC=1.0; phi=pi/4; %CLCULO DE LAS POSICIONES xA=0; yA=0; xB=AB*cos(phi); yB=AB*sin(phi); yC=0; %Clculo de la posicin faltante eqnC='(xCinc-xB)^2+(yC-yB)^2=BC^2'; solC=solve(eqnC,'xCinc'); xC1=eval(solC(1)); xC2=eval(solC(2)); %Como se tiene dos soluciones se debe escoger una if (xC1 > xB) xC = xC1; else xC = xC2; end %IMPRIMIR RESULTADOS fprintf('xB = %g (m) \n', xB); fprintf('yB = %g (m) \n', yB); fprintf('xC = %g (m) \n', xC); fprintf('yC = %g (m) \n', yC); %GRAFICAR EL MECANISMO

figure(1) plot([xA,xB,xC],[yA,yB,yC],'b-o'); title('Posicin para \phi = 45') xlabel('x (m)') ylabel('y (m)') text(xA,yA,' A'); text(xB,yB,' B'); text(xC,yC,' C'); axis([-0.2 1.4 -0.2 0.8]); grid

Utilizando el comando TIC y TOC se puede calcular el tiempo que lleva en ejecutarse la rutina. Este valor en promedio para la computadora donde se ejecut el cdigo es de 1.35 s. Las respuestas para el ejemplo son: xB = 0.353553 (m) yB = 0.353553 (m) xC = 1.28897 (m) yC = 0 (m)

Segunda forma: Ahora el comando Solve es un comando muy lento para calcular una ecuacin tan sencilla como la de interceptar un crculo con una lnea. Esto se debe a que este comando debe resolver todos los casos posibles. En el caso general de mecanismos en el plano hay que resolver tres casos: Interseccin de recta con recta Interseccin recta con circunferencia Interseccin de dos circunferencias

Los cdigos de estas funciones se presentan en el anexo. Para este caso se resuelve el sistema utilizando la funcin de interseccin de una recta con una circunferencia. El cdigo queda como el siguiente:
clear all clc close all %DATOS INICIALES AB=0.5; BC=1.0; phi=pi/4; %CLCULO DE LAS POSICIONES xA=0; yA=0; xB=AB*cos(phi); yB=AB*sin(phi); yC=0; %Para el clculo de la posicin faltante [ xC1,yC1,xC2,yC2 ] = lincir( xA,yA,AB+BC,yA,xB,yB,BC); %Como se tiene dos soluciones se debe escoger una if (xC1 > xB) xC = xC1; else xC = xC2; end

%IMPRIMIR RESULTADOS fprintf('xB = %g (m) \n', xB); fprintf('yB = %g (m) \n', yB); fprintf('xC = %g (m) \n', xC); fprintf('yC = %g (m) \n', yC); %GRAFICAR EL MECANISMO figure(1) plot([xA,xB,xC],[yA,yB,yC],'b-o'); title('Posicin para \phi = 45') xlabel('x (m)') ylabel('y (m)') text(xA,yA,' A'); text(xB,yB,' B'); text(xC,yC,' C'); axis([-0.2 1.4 -0.2 0.8]); grid

Utilizando el comando TIC y TOC se puede calcular el tiempo que lleva en ejecutarse la rutina. Este valor en promedio para la computadora donde se ejecut el cdigo es de 0.235 s. Con esta rutina se tiene un ahorro en tiempo del 82.6%. Las respuestas para el ejemplo son las mismas: xB = 0.353553 (m) yB = 0.353553 (m) xC = 1.28897 (m) yC = 0 (m)

SIMULACIN DEL MOVIMIENTO DEL MECANISMO Una vez que se tienen las coordenadas se puede graficar el movimiento completo del mecanismo para visualizar su funcionamiento correcto. En este caso se debe evitar que el programa se confunda cuando tiene dos puntos de solucin para el mecanismo. Este tipo de situaciones se resuelve considerando tambin como datos de entrada la posicin inicial de todos los puntos del mecanismo que necesitan ser calculador. De esta forma por continuidad en el movimiento del mecanismo se puede llegar a escoger el punto correcto del movimiento. Es decir entre una posicin y otra el nuevo punto debe estar cerca del punto anteriormente. Esto se resuelve de forma matemtica calculando la distancia ms cercana entre dos puntos. Para esto se construye una funcin que calcule estas distancias y se presenta el cdigo a continuacin:
% Progarama para calcular la distancia mnima entre dos puntos % DATOS DE INGRESO % Puntos de refererencia (Px,Py) % Puntos a evaluar (Qx,Qy) y (Rx,Ry) % SALIDA % Devuelve el punto (Qx,Qy) o (Rx,Ry) mas cercano function [ Sx,Sy ] = distMinima( Px,Py,Qx,Qy,Rx,Ry ) %Clculo de las distancias dist1=((Px-Qx)^2+(Py-Qy)^2)^0.5; dist2=((Px-Rx)^2+(Py-Ry)^2)^0.5; if(dist1<dist2)

Sx=Qx; Sy=Qy; else Sx=Rx; Sy=Ry; end end

El programa para simular el movimiento del mecanismo es:


clear all clc close all %DATOS INICIALES AB=0.5; BC=1.0; phi=pi/4; %CLCULO DE LAS POSICIONES xA=0; yA=0; yC=0; %Puntos de referencia iniciales xCref=1.29; %Se define el paso de la simulacin Paso=pi/180; for I=phi:Paso:phi+2*pi xB=AB*cos(I); yB=AB*sin(I); %Para el clculo de la posicin faltante [ xC1,yC1,xC2,yC2 ] = lincir( xA,yA,AB+BC,yA,xB,yB,BC); % Se escoge una de las dos soluciones [ xC,yC ] = distMinima( xCref,yC,xC1,yC1,xC2,yC2); figure(1); hold off plot([xA,xB,xC],[yA,yB,yC],'b-o'); title('Simulacin de las posiciones') xlabel('x (m)') ylabel('y (m)') axis([-0.6 1.6 -0.6 0.8]); grid %Se actualiza la refrencia a la ltima coordenada calculada xCref=xC; pause(0.01) end

La simulacin de forma resumida produce las siguientes imgenes cuyo cdigo fuente se encuentra en el anexo:

SOLUCIN PARA EL CLCULO DE LAS VELOCIDADES Las velocidades se calculan en cada una de las diferentes posiciones del ngulo y para esto se debe calcular de forma vectorial cada una de las posiciones de los puntos del mecanismo. Tambin es necesario contar con la velocidad angular de la biela que para este ejemplo se tomar 2 rad/s. El programa para su clculo se muestra a continuacin:
%CALCULO DE LAS VELOCIDADES EN CADA POSICIN clear all clc close all %DATOS INICIALES AB=0.5; BC=1.0; phi=pi/4; omega1=[0, 0, 2]; %CLCULO DE LAS POSICIONES xA=0; yA=0; yC=0; %Puntos de referencia iniciales xCref=1.29; %Se define el paso de la simulacin Paso=pi/180; J=1; %variable simblicas para el eslabn 2 omega2z = sym('omega2z','real'); vCx = sym('vCx','real'); for I=phi:Paso:phi+2*pi %Almacenar los ngulos ang(J)=I; xB=AB*cos(I); yB=AB*sin(I); %Para el clculo de la posicin faltante [ xC1,yC1,xC2,yC2 ] = lincir( xA,yA,AB+BC,yA,xB,yB,BC); % Se escoge una de las dos soluciones [ xC,yC ] = distMinima( xCref,yC,xC1,yC1,xC2,yC2); %Contruccin de los vectores posicin rA=[xA, yA, 0]; rB=[xB, yB, 0]; rC=[xC, yC, 0]; vA=[0, 0, 0 ]; %en m/s %Clculo de la velocidad en B vB(J,:) = vA + cross(omega1,rB); vBmod(J)=norm(vB(J,:)); %clculo de la velocidad en C %Para esto es necesario crear dos variable simblicas cuya declaracin %se pone fuera del for porque se hace una sola vez Omega2 = [ 0 0 omega2z ]; VC = [ vCx 0 0 ]; %Se usa la ecuacin vC = vB + ?2(rC ?rB) que en Matlab es eqvC = VC - (vB(J,:) + cross(Omega2,rC-rB)); %como la ecuacin anterior es vectorial la convertimos en dos %algebraicas eqvCx = eqvC(1); % Ecuacin en X eqvCy = eqvC(2); % Ecuacin en Y solvC = solve(eqvCx,eqvCy);

omega2zs = eval(solvC.omega2z); vCxs = eval(solvC.vCx); omega2(J,:) = [0, 0, omega2zs]; omega2mod(J)=norm(omega2(J,:)); vC(J,:) = [vCxs, 0, 0]; vCmod(J)=norm(vC(J,:)); J=J+1; end figure(1); plot(ang*180/pi,vBmod); title('Modulo de la velocidad en B') xlabel('Angulo \phi (Grados)') ylabel('Velocidad (m/s)') grid figure(2); plot(ang*180/pi,vCmod); title('Modulo de la velocidad en C') xlabel('Angulo \phi (Grados)') ylabel('Velocidad (m/s)') grid figure(3); plot(ang*180/pi,omega2mod); title('Modulo de la velocidad angular en la barra2') xlabel('Angulo \phi (Grados)') ylabel('Velocidad angular (rad/s)') grid

Las grficas generadas son:

SOLUCIN PARA EL CLCULO DE LAS ACELERACIONES Las aceleraciones se calculan en cada una de las diferentes posiciones del ngulo y es necesario conocer la velocidad angular de todas las barras. Adems se considera que la barra 1 tiene una aceleracin angular de -1 rad/s2. El programa para su clculo se muestra a continuacin:
%CALCULO DE LAS ACELERACIONES EN CADA POSICIN clear all clc close all %DATOS INICIALES AB=0.5; BC=1.0; phi=pi/4; omega1=[0, 0, 2]; % (rad/s) alpha1 = [0 0 -1 ]; % (rad/s2) %CLCULO DE LAS POSICIONES xA=0; yA=0; yC=0; %Puntos de referencia iniciales

xCref=1.29; %Se define el paso de la simulacin Paso=pi/180; J=1; %variable simblicas para el eslabn 2: Velocidad omega2z = sym('omega2z','real'); vCx = sym('vCx','real'); %variable simblicas para el eslabn 2: Aceleracin alpha2z=sym('alpha2z','real'); aCx=sym('aCx','real'); for I=phi:Paso:phi+2*pi %Almacenar los ngulos ang(J)=I; xB=AB*cos(I); yB=AB*sin(I); %Para el clculo de la posicin faltante [ xC1,yC1,xC2,yC2 ] = lincir( xA,yA,AB+BC,yA,xB,yB,BC); % Se escoge una de las dos soluciones [ xC,yC ] = distMinima( xCref,yC,xC1,yC1,xC2,yC2); %Contruccin de los vectores posicin rA=[xA, yA, 0]; rB=[xB, yB, 0]; rC=[xC, yC, 0]; vA=[0, 0, 0 ]; %en m/s %Clculo de la velocidad en B vB(J,:) = vA + cross(omega1,rB); vBmod(J)=norm(vB(J,:)); %Clculo de la velocidad en C %Para esto es necesario crear dos variable simblicas cuya declaracin %se pone fuera del for porque se hace una sola vez Omega2 = [ 0 0 omega2z ]; VC = [ vCx 0 0 ]; %Se usa la ecuacin vC = vB + ?2(rC ?rB) que en Matlab es eqvC = VC - (vB(J,:) + cross(Omega2,rC-rB)); %como la ecuacin anterior es vectorial la convertimos en dos %algebraicas eqvCx = eqvC(1); % Ecuacin en X eqvCy = eqvC(2); % Ecuacin en Y solvC = solve(eqvCx,eqvCy); omega2zs = eval(solvC.omega2z); vCxs = eval(solvC.vCx); omega2(J,:) = [0, 0, omega2zs]; omega2mod(J)=norm(omega2(J,:)); vC(J,:) = [vCxs, 0, 0]; vCmod(J)=norm(vC(J,:)); %Clculo de la aceleracin en B aA = [0 0 0 ]; aB(J,:) = aA + cross(alpha1,rB) - dot(omega1,omega1)*rB; aBmod(J)=norm(aB(J,:)); %Clculo de la aceleracin en C Alpha2 = [ 0 0 alpha2z ]; % alpha3z unknown AC = [aCx 0 0 ]; % aCx unknown eqaC=AC-(aB(J,:)+cross(Alpha2,rC-rB)dot(omega2(J,:),omega2(J,:))*(rC-rB)); eqaCx = eqaC(1); % Ecuacin en X eqaCy = eqaC(2); % Ecuacin en Y solaC = solve(eqaCx,eqaCy); alpha2zs=eval(solaC.alpha2z); aCxs=eval(solaC.aCx);

alpha2(J,:) = [0 0 alpha2zs]; alpha2mod(J)=norm(alpha2(J,:)); aC(J,:) = [aCxs 0 0]; aCmod(J)=norm(aC(J,:)); J=J+1; end figure(1); plot(ang*180/pi,aBmod); title('Mdulo de la aceleracin en B') xlabel('Angulo \phi (Grados)') ylabel('Aceleracin (m/s2)') grid figure(2); plot(ang*180/pi,aCmod); title('Modulo de la aceleracin en C') xlabel('Angulo \phi (Grados)') ylabel('Aceleracin (m/s2)') grid figure(3); plot(ang*180/pi,alpha2mod); title('Modulo de la aceleracin angular en la barra2') xlabel('Angulo \phi (Grados)') ylabel('Aceleracin angular (rad/s2)') grid

Las grficas generadas son:

SOLUCIN PARA EL CLCULO DE LAS ACELERACIONES DEL CENTRO DE GRAVEDAD

SOLUCIN PARA EL CLCULO DE LAS FUERZAS

ANEXOS

El cdigo para interseccin de dos rectas se presenta a continuacin:


% Progarama para calcular el punto de interseccin de dos lneas % DATOS DE INGRESO % Puntos de la primera lnea (Ax,Ay) y (Bx,By) % Puntos de la segunda lnea (Cx,Cy) y (Dx,Dy) % SALIDA % Devuelve el punto de interseccin (Px,Py) function [ Px,Py ] = linlin( Ax,Ay,Bx,By,Cx,Cy,Dx,Dy) % calcular si la primera o segunda recta son verticales if(Bx-Ax==0) recVertA=1; else recVertA=0; end if(Dx-Cx==0) recVertB=1; else recVertB=0; end if(recVertA ==1 && recVertB==1) error('Las rectas son pareleas'); end if(recVertA ==1 && recVertB==0) %primera recta vertical m2=((Dy-Cy)/(Dx-Cx)); Px=Ax; Py=m2*(Px-Dx)+Dy; elseif(recVertA ==0 && recVertB==1)%segunda recta vertical m1=((By-Ay)/(Bx-Ax)); Px=Cx; Py=m1*(Px-Bx)+By; else %Rectas en cualquier posicin m1=((By-Ay)/(Bx-Ax)); m2=((Dy-Cy)/(Dx-Cx)); %Vericar nuevamente si las recatas no son paralelas if(m1 == m2) error('Las rectas son pareleas'); end Px=(m1*Ax-m2*Dx+Dy-Ay)/(m1-m2); Py=m1*(Px-Ax)+ Ay; end end

El cdigo para interseccin de una recta con una circunferencia se presenta a continuacin:
% Progarama para calcular el punto de interseccin de dos lneas % DATOS DE INGRESO % Puntos de la primera lnea (Ax,Ay) y (Bx,By) % Puntos del dentro del circulo (Cx,Cy) y Radio R % SALIDA % Devuelve los puntos de interseccin (Px,Py) y (Qx,Qy) function [ Px,Py,Qx,Qy ] = lincir( Ax,Ay,Bx,By,Cx,Cy,R) % Verificar si la recta es vertical o no if(Bx-Ax==0) % La recta es vertical %verificar que exista interseccin tmp=R^2-(Ax-Cx)^2; if(tmp<0) error('No existe interseccin entre lnea y crculo'); end Px=Ax; Qx=Ax; Py=Cy + tmp^0.5; Qy=Cy - tmp^0.5; else % La recta no es vertical m=(By-Ay)/(Bx-Ax); b=Ay-m*Ax; %verificar que exista interseccin tmp=- Cx^2*m^2 + 2*Cx*Cy*m - 2*Cx*b*m - Cy^2 + 2*Cy*b + R^2*m^2 + R^2 - b^2;

if(tmp<0) error('No existe interseccin entre lnea y crculo'); end Px=(Cx - (tmp)^(1/2) + Cy*m - b*m)/(m^2 + 1); Qx=(Cx + (tmp)^(1/2) + Cy*m - b*m)/(m^2 + 1); Py=m*Px+b; Qy=m*Py+b; end end

El cdigo para la interseccin de dos circunferencias se presenta a continuacin:


% Progarama para calcular el punto de interseccin de dos lneas % DATOS DE INGRESO % Puntos del centro del circulo 1 (Ax,Ay) y Radio R1 % Puntos del dentro del circulo 2 (Bx,By) y Radio R2 % SALIDA % Devuelve los puntos de interseccin (Px,Py) y (Qx,Qy) function [ Px,Py,Qx,Qy ] = circir( Ax,Ay,R1,Bx,By,R2) % Verificar si hay interseccin dist = ((Bx-Ax)^2+(By-Ay)^2)^2; if(dist>R1+R2) error('No existe interseccin entre los crculos'); end % calcular la interseccin Px=Ax/2 + Bx/2 - (Ax*R1^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (Ax*R2^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (Bx*R1^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) - (Bx*R2^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (Ay*(- Ax^4 + 4*Ax^3*Bx - 2*Ax^2*Ay^2 + 4*Ax^2*Ay*By - 6*Ax^2*Bx^2 - 2*Ax^2*By^2 + 2*Ax^2*R1^2 + 2*Ax^2*R2^2 + 4*Ax*Ay^2*Bx - 8*Ax*Ay*Bx*By + 4*Ax*Bx^3 + 4*Ax*Bx*By^2 - 4*Ax*Bx*R1^2 - 4*Ax*Bx*R2^2 - Ay^4 + 4*Ay^3*By - 2*Ay^2*Bx^2 - 6*Ay^2*By^2 + 2*Ay^2*R1^2 + 2*Ay^2*R2^2 + 4*Ay*Bx^2*By + 4*Ay*By^3 - 4*Ay*By*R1^2 4*Ay*By*R2^2 - Bx^4 - 2*Bx^2*By^2 + 2*Bx^2*R1^2 + 2*Bx^2*R2^2 - By^4 + 2*By^2*R1^2 + 2*By^2*R2^2 - R1^4 + 2*R1^2*R2^2 - R2^4)^(1/2))/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) - (By*(- Ax^4 + 4*Ax^3*Bx - 2*Ax^2*Ay^2 + 4*Ax^2*Ay*By - 6*Ax^2*Bx^2 - 2*Ax^2*By^2 + 2*Ax^2*R1^2 + 2*Ax^2*R2^2 + 4*Ax*Ay^2*Bx - 8*Ax*Ay*Bx*By + 4*Ax*Bx^3 + 4*Ax*Bx*By^2 - 4*Ax*Bx*R1^2 - 4*Ax*Bx*R2^2 - Ay^4 + 4*Ay^3*By 2*Ay^2*Bx^2 - 6*Ay^2*By^2 + 2*Ay^2*R1^2 + 2*Ay^2*R2^2 + 4*Ay*Bx^2*By + 4*Ay*By^3 - 4*Ay*By*R1^2 - 4*Ay*By*R2^2 - Bx^4 - 2*Bx^2*By^2 + 2*Bx^2*R1^2 + 2*Bx^2*R2^2 - By^4 + 2*By^2*R1^2 + 2*By^2*R2^2 - R1^4 + 2*R1^2*R2^2 - R2^4)^(1/2))/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2); Qx=Ax/2 + Bx/2 - (Ax*R1^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (Ax*R2^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (Bx*R1^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) - (Bx*R2^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) - (Ay*(- Ax^4 + 4*Ax^3*Bx - 2*Ax^2*Ay^2 + 4*Ax^2*Ay*By - 6*Ax^2*Bx^2 - 2*Ax^2*By^2 + 2*Ax^2*R1^2 + 2*Ax^2*R2^2 + 4*Ax*Ay^2*Bx - 8*Ax*Ay*Bx*By + 4*Ax*Bx^3 + 4*Ax*Bx*By^2 - 4*Ax*Bx*R1^2 - 4*Ax*Bx*R2^2 - Ay^4 + 4*Ay^3*By - 2*Ay^2*Bx^2 - 6*Ay^2*By^2 + 2*Ay^2*R1^2 + 2*Ay^2*R2^2 + 4*Ay*Bx^2*By + 4*Ay*By^3 - 4*Ay*By*R1^2 4*Ay*By*R2^2 - Bx^4 - 2*Bx^2*By^2 + 2*Bx^2*R1^2 + 2*Bx^2*R2^2 - By^4 + 2*By^2*R1^2 + 2*By^2*R2^2 - R1^4 + 2*R1^2*R2^2 - R2^4)^(1/2))/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (By*(- Ax^4 + 4*Ax^3*Bx - 2*Ax^2*Ay^2 + 4*Ax^2*Ay*By - 6*Ax^2*Bx^2 - 2*Ax^2*By^2 + 2*Ax^2*R1^2 + 2*Ax^2*R2^2 + 4*Ax*Ay^2*Bx - 8*Ax*Ay*Bx*By + 4*Ax*Bx^3 +

4*Ax*Bx*By^2 - 4*Ax*Bx*R1^2 - 4*Ax*Bx*R2^2 - Ay^4 + 4*Ay^3*By 2*Ay^2*Bx^2 - 6*Ay^2*By^2 + 2*Ay^2*R1^2 + 2*Ay^2*R2^2 + 4*Ay*Bx^2*By + 4*Ay*By^3 - 4*Ay*By*R1^2 - 4*Ay*By*R2^2 - Bx^4 - 2*Bx^2*By^2 + 2*Bx^2*R1^2 + 2*Bx^2*R2^2 - By^4 + 2*By^2*R1^2 + 2*By^2*R2^2 - R1^4 + 2*R1^2*R2^2 - R2^4)^(1/2))/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2); Py=Ay/2 + By/2 - (Ay*R1^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (Ay*R2^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (By*R1^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) - (By*R2^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) - (Ax*(- Ax^4 + 4*Ax^3*Bx - 2*Ax^2*Ay^2 + 4*Ax^2*Ay*By - 6*Ax^2*Bx^2 - 2*Ax^2*By^2 + 2*Ax^2*R1^2 + 2*Ax^2*R2^2 + 4*Ax*Ay^2*Bx - 8*Ax*Ay*Bx*By + 4*Ax*Bx^3 + 4*Ax*Bx*By^2 - 4*Ax*Bx*R1^2 - 4*Ax*Bx*R2^2 - Ay^4 + 4*Ay^3*By - 2*Ay^2*Bx^2 - 6*Ay^2*By^2 + 2*Ay^2*R1^2 + 2*Ay^2*R2^2 + 4*Ay*Bx^2*By + 4*Ay*By^3 - 4*Ay*By*R1^2 4*Ay*By*R2^2 - Bx^4 - 2*Bx^2*By^2 + 2*Bx^2*R1^2 + 2*Bx^2*R2^2 - By^4 + 2*By^2*R1^2 + 2*By^2*R2^2 - R1^4 + 2*R1^2*R2^2 - R2^4)^(1/2))/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (Bx*(- Ax^4 + 4*Ax^3*Bx - 2*Ax^2*Ay^2 + 4*Ax^2*Ay*By - 6*Ax^2*Bx^2 - 2*Ax^2*By^2 + 2*Ax^2*R1^2 + 2*Ax^2*R2^2 + 4*Ax*Ay^2*Bx - 8*Ax*Ay*Bx*By + 4*Ax*Bx^3 + 4*Ax*Bx*By^2 - 4*Ax*Bx*R1^2 - 4*Ax*Bx*R2^2 - Ay^4 + 4*Ay^3*By 2*Ay^2*Bx^2 - 6*Ay^2*By^2 + 2*Ay^2*R1^2 + 2*Ay^2*R2^2 + 4*Ay*Bx^2*By + 4*Ay*By^3 - 4*Ay*By*R1^2 - 4*Ay*By*R2^2 - Bx^4 - 2*Bx^2*By^2 + 2*Bx^2*R1^2 + 2*Bx^2*R2^2 - By^4 + 2*By^2*R1^2 + 2*By^2*R2^2 - R1^4 + 2*R1^2*R2^2 - R2^4)^(1/2))/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2); Qy=Ay/2 + By/2 - (Ay*R1^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (Ay*R2^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (By*R1^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) - (By*R2^2)/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) + (Ax*(- Ax^4 + 4*Ax^3*Bx - 2*Ax^2*Ay^2 + 4*Ax^2*Ay*By - 6*Ax^2*Bx^2 - 2*Ax^2*By^2 + 2*Ax^2*R1^2 + 2*Ax^2*R2^2 + 4*Ax*Ay^2*Bx - 8*Ax*Ay*Bx*By + 4*Ax*Bx^3 + 4*Ax*Bx*By^2 - 4*Ax*Bx*R1^2 - 4*Ax*Bx*R2^2 - Ay^4 + 4*Ay^3*By - 2*Ay^2*Bx^2 - 6*Ay^2*By^2 + 2*Ay^2*R1^2 + 2*Ay^2*R2^2 + 4*Ay*Bx^2*By + 4*Ay*By^3 - 4*Ay*By*R1^2 4*Ay*By*R2^2 - Bx^4 - 2*Bx^2*By^2 + 2*Bx^2*R1^2 + 2*Bx^2*R2^2 - By^4 + 2*By^2*R1^2 + 2*By^2*R2^2 - R1^4 + 2*R1^2*R2^2 - R2^4)^(1/2))/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2) - (Bx*(- Ax^4 + 4*Ax^3*Bx - 2*Ax^2*Ay^2 + 4*Ax^2*Ay*By - 6*Ax^2*Bx^2 - 2*Ax^2*By^2 + 2*Ax^2*R1^2 + 2*Ax^2*R2^2 + 4*Ax*Ay^2*Bx - 8*Ax*Ay*Bx*By + 4*Ax*Bx^3 + 4*Ax*Bx*By^2 - 4*Ax*Bx*R1^2 - 4*Ax*Bx*R2^2 - Ay^4 + 4*Ay^3*By 2*Ay^2*Bx^2 - 6*Ay^2*By^2 + 2*Ay^2*R1^2 + 2*Ay^2*R2^2 + 4*Ay*Bx^2*By + 4*Ay*By^3 - 4*Ay*By*R1^2 - 4*Ay*By*R2^2 - Bx^4 - 2*Bx^2*By^2 + 2*Bx^2*R1^2 + 2*Bx^2*R2^2 - By^4 + 2*By^2*R1^2 + 2*By^2*R2^2 - R1^4 + 2*R1^2*R2^2 - R2^4)^(1/2))/(2*Ax^2 - 4*Ax*Bx + 2*Ay^2 - 4*Ay*By + 2*Bx^2 + 2*By^2); end

Codigo para generar ocho posiciones en el biela manivela


clear all clc close all %DATOS INICIALES AB=0.5; BC=1.0; phi=pi/4; %CLCULO DE LAS POSICIONES xA=0; yA=0; yC=0; %Puntos de referencia iniciales xCref=1.29; %Se define el paso de la simulacin Paso=pi/4; for I=phi:Paso:phi+2*pi xB=AB*cos(I); yB=AB*sin(I); %Para el clculo de la posicin faltante [ xC1,yC1,xC2,yC2 ] = lincir( xA,yA,AB+BC,yA,xB,yB,BC); % Se escoge una de las dos soluciones [ xC,yC ] = distMinima( xCref,yC,xC1,yC1,xC2,yC2); figure(1); hold on plot([xA,xB,xC],[yA,yB,yC],'b-o'); title('Simulacin de las posiciones') xlabel('x (m)') ylabel('y (m)') axis([-0.6 1.6 -0.6 0.8]); grid %Se actualiza la refrencia a la ltima coordenada calculada xCref=xC; pause(0.01) hold off end

También podría gustarte