Question

- Animate 4-bar Greshof’s mechanisms crank-rocker , double rocker , double crank - matlab coding

- Animate 4-bar Greshof’s mechanisms crank-rocker , double rocker , double crank
- matlab coding
0 0
Add a comment Improve this question Transcribed image text
Answer #1

Note- Keep pressing on the ENTER key to visualize animation.

%% Plot Any Four Bar Linkage

clc;clear;close all

X = [150 110 100 90 40 120];

% X = [180 100 185 220 55 0];

% X = [r1 r2 r3 r4 Cx Cy ];

% r1: Crank (make sure its always the smallest, also r3+r4>=r1+r2)

% r2: Coupler

% r3: Lever (Rocker)

% r4: Frame

% Cu: x coordinate for coupler point wrt crank-coupler point

% Cv: y coordinate for coupler point wrt crank-coupler point

cycles = 2;% number of crank rotations

INCREMENTS = 100;% divide a rotation into this number

%% check the geometry

P = X(1:4);

check = P;

[L locL] = max(check);

check(locL) = [];

[S locS] = min(check);

check(locS) = [];

R = check;

flag = 0;

if S==X(4) & sum(check)>(L+S)

TITLE = 'This is a Double-Crank Mechanism';

elseif (S==X(1)|S==X(3)) & sum(check)>(L+S)

TITLE = 'This is a Rocker-Crank Mechanism';

elseif S==X(2) & sum(check)>(L+S)

TITLE = 'This is a Double-Rocker Mechanism';

flag = 1;

elseif sum(check)==(L+S)

TITLE = 'This is a Change Point Mechanism';

elseif sum(check)<(L+S)

flag = 1;

TITLE = 'This is a Double-Rocker Mechanism';

end

%%

TH1 = linspace(0,2*pi,INCREMENTS);% Input angle theta1

dig = 10;% divide links into this number

R1 = X(1); r1 = linspace(0,R1,dig);

R2 = X(2); r2 = linspace(0,R2,dig);

R3 = X(3); r3 = linspace(0,R3,dig);

R4 = X(4); r4 = linspace(0,R4,dig);

Cu = X(5); cu = linspace(0,Cu,dig);

Cv = X(6); cv = linspace(0,Cv,dig);

%% check valid region

D = sqrt(R1^2 + R4^2 - 2*R1*R4*cos(TH1));% diagonal distance between

% crank-coupler point and rocker-frame point

TH5 = acos((R3^2+D.^2-R2^2)./(2*R3*D));% angle between rocker and diagonal

% link (d)

IMAG = imag(TH5);

[VALUES LOCATION] = find(IMAG==0);

%%

IMAG = imag(TH5);

LOCATION = IMAG==0;

LOCATION1 = find(IMAG==0);

LOC = LOCATION;

n = length(LOCATION);

n1 = length(LOCATION1);

Check = 0;

direction = 1;

for i=1:n-1

if LOC(i+1)~=LOC(i)

if Check==0

direction = LOC(i);

end

Check = Check+1;

end

end

%%

Rotate = 0;

if isempty(LOCATION1)

error('This is not a valid linkage');

elseif direction==0 & Check==2

LOC1 = find(LOCATION==1);

th1 = [TH1(LOC1) TH1(fliplr(LOC1))];

elseif n1==n

th1 = TH1;

elseif direction==1 & Check==2

Rotate = 1;

loc1 = LOC(1:end-1);

loc2 = LOC(2:end);

[Value deadpoint] = find((loc2-loc1)~=0);

deadp = deadpoint + [0 1];

LOC2 = [deadp(2):n 1:deadp(1)];

th1 = [TH1(LOC2) TH1(fliplr(LOC2))];

elseif Check==4

Rotate = 1;

loc1 = LOC(1:end-1);

loc2 = LOC(2:end);

[Value deadpoint] = find((loc2-loc1)~=0);

deadp1 = deadpoint(1:2) + [1 0];

deadp2 = deadpoint(3:4) + [1 0];

fprintf('This mechanism has two disconnected upper and lower regions\n');

DIREC = 1;

DIREC = input('Select [1] for upper, [2] for lower Default = [1] ');

if DIREC == 1

LOC3 = [deadp1(1):deadp1(2)];

else

LOC3 = [deadp2(1):deadp2(2)];

end

th1 = [TH1(LOC3) TH1(fliplr(LOC3))];

end

d = sqrt(R1^2 + R4^2 - 2*R1*R4*cos(th1));

