Mecanismo Biela Manivela
Mecanismo Biela Manivela
Mecanismo Biela Manivela
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)
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
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
ANEXOS
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
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