Programs

BACK

A. Motion Analysis

'{$STAMP BS2}

'{$PBASIC 2.0}

'MOTION ANALYSIS PROGRAM

'DECLARATIONS

Detect1 VAR Bit

Detect2 VAR Bit

Detect3 VAR Bit

detect4 VAR Bit

b VAR Byte

tb1 VAR Byte

tb2 VAR Byte

c VAR Byte

c1 VAR Byte

c2 VAR Byte

a VAR Byte

a1 VAR Byte

a2 VAR Byte

r7 VAR Byte

Detect1 = IN1

x1 VAR Byte

x2 VAR Byte

r1 VAR Byte

r2 VAR Byte

r3 VAR Byte

r4 VAR Byte

r5 VAR Byte

r6 VAR Byte

y VAR Byte

vel VAR Byte

v2 VAR Byte

vel2 VAR Byte

v22 VAR Byte

vel3 VAR Byte

v32 VAR Byte

'MAIN PROGRAM

Start: ' Check Gate 1 for car

LOOP :

Gate1:

 

Detect1 = IN5

IF Detect1 = 0 THEN Count1 'WAITS FOR CAR TO ENTER GATE 1

PAUSE 20

GOTO LOOP

 

'Timing loop

COUNT1: ' TIME BETWEEN GATES 1 AND 2

 

FOR y = 1 TO 65000 ' COUNTS TIME BETWEEN GATES

Detect2 = IN8

IF Detect2 = 0 THEN Count2

PAUSE 10

y= y+1

NEXT

Count2: ' TIME BETWEEN GATES 2 AND 3

FOR b = 1 TO 65000

Detect3 = IN15

IF Detect3 = 0 THEN Count3

PAUSE 10

b= b+1

NEXT

Count3: ' TIME BETWEEN GATES 3 AND 4

FOR c = 1 TO 65000

Detect4 = IN1

IF Detect4 = 0 THEN CalcTime

PAUSE 10

c= c+1

NEXT

CalcTime: ' CALCULATES THREE TIMES; USING MODULUS TO GET THREE DIGITS

x1=y/145

r1=y//145

x2=100*r1/145

 

tb1=b/145

r2=b//145

tb2=100*r2/145

c1=y/145

r3=y//145

c2=100*r3/145

 

 

CalcSpeed: ' CALCULATES THREE VELOCITIES; USING MODULUS TO GET THREE DIGITS

vel = 19*145/y

r4 = 19*145//y

v2 = 10*r3/y

vel2 = 19*145/b

r5 = 19*145//b

v22 = 10*r5/b

vel3 = 16*145/c

r6 = 16*145//c

v32 = 10*r6/c

CalcAcc:

a = ((232*y)-(277*c))/b*c*y

r7 = ((232*y)-(277*c))//b*c*y

a1 = 10*r7/b*c*y

a2 = 10*a

'DISPLAYS VALUES FOR EACH TIME AROUND ROADWAY

DEBUG "Counts1= ", DEC y, " counts2 = ", DEC b," Counts3=", DEC c,CR

DEBUG "D1 = 19 cm", " T1 = ", DEC x1,".", DEC x2, "sec", CR

DEBUG "D2 = 19 cm", " T2 = ", DEC tb1,".", DEC tb2, "sec", CR

DEBUG "D3 = 16 cm", " T3 = ", DEC c1,".", DEC c2, "sec", CR

DEBUG "V1 = ", DEC vel, ".", DEC v2, "cm/s" ,CR

DEBUG "v2 = ",DEC vel2, ".", DEC v22, "cm/s", CR

DEBUG "v3 = ",DEC vel3, ".", DEC v32, "cm/s", CR,CR

DEBUG "acc = ", DEC a2, ".", DEC a1, "cm/s/s",CR,CR

'PAUSE 2000

GOTO LOOP

END

B. Smart Road - speed control program

 

 

'{$STAMP BS2}

'{$PBASIC 2.5}

'SMART ROAD PROGRAM

'DECLARATIONS

Detect1 VAR Bit

Detect2 VAR Bit

 

 

Detect1 = IN1

x1 VAR Word

x2 VAR Word

r1 VAR Byte

r2 VAR Byte

r3 VAR Byte

x3 VAR Word

y VAR Word

vel VAR Word

v2 VAR Word

w VAR Nib

z VAR Word

speed VAR Word

w = 0

z = 0

Start:

iter VAR Byte

 

DEBUG "please enter the speed.",CR 'ASKS FOR INPUT SPEED

DEBUGIN DEC speed

DEBUG ? speed

PULSOUT 12, speed

LOOP1 :

 

 

Gate1:

 

Detect1 = IN8

IF Detect1 = 0 THEN Count1 ' Check Gate 1 for car

PAUSE 20

GOTO LOOP1

 

'Timing loop

COUNT1:

 

FOR y = 1 TO 65000 'TIME FOR CAR TO GO FROM GATE 1 TO 2

Detect2 = IN1

IF Detect2 = 0 THEN CalcTime

PAUSE 10

y= y+1

NEXT

CalcTime: ' CALCULATES TIME BETWEEN GATES 1 AND 2

x1=y/145

r1=y//145

x2=100*r1/145

x3=100*r1//145

CalcSpeed: ' CALCULATES VELOCITY BETWEEN GATES 1 AND 2

vel = 35*145/y

r3 = 5075//y

v2 = 10*r3/y

'DISPLAYS VALUES

DEBUG "Counts = ", DEC y, CR

DEBUG "Distance = 35 cm", " Time = ", DEC x1,".", DEC x2, "sec", CR

DEBUG "Velocity = ", DEC vel, ".", DEC v2, "cm/s" ,CR,CR

IF y < 38 THEN decrease 'CHECKS TO SEE IF SPEED IS ABOVE LIMIT

z = z + 1

IF z = 10 THEN Start

GOTO LOOP1

decrease: 'LOWERS SPEED

w = w + 1

PULSOUT 12, speed - (w*20) ' PULSES SERVO MOTOR TO REDUCE SPEED

PAUSE 1000

GOTO LOOP1

END

C. Photogate Tester

'{$STAMP BS2}
'{$PBASIC 2.0}


'Declarations


IR_detect1 VAR Bit
IR_detect2 VAR Bit
IR_detect3 VAR Bit
IR_detect4 VAR Bit
x1 VAR Byte


LOOP:
PAUSE 50
 

Gate1:
IR_detect1 = IN1 'check status of gate 1
PAUSE 20

Gate2:
IR_detect2 = IN2 'check status of gate 2
PAUSE 20

Gate3:
IR_detect3 = IN3 'check status of gate 3
PAUSE 20

Gate4:
IR_detect4 = IN4 'check status of gate 4

DEBUG HOME, "Gate1 ", BIN IR_Detect1, " Gate2 ", BIN IR_Detect2, " Gate3 ", BIN IR_Detect3," Gate4 ", BIN IR_Detect4
GOTO LOOP

D. Set Speed

'{$STAMP BS2}
'{$PBASIC 2.5}
'Declarations
x VAR Word
OUTPUT 0 'sets pin 0 low

FOR x = 1 TO 100
PULSOUT 0, 800 'pulses servomotor


PAUSE 10
NEXT
END