Appendix (MATLAB Code).
clear all
close all
%% inputs %%
a=1.5;
b=7+3/8;
c=4+3/8;
theta1=0;
g1=4+3/16;
g2y=1.5;
speed=1;
final=500;
%%for 1 cycle uncomment below%%
speed=pi/10;
final=200;
%% angular position
for i=1:final
omega2(i)=speed;
theta2(i)=speed*i/10;
theta3(i)=atan2(-g1*sin(theta1)+a*sin(theta2(i)),-g1*cos(theta1)+a*cos(theta2(i)));
b1(i)=(-g1*cos(theta1)+a*cos(theta2(i)))/cos(theta3(i));
b2(i)=b-b1(i);
theta4(i)=asin((-b2(i)*sin(theta3(i))+g2y)/c);
theta4(i)=pi-theta4(i);
g2x(i)=-c*cos(theta4(i))-b2(i)*cos(theta3(i));
end
%% angular velocity %%
for i=1:final
omega3(i)=(a*omega2(i)*cos(theta2(i))+tan(theta3(i))*a*omega2(i)*sin(theta2(i)))/...
(b1(i)*cos(theta3(i))+b1(i)*sin(theta3(i))*tan(theta3(i)));
b1dot(i)=(b1(i)*omega3(i)*sin(theta3(i))-a*omega2(i)*sin(theta2(i)))/cos(theta3(i));
b2dot(i)=-b1dot(i);
omega4(i)=(-b2(i)*omega3(i)*cos(theta3(i))-b2dot(i)*sin(theta3(i)))/(c*cos(theta4(i)));
g2xdot(i)=c*omega4(i)*cos(theta4(i))+b2(i)*omega3(i)*sin(theta3(i))+b2dot(i)*cos(theta3(i));
end
%% angular acceleration %%
for i=1:final
alpha2(i)=0;
alpha3(i)=(tan(theta3(i))*(-omega2(i)^2*a*cos(theta2(i))+omega3(i)^2*b1(i)*cos(theta3(i))...
+2*omega3(i)*sin(theta3(i)))+omega2(i)^2*a*sin(theta2(i))-omega3(i)^2*b1(i)*sin(theta3(i))...
+2*omega3(i)*b1dot(i)*cos(theta3(i)))/(b1(i)*cos(theta3(i))+tan(theta3(i))*b1(i)*sin(theta3(i)));
b1dot2(i)=(-omega2(i)^2*a*cos(theta2(i))+omega3(i)^2*b1(i)*cos(theta3(i))+alpha3(i)...
*b1(i)*sin(theta3(i))+2*omega3(i)*b1dot(i)*sin(theta3(i)))/cos(theta3(i));
b2dot2(i)=-b1dot(i);
alpha4(i)=(omega3(i)^2*b2(i)*sin(theta3(i))-b2dot2(i)*sin(theta3(i))+c*omega4(i)^2*sin(theta4(i))...
-b2(i)*alpha3(i)*cos(theta3(i))-2*b2dot(i)*omega3(i)*cos(theta3(i)))/(c*cos(theta4(i)));
gx2dot2(i)=c*alpha4(i)*sin(theta4(i))+omega3(i)^2*b2(i)*cos(theta3(i))-b2dot2(i)*cos(theta3(i))...
+c*omega4(i)^2*cos(theta4(i))+b2(i)*alpha3(i)*sin(theta3(i))+2*b2dot(i)*omega3(i)*cos(theta3(i));
% s_coriolis(i)=2*b2dot(i)*omega
g_coriolis(i)=2*omega3(i)*b1dot(i);
end
%% point kinematics %%
for i=1:final
%position
p1x(i)=0;
p1y(i)=0;
p2x(i)=a*cos(theta2(i));
p2y(i)=a*sin(theta2(i));
p3x(i)=g1;
p3y(i)=0;
p4x(i)=p3x(i)-b2(i)*cos(theta3(i));
p4y(i)=p3y(i)-b2(i)*sin(theta3(i));
p5x(i)=p4x(i)-c*cos(theta4(i));
p5y(i)=p4y(i)-c*sin(theta4(i));
%velocity
v1x(i)=0;
v1y(i)=0;
v2x(i)=-omega2(i)*a*sin(theta2(i));
v2y(i)=omega2(i)*a*cos(theta2(i));
v3x(i)=0;
v3y(i)=0;
v4x(i)=omega3(i)*b2(i)*sin(theta3(i))-b2dot(i)*cos(theta3(i));
v4y(i)=-omega3(i)*b2(i)*cos(theta3(i))-b2dot(i)*sin(theta3(i));
v5x(i)=omega4(i)*c*sin(theta4(i))+v4x(i);
v5y(i)=0;
%acceleration
a1x(i)=0;
a1y(i)=0;
a2x(i)=-alpha2(i)*a*sin(theta2(i))-omega2(i)^2*a*cos(theta2(i));
a2y(i)=alpha2(i)*a*cos(theta2(i))-omega2(i)^2*a*sin(theta2(i));
a3x(i)=0;
a3y(i)=0;
a4x(i)=alpha3(i)*b2(i)*sin(theta3(i))+omega3(i)^2*b2(i)*cos(theta3(i))...
+2*omega3(i)*b2dot(i)*sin(theta3(i))-b2dot2(i)*cos(theta3(i));
a4y(i)=-alpha3(i)*b2(i)*cos(theta3(i))+omega3(i)^2*b2(i)*sin(theta3(i))...
-2*omega3(i)*b2dot(i)*cos(theta3(i))-b2dot2(i)*sin(theta3(i));
a5x(i)=a4x(i)+alpha4(i)*c*sin(theta4(i))+omega4(i)^2*c*cos(theta4(i));
a5y(i)=0;
end
%% animation %%
axis(gca,'equal')
axis([-3 15 -3 10]);
P1=[0 0];
title('Slotted 5 bar with slider')
for i=1:final
theta2a=speed*i/10;
theta3a=theta3(i);
theta4a=theta4(i);
b1a=b1(i);
b2a=b2(i);
g2xa=g2x(i);
P2=[a*cos(theta2a) a*sin(theta2a)];
P3=[P2(1)-b1a*cos(theta3a) P2(2)-b1a*sin(theta3a)];
P4=[P3(1)-b2a*cos(theta3a) P3(2)-b2a*sin(theta3a)];
P5=[P4(1)-c*cos(theta4a) P4(2)-c*sin(theta4a)];
P6=[5 P5(2)];
P7=[12 P5(2)];
if i>1
if g2x(i)>g2x(i-1)
direction=1;
else
direction=-1;
end
else
direction=1;
end
P8=[P5(1)+direction*2 P5(2)];
if i>1
if b1(i)>b1(i-1)
direction2=1;
else
direction2=-1;
end
else
direction2=1;
end
P9=[P3(1)+abs(g_coriolis(i))*cos(theta3a+direction2*pi/2), P3(2)+abs(g_coriolis(i))*sin(theta3a+direction2*pi/2)];
crank=line([P1(1),P2(1)],[P1(2),P2(2)]);
slot1=line([P2(1) P3(1)],[P2(2),P3(2)]);
slot2=line([P3(1) P4(1)],[P3(2),P4(2)]);
coupler=line([P4(1) P5(1)],[P4(2),P5(2)]);
% vertical=line([P6(1) P7(1)],[P6(2) P7(2)]);
% slider_coriolis=line([P5(1) P8(1)],[P5(2) P8(2)]);
ground_coriolis=line([P3(1) P9(1)],[P3(2) P9(2)]);
P1_circ=viscircles(P1,0.1);
P2_circ=viscircles(P2,0.1);
P3_circ=viscircles(P3,0.1);
P4_circ=viscircles(P4,0.1);
P5_circ=viscircles(P5,0.1);
pause(.001);
delete(crank)
delete(slot1)
delete(slot2)
delete(coupler)
delete(P1_circ)
delete(P2_circ)
delete(P3_circ)
delete(P4_circ)
delete(P5_circ)
delete(ground_coriolis)
end
%% Plots for points %%
figure (2)
plot(theta2,v1x)
hold on
plot(theta2,v2x)
hold on
plot(theta2,v3x)
hold on
plot(theta2,v4x)
hold on
plot(theta2,v5x)
grid on
legend('Point 1', 'Point 2', 'Point 3', 'Point 4', 'Point 5');
title('Velocity in x direction')
ylabel('Velocity (in/s)')
xlabel('Theta2 (rad)')
figure (3)
plot(theta2,v1y)
hold on
plot(theta2,v2y)
hold on
plot(theta2,v3y)
hold on
plot(theta2,v4y)
hold on
grid on
plot(theta2,v5y)
legend('Point 1', 'Point 2', 'Point 3', 'Point 4', 'Point 5');
title('Velocity in y direction')
xlabel('Theta2 (rad)')
ylabel('Velocity (in/s)')
figure (4)
plot(theta2,a1x)
hold on
plot(theta2,a2x)
hold on
plot(theta2,a3x)
hold on
plot(theta2,a4x)
hold on
grid on
plot(theta2,a5x)
legend('Point 1', 'Point 2', 'Point 3', 'Point 4', 'Point 5');
title('Acceleration in x direction')
xlabel('Theta2 (rad)')
ylabel('Acceleration (in/s^2)')
figure (5)
plot(theta2,a1y)
hold on
plot(theta2,a2y)
hold on
plot(theta2,a3y)
hold on
plot(theta2,a4y)
hold on
grid on
plot(theta2,a5y)
legend('Point 1', 'Point 2', 'Point 3', 'Point 4', 'Point 5');
title('Acceleration in y direction')
xlabel('Theta2 (rad)')
ylabel('Acceleration (in/s^2)')
figure (6)
plot(theta2,p1x)
hold on
plot(theta2,p2x)
hold on
plot(theta2,p3x)
hold on
plot(theta2,p4x)
hold on
grid on
plot(theta2,p5x)
legend('Point 1', 'Point 2', 'Point 3', 'Point 4', 'Point 5');
title('Position along x axis')
xlabel('Theta2 (rad)')
ylabel('Position (in)')
figure(7)
plot(theta2,p1y)
hold on
plot(theta2,p2y)
hold on
plot(theta2,p3y)
hold on
plot(theta2,p4y)
hold on
grid on
plot(theta2,p5y)
legend('Point 1', 'Point 2', 'Point 3', 'Point 4', 'Point 5');
title('Position along y axis')
xlabel('Theta2 (rad)')
ylabel('Position (in)')
%% plots for output links %%
figure(8)
plot(theta2,theta3)
hold on
plot(theta2,theta4)
grid on
legend('Slotted Link','Coupler')
title('Angular position of linkages')
xlabel('Theta2 (rad)')
ylabel('Angular position (rad)')
figure(9)
plot(theta2,omega3)
hold on
plot(theta2,omega4)
grid on
legend('Slotted Link','Coupler')
title('Angular Velocity of linkages')
xlabel('Theta2 (rad)')
ylabel('Angular velocity (rad/s)')
figure(10)
plot(theta2,alpha3)
hold on
plot(theta2,alpha4)
grid on
legend('Slotted Link','Coupler')
title('Angular acceleration of linkages')
xlabel('Theta2 (rad)')
ylabel('Angular acceleration (rad/s^2)')