th5 = acos((R3^2+d.^2-R2^2)./(2*R3*d));% angle between rocker and

%%

if Rotate == 1

d = sqrt(R1^2 + R4^2 - 2*R1*R4*cos(th1));

th5 = acos((R3^2+d.^2-R2^2)./(2*R3*d));% angle between rocker and diagonal link (d)

th5 = [th5(1:end/2) -th5(end/2+1:end)];

end

Ax = R1*cos(th1);% x coordinate for the crank-coupler point

Ay = R1*sin(th1);% y coordinate for the crank-coupler point

a = R4 - R1*cos(th1);% horizontal distance between rocker-frame point and

% projection of crank-coupler point

b = Ay;% vertical projection of crank-coupler point

th6 = atan2(b,a);% angle between frame and diagonal link (d)

th4 = pi - th5 - th6;% angle the rocker makes with horizon

Bx = R3*cos(th4) + R4;% horizontal distance between frame-crank point and

% projection of coupler-rocker point

By = R3*sin(th4);% vertical projection of coupler-rocker point

th2 = atan2((By-Ay),(Bx-Ax));% angle the coupler makes with the horizon

Cx = Ax + Cu*cos(th2) - Cv*sin(th2);% horizontal projection of coupler

% point wrt coupler

Cy = Ay + Cu*sin(th2) + Cv*cos(th2);% vertical projection of coupler

% point wrt coupler

% calculate display (figure) limits

xmin = 1.2*min([min(Cx) -R1 -R3]);

xmax = 1.2*max([max(Cx) R4+max([R3 max(R3*cos(th4))])]);

ymin = 1.2*min([min(Cy) -R1 -R3]);

ymax = 1.2*max([max(Cy) max([R1 R3 R3+Cv])]);

%%

increments = length(th1);

for i=1:increments

link1x(i,:) = r1*cos(th1(i));

link1y(i,:) = r1*sin(th1(i));

link2x(i,:) = linspace(Ax(i),Bx(i),dig);

link2y(i,:) = linspace(Ay(i),By(i),dig);

link3x(i,:) = R4 + r3*cos(th4(i));

link3y(i,:) = r3*sin(th4(i));

Couplx1(i,:) = linspace(Ax(i),Cx(i),dig);

Couply1(i,:) = linspace(Ay(i),Cy(i),dig);

Couplx2(i,:) = linspace(Cx(i),Bx(i),dig);

Couply2(i,:) = linspace(Cy(i),By(i),dig);

end

for k=1:cycles

for i = 1:increments

plot(link1x(i,:),link1y(i,:),'b',link2x(i,:),link2y(i,:),'r',...

link3x(i,:),link3y(i,:),'k',Couplx1(i,:),Couply1(i,:),'r',...

Couplx2(i,:),Couply2(i,:),'r')

hold on

plot([link2x(i,:) ;Couplx1(i,:)],[link2y(i,:); Couply1(i,:)],'g','linewidth',2)

plot([link2x(i,:) ;Couplx2(i,:)],[link2y(i,:); Couply2(i,:)],'g','linewidth',2)

plot(0,0,'sk',R4,0,'sk','MarkerSize',12)

plot(0,0,'ok',R4,0,'ok')

plot(Couplx1(i,end),Couply1(i,end),'ok','MarkerSize',6,...

'MarkerFaceColor','g')

axis([xmin xmax ymin ymax])

if Rotate == 1 & i<=increments/2

plot(Couplx1(1:i,end),Couply1(1:i,end),'--g','linewidth',2)

elseif Rotate == 1

plot(Couplx1(1:increments/2,end),Couply1(1:increments/2,end),'--g','linewidth',2)

plot(Couplx1(increments/2:i,end),Couply1(increments/2:i,end),'--r','linewidth',2)

else

plot(Couplx1(1:i,end),Couply1(1:i,end),'--g','linewidth',2)

end

clc

title(['\bf',TITLE])

fprintf('Th1 = %5.2f, th5 = %5.2f, D = %7.2f\n',th1(i),th5(i),d(i))

YY = input('Hit Enter ');

hold off

end

end

if Rotate==1

hold on

plot(Couplx1([1 end/2],end),Couply1([1 end/2],end),'hr','MarkerSize',10)

end

Add a comment
Know the answer?
Add Answer to:
- Animate 4-bar Greshof’s mechanisms crank-rocker , double rocker , double crank - matlab coding
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT