Four bar linkage

by Roberto Lot

> restart: libname := libname, "C:/libs/MBSymba.mla": with(MBSymba_r6):

Vector Loop

definition of he vectors

> AB := make_VECTOR(rotate('Z',q),a1,0,0): show(AB); crank

> BC := make_VECTOR(rotate('Z',theta2),a2,0,0): show(BC); coupler

> DC := make_VECTOR(rotate('Z',theta3),a3,0,0): show(DC); rocker

> AD := make_VECTOR(ground,a4,0,0): show(AD); frame

closing the vector loop: definition of a closure vector

> closure := AD + DC - BC - AB: show(closure);

this expression must be null

> phi := {comp_X(closure) , comp_Y(closure) };

find the solution with respect to the variables theta[2] andtheta[3] which depend on the generalized coordinate q(rotation of the crank)

> solve(phi, {theta2,theta3} ):

select one solution

> solution := allvalues(%):

extract the solutions

> theta2 := subs(solution,theta2);
















> theta3 := subs(solution,theta3);















Numerical Solution

numerical results for specified length [m]
a1 = crank length
a2 = coupler length
a3 = rocker length

> dataset := [a1=0.1, a2=0.4, a3=0.25, a4=0.30 ]; crank, coupler and rocker
num_sol := subs(dataset, solution):

> interface(displayprecision=3):

coupler angle against crank angle

> theta2 := subs(dataset, theta2);

> plot(theta2, q=0..2*Pi, labels=[q, "[rad]"], title="theta2 vs. q");




rocker angle against crank angle

> theta3 := subs(dataset, theta3);

> plot(theta3, q=0..2*Pi, labels=[q, "[rad]"], title="theta3 vs. q");



Animation of the Mechanism

Plot of the mechanism

> A := origin(ground):

> B := A + AB: #show(B);

> C := B + BC:# show(C);

> D2 := A + AD:# show(D2); Note: Maple reserves D for differential operator

> with(plots):with(plottools):

##Generate frames for the animation

> N:=10; ##number of steps
for n from 0 to N-1 do

> q := evalf(Pi*n/N);

crank AB

> crank ||n := plot( {subs(dataset,[ [comp_X(A)+0.01*cos(q),comp_Y(A)+0.01*sin(q)], [comp_X(B),comp_Y(B)] ])}, color=black, thickness=3);
coupler BC

> coupler ||n := plot( {subs(dataset,[ [comp_X(B),comp_Y(B)], [comp_X(C),comp_Y(C)] ])}, color=black, thickness=3);
rocker DC

> rocker ||n := plot( {subs(dataset,[ [comp_X(C),comp_Y(C)], [comp_X(D2),comp_Y(D2)] ])}, color=black, thickness=3):
revolute joints

> revj_A ||n := disk( subs(dataset,[comp_X(A), comp_Y(A)]), 0.01, color=yellow);

> revj_B ||n := disk( subs(dataset,[comp_X(B), comp_Y(B)]), 0.01, color=yellow);

> revj_C ||n := disk( subs(dataset,[comp_X(C), comp_Y(C)]), 0.01, color=yellow);

> revj_D ||n := disk( subs(dataset,[comp_X(D2),comp_Y(D2)]),0.01, color=yellow);
mechanism

> four_bar||n := display ( {crank||n, coupler||n, rocker||n
,revj_A||n, revj_B||n, revj_C||n, revj_D ||n
});

> end:

Display the animation

> display([ four_bar||(0..N-1)], insequence=true, scaling=constrained);

Comments are closed.