III. Kinematic Analysis and Synthesis - Pizza Cutter

Since the main mechanism in our design is a simple four bar linkage with no sliding joints, the kinematic analysis was fairly straightforward. The main focus of our analysis was point A shown in the drawings below. This is the point which the pizza blade attached to, and it is the point for which we had a desired path of motion. We determined the position, velocity, and acceleration of point A and plotted them in MATLAB.


Notable points of this analysis are the position and velocity plots of point A. In the position plot, it is evident that the output motion of the lambda mechanism contains the "D" shape that we desired. In the velocity plots, there is a period between 100 and 300 degrees where the angle of velocity is roughly 180 degrees. This also confirms that our desired motion was reached.

The MATLAB Code can be seen below, and is also attached in the appendix:

pizzacutter.m

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% set physical parameters of mechanism

a = 40; b = 100; c = 100; d = 80; e = 100;

t1 = 0; t2 = 0:1:360;

w2 = 2;

a2 = 0;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% first, do position analysis

t3 = []; t4 = [];

Ax = []; Ay = [];


for i = 1:length(t2)

    % find t3,t4 for all angles of t2

    temp = fourbarpos([d a b c],t1,t2(i),-1);

    t3(i) = temp(3);

    t4(i) = temp(4);


    % find coordinates of A

    Ax(i) = a*cosd(t2(i)) + (b+e)*cosd(t3(i));

    Ay(i) = a*sind(t2(i)) + (b+e)*sind(t3(i));

end


% plot the position of A

figure(1)

plot(Ax, Ay)

title('Position of A')

xlabel('X (mm)')

ylabel('Y (mm)')

ylim([0,200])


% use this graph to determine which values of t2 are part of the "flat" portion of the graph

% figure(2)

% plot(t2,Ay)

% title('Y Position of A wrt theta2')

% xlabel('theta2 (degrees')

% ylabel('Y Position of A (mm)')


% based on this graph, the flat part of Ay occurs in the range t2:~[80,280]

% now find the maximum change throughout this range

min = 1000;max = -1000; % initialize min and max to values that will be changed for sure

for i = 80:280

    if(Ay(i) > max)

        max = Ay(i);

    end

    if(Ay(i) < min)

        min = Ay(i);

    end

end

range = max-min;

disp(['Maximum deviation within flat region of A position: ' num2str(range) 'mm'])


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% now, do velocity analysis

w3 = []; w4 = [];

Vax = []; Vay = []; Vtot = []; Vang = [];


for i = 1:length(t2)

    % find w3 and w4 for constant w2 as t2,t3,t4 vary

    [w3(i), w4(i)] = angvel([a b c d],t2(i),t3(i),t4(i),w2);


    % now calculate velocity of A

    Vax(i) = -w2*a*sind(t2(i)) - w3(i)*(b+e)*sind(t3(i));

    Vay(i) = w2*a*cosd(t2(i)) + w3(i)*(b+e)*cosd(t3(i));

    Vtot(i) = sqrt(Vax(i)^2 + Vay(i)^2);

    Vang(i) = atan2d(Vay(i), Vax(i));

    % make Vang in range [0,360] for sake of (mostly) continuous plotting

    if(Vang(i) < 0)

        Vang(i) = Vang(i) + 360;

    end

end


% now plot magnitute and angle of V_a with respect to t2

figure(3)

subplot(2,1,1)

plot(t2,Vtot)

title('Magnitude of V_a wrt theta2')

xlabel('theta2 (degrees)')

ylabel('Magnitude of V_a (mm/s)')

subplot(2,1,2)

plot(t2,Vang)

title('Angle of V_a wrt theta2')

xlabel('theta2 (degrees)')

ylabel('Angle of V_a (degrees)')


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% finally acceleration analysis

a3 = []; a4 = [];

Aax = []; Aay = []; Atot = []; Aang = [];


for i = 1:length(t2)

    % find angular accelerations of links 3 and 4

    A = c*sind(t4(i));

       B = b*sind(t3(i));

    C = a*a2*sind(t2(i)) + a*w2^2*cosd(t2(i)) + b*w3(i)^2*cosd(t3(i)) - c*w4(i)^2*cosd(t4(i));

    D = c*cosd(t4(i));

    E = b*cosd(t3(i));

    F = a*a2*cosd(t2(i)) + a*w2^2*sind(t2(i)) - b*w3(i)^2*sind(t3(i)) + c*w4(i)^2*sind(t4(i));

    a3(i) = (C*D-A*F) / (A*E-B*D);

    a4(i) = (C*E-B*F) / (A*E-B*D);


    % now find acceleration of A

    Aax(i) = -a2*a*sind(t2(i)) - w2^2*a*cosd(t2(i)) - a3(i)*(b+e)*sind(t3(i)) - w3(i)^2*(b+e)*cosd(t3(i));

    Aay(i) = a2*a*cosd(t2(i)) - w2^2*a*sind(t2(i)) + a3(i)*(b+e)*cosd(t3(i)) - w3(i)^2*(b+e)*sind(t3(i));

    Atot(i) = sqrt(Aax(i)^2 + Aay(i)^2);

    Aang(i) = atan2d(Aay(i), Aax(i));

    % smooth out plot

    if(Aang(i) >= 170)

        Aang(i) = Aang(i) - 360;

    end

end


% now plot magnitute and angle of A_a with respect to t2

figure(4)

subplot(2,1,1)

plot(t2,Atot)

title('Magnitude of A_a wrt theta2')

xlabel('theta2 (degrees)')

ylabel('Magnitude of A_a (mm/s^2)')

subplot(2,1,2)

plot(t2,Aang)

title('Angle of A_a wrt theta2')

xlabel('theta2 (degrees)')

ylabel('Angle of A_a (degrees)')


fourbarpos.m

function q = fourbarpos(L,t1,t2,del)

    % define side lengths

    d = L(1);

    a = L(2);

    b = L(3);

    c = L(4);


    % define link ratios

    K1 = d/a;

    K2 = d/c;

    K3 = (a^2-b^2+c^2+d^2)/(2*a*c);

    K4 = d/b;

    K5 = (c^2-d^2-a^2-b^2)/(2*a*b);


    % define constants

    A = cosd(t2) - K1 - K2*cosd(t2) + K3;

    B = -2*sind(t2);

    C = K1 - (K2+1)*cosd(t2) + K3;

    D = cosd(t2) - K1 + K4*cosd(t2) + K5;

    E = -2*sind(t2);

    F = K1 + (K4-1)*cosd(t2) + K5;


    % solve for t3 and t4

    t3 = 2*atand((-E + del*sqrt(E^2 - 4*D*F))/(2*D));

    t4 = 2*atand((-B + del*sqrt(B^2 - 4*A*C))/(2*A));

    q = [t1 t2 t3 t4];


angvel.m

function [w3,w4] = angvel(L,t2,t3,t4,w2)

    w3 = w2*L(2)/L(3)*sind(t4-t2)/sind(t3-t4);

    w4 = w2*L(2)/L(4)*sind(t2-t3)/sind(t4-t3);