Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 22

Ping Pong Bong

Marcus Gibson
Christopher Thomas
MECH208
Final Project Paper
March 10, 2008
Table of Contents

1 Synopsis............................................................................................................................4
2 Design Description............................................................................................................4
2.1 Tube............................................................................................................................6
2.2 Sensor.........................................................................................................................7
2.2.1 Photo...................................................................................................................7
2.2.2 Specification Sheet..............................................................................................8
2.2.3 Calibration...........................................................................................................9
2.2.4 Dynamics............................................................................................................9
2.3 Actuator....................................................................................................................11
2.3.1 Photo.................................................................................................................11
2.3.2 Specification Sheet............................................................................................11
2.3.3 Calibration.........................................................................................................11
2.3.4 Dynamics..........................................................................................................11
2.4 Microcontroller........................................................................................................12
2.5 Motor Driver............................................................................................................12
2.5.1 Photo.................................................................................................................12
2.5.2 Specification Sheet............................................................................................13
2.6 Software Design.......................................................................................................13
2.6.1 Software Flowchart...........................................................................................13
2.7 Overall Schematic....................................................................................................14
2.8 Overall Configuration Sketch or Labeled Photo......................................................14
3 Control System Design...................................................................................................17
3.1 Simulation................................................................................................................17
A. Software Code..............................................................................................................17
Table of Figures and Tables

Figure 1 Project Configuration Sketch................................................................................4


Figure 2 Project Configuration Picture................................................................................5
Figure 3 Project Configuration Tube Close-up Picture........................................................5
Figure 4 IR Sensor Front Photo...........................................................................................7
Figure 5 IR Sensor Back Photo............................................................................................7
Figure 6 Tube and User IR Sensors.....................................................................................8
Figure 7 IR Sensor Specification Response.........................................................................8
Figure 8 IR Sensor Responses.............................................................................................9
Figure 9 Tube Sensor Differencing....................................................................................10
Figure 10 User Sensor Differencing..................................................................................10
Figure 11 Fan Photo...........................................................................................................11
Figure 12 Motor Performance............................................................................................11
Figure 13 Motor Driver Photo...........................................................................................13
Figure 14 Software Flow Diagram....................................................................................14
Figure 15 Configuration Sketch.........................................................................................15
Figure 16 Electronics Picture.............................................................................................15
Figure 17 Ping Pong Bong Simulation..............................................................................17

Table 1 Project Equipment List ..........................................................................................6


Table 2 Microcontroller Data.............................................................................................12
1 Synopsis
This paper describes the details of the Ping Pong Bong project sufficient to build your
own. In addition it provides the actual response of the system for both the sensors and
actuators. Performance of the system is as follows:
• Ping Pong Ball control within one inch maximum deviation within two
seconds
• Capable of control on an uneven plane/platform

2 Design Description
The goal of the Ping Pong Bong project is to be able to control the position of a ping
pong ball in a tube relative to the position determined by a user. An original rendition of
the setup can be seen in Figure 1 . Initially one IR sensor was chosen for both inside and
outside the tube; rejected due to its non-linear output. A sonar sensor was the next
feasible choice because of its very linear range; unfortunately sensor was incoherent. The
signal provided by the sensor to by reflected and then sensed was incoherent. The signal
diverged to much causing reflections off the tube resulting in a noisy signal. Additionally,
the sonar sensor was relatively large in size potentially impacting the flow of air from the
fans.

Figure 1 Project Configuration Sketch

The final decision was to use an IR sensor on both ends of the tube, by differencing the
signal we were able to obtain an output that was linear enough to provide adequate
control of the ping pong position within the tube. To simplify our situation we used
another pair of the same IR sensors outside of the tube to determine the desired location
of the ball.

A sketch of the final setup can be seen in Figure 1. and are pictures of the project
configuration. The list of components used to create the Ping Pong Bong can be found in
Table 1.
Figure 2 Project Configuration Picture

Figure 3 Project Configuration Tube Close-up Picture


Table 1 Project Equipment List
Item Quantity Description
Florescent Lamp Protector
Tube 1 ~ 40mm diameter
Sharp GP2 Y0A21YK
Sensor 4 IR Sensor
Link Depot Motor
Actuator 2 FAN-5015-B
Parallax
Microcontroller 1 BS2px
Motor Driver 1 Dual Serial Motor Controller
12V Regulator 1 Standard
Matrix Orbital
LCD Display 1 4x20
Standard
Ping Pong Ball 1 ~ 40mm diameter

2.1 Tube
The tube is a plastic cylinder approximately 30 inches or 76 centimeters in length and
1.57 inches or 4 cm in diameter. With the sensors installed the range of the Ping Pong
Ball within the tube is 29 inches.
2.2 Sensor
The Sharp distance sensor is a popular choice for many projects that require accurate
distance measurements. This IR sensor is more economical than sonar rangefinders, yet it
provides much better performance than other IR alternatives. Interfacing to most
microcontrollers is straightforward: the single analog output can be connected to an
analog-to-digital converter for taking distance measurements, or the output can be
connected to a comparator for threshold detection. The detection range is approximately
10 cm to 80 cm (4" to 32"); the distance-to-output voltage graph is shown below in
Figure 7. The sensor uses a 3-pin JST connector; power, ground, and the output signal.

2.2.1 Photo
The following photos provide the front and rear photos of the IR Sensor, Figure 4 and
Figure 5 respectively. Figure 6 provides a vantage point of one tube sensor and one user
sensor, refer back to Figure 1 for test setup sensor locations.

Figure 4 IR Sensor Front Photo

Figure 5 IR Sensor Back Photo


Figure 6 Tube and User IR Sensors

2.2.2 Specification Sheet


Figure 7 is the IR sensor specification response provided by the manufacturer.

Figure 7 IR Sensor Specification Response


Feature summary:

• 4.5 V to 5.5 V operating voltage


• 30 mA average current consumption
• 10 cm to 80 cm range (4" to 32")
• 1.9 V output voltage change over distance range

2.2.3 Calibration
Calibration of the sensor within our setup is not required. The sensors are differenced
electronically through software and are discussed further in 2.2.4. This assumes the
sensors are identical; if not, there is minimal difference in the sensor that does not
sufficiently impact the configuration.

2.2.4 Dynamics
Figure 8 provides the actual response of the IR Sensors in the system. There is a
noticeable difference between the tube sensors and the user sensors from four to ten
inches and has been determined to be because of the tube. Comparison of the user sensors
to the IR Sensor specification response shown in Figure 7 confirms the “free space”
response of the user sensors matches.

3.50

3.00
Sensor 1 Output
2.50 [inside tube]
Output (Volts)

Sensor 2 Output
2.00
[inside tube]
Sensor 3 Output
1.50
[outside tube]
1.00 Sensor 4 Output
[outside tube]
0.50

0.00
0 5 10 15 20 25 30
Distance (Inches)

Figure 8 IR Sensor Responses

A linear range of sensing was obtained by differencing the pair of IR Sensors. The linear
range of the tube sensors and user sensors can be seen in Figure 9 and Figure 10
respectively. The tube sensors provide a linear range of 21 inches with a maximum
deviation of 0.76 inches. The user sensors provide a linear range of 20 inches with a
maximum deviation of 0.88 inches. The difference in the linear region output can once
again be attributed to the tube. To improve the user sensors two concepts were used. The
first was inset the user sensors by 1 inch. The second was to use an object to be sensed by
the user that was equivalent in size or larger than the ping pong ball, hence the Pillsbury
Dough Boy seen in .

4.00

3.00

2.00
Output (Volts)

1.00 Sensor 1 Voltage


Sensor 2 Voltage
0.00
Difference
0 5 10 15 20 25 30
-1.00 Linear (Difference)

-2.00

-3.00 y = -0.2323x + 3.5335


-4.00
Distance (Inches)

Figure 9 Tube Sensor Differencing

4.00

3.00

2.00
Output (Volts)

1.00 Sensor 1 Output


Sensor 2 Output
0.00
Difference
0 5 10 15 20 25 30
-1.00 Linear (Difference)

-2.00

-3.00
y = -0.2487x + 3.5701
-4.00
Distance (Inches)

Figure 10 User Sensor Differencing


2.3 Actuator
The Ping Pong Bong setup uses two fans of the same make and model for actuators at
each end of the tube.

2.3.1 Photo
Figure 11 is a photo of the fan used to actuate the ping pong ball within the tube. There
are three wires; ground (black), power (red), and tachometer (yellow).

Figure 11 Fan Photo

2.3.2 Specification Sheet


• Link Depot Motor FAN-5015-B
o Size:50x50x15mm
o Current: 0.16A
o Air Flow: 15CFM
o Speed: 5200RPM
o Power: 1.92W
o Bearing: One Ball Bearing
o Voltage: 12VDC

2.3.3 Calibration
The fans were calibrated by providing each with an equivalent PWM or current and
observing the ping pong ball movement. Equivalent performance of the fans would be
identified by no ball movement; a PWM bias of 8 was necessary to achieve equal output
of the fans. Leads to the fans were switched to ensure that the calibration was needed
because of the fans and not because of the motor driver, circuitry, or software.

2.3.4 Dynamics
TBD

Figure 12 Motor Performance


2.4 Microcontroller
Table 2 provides details for the performance capabilities of the microcontroller used for
the project.
Table 2 Microcontroller Data
Product BS2px
0º - 70º C
Environment (32º - 158º F) **
Microcontroller Ubicom SX48AC
Processor Speed 32 MHz Turbo
Program Execution Speed ~19,000 instructions/sec.
38 Bytes
RAM Size (12 I/O, 26 Variable)
Scratch PadRam 128 Bytes
8 x 2K Bytes,
EEPROM (Program) Size ~4,000 inst.
Number of I/O Pins 16 + 2 Dedicated Serial
Voltage Requirements 5 - 12 vdc
55 mA Run,
Current Draw@ 5 volts 450 µA Sleep
Source/Sink Current per I/O 30 mA / 30 mA
Source/Sink 60 mA / 60 mA
Current per unit per 8 I/O pins
PBASIC Commands* 63
PC Interface Serial (19200 baud)
Windows Text Editor Stampw.exe
Version (v2.2 and up)
* PBASIC Command count totals include PBASIC 2.5 commands on all BS2
models.

2.5 Motor Driver


The Dual Serial Motor Controller or Motor Driver is a PWB that primarily consists of an
H-Bridge and a PIC. As its name implies it utilizes serial communication to receive
information from the main microcontroller and drive the motors.

2.5.1 Photo
Figure 13 is a photo of the top profile of the motor driver.
Figure 13 Motor Driver Photo

2.5.2 Specification Sheet


The following motor driver details are provided by the manufacturer.
o Speeds: 127 forward, 127 backwards, and brake
o Maximum current: 1A each for two motors

2.6 Software Design


PID control was chosen to control the position of the ball. Refer to Appendix A Software
Code for the Ping Pong Bong control software.

Need Marcus to add P/I/D details

2.6.1 Software Flowchart


The software flowchart is provided in Figure 14. A unique feature of the Ping Pong Bong
project was the addition of the “kick out” routines. The tube sensors provide a linear
range of ~21 inches in tube that is ~29 inches leaving a “dead zone” of ~2 inches on each
side, considering the ping pong ball is ~2 inches in diameter. When the ball enters the
“dead zone” it is pushed up against the sensor because the software interprets the
difference in the sensor voltage to be the same as the ball being located at the far end of
the tube at the edge of the opposite “dead zone”, reference Figure 9. In order to correct
this misinterpretation the software uses if then statements to identify the special case
when both sensors are reading low values. If this instance occurs then system will
provide full force in the opposite direction for 220 ms and clear the PID integral term to
prevent integral windup.
Initialize

Read Sensors

Test
Stuck Kick Out of Left
Left

Test Stuck
Kick Out of Right
Right

Calculate Desired &


Actual Positions

Calculate Drive (PID)

Set Motor Speeds

Figure 14 Software Flow Diagram

2.7 Overall Schematic

2.8 Overall Configuration Sketch or Labeled Photo


Figure 15 Configuration Sketch

Figure 16 Electronics Picture


3 Control System Design

3.1 Simulation

Figure 17 Ping Pong Bong Simulation

A. Software Code
' {$STAMP BS2px}
' {$PBASIC 2.5}

' IO
' desired sensor left
DSL_CS PIN 7 ' 0831 chip select active low from BS2
DSL_CLK PIN 5 ' Clock pulse from BS2 to 0831
DSL_Dout PIN 6 ' Serial data output from 0831 to BS2
' desired sensor right
DSR_CS PIN 3 ' 0831 chip select active low from BS2
DSR_CLK PIN 1 ' Clock pulse from BS2 to 0831
DSR_Dout PIN 2 ' Serial data output from 0831 to BS2
' actual sensor right
ASR_CS PIN 11 ' 0831 chip select active low from BS2
ASR_CLK PIN 9 ' Clock pulse from BS2 to 0831
ASR_Dout PIN 10 ' Serial data output from 0831 to BS2
' actual sensor left
ASL_CS PIN 15 ' 0831 chip select active low from BS2
ASL_CLK PIN 13 ' Clock pulse from BS2 to 0831
ASL_Dout PIN 14 ' Serial data output from 0831 to BS2
MOTOR PIN 8 ' Motor controller serial input
MOTOR_RESET PIN 4 ' Motor controller On/Off line

' CONSTANTS
MOTOR_BAUD CON 396 'Set Baud to 9600 (SPECIFIC TO BS2px)
' gains
Kp CON 60 ' in hundredths (100=gain of 1)
Ki CON 1 ' in hundredths (100=gain of 1)
Kd CON 250 ' in tenths (10=gain of 1)
' biases
MBias CON -8 ' motor bias (since they don't exactly match)
DSBias CON -4 ' input sensor bias
ASBias CON 4 ' actual sensor bias
Ti CON 5 ' Integral Reset time (how often do we add Err to the Ei term)
' average filtering
AAveCount CON 3 'size of average for position filtering (smoothing) for
actual sensors
DAveCount CON 3 'size of average for position filtering (smoothing) for
desired sensors

' VARIABLES
DSLData VAR Byte ' left desired sensor data
DSRData VAR Byte ' right desired sensor data
ASLData VAR Byte ' left actual sensor data
ASRData VAR Byte ' right actual sensor data
P VAR Word ' proportional control effort term
I VAR Word ' integral control effort term
D VAR Word ' differential control effort term
Drive VAR Word ' total control effort
Err VAR Word ' difference between desired and actual positions
LastErr VAR Word ' store the previous Err term to calculate differential
Ei VAR Word ' Err over time
IntCount VAR Byte ' Variable for counting cycles for integral drive (see Ti
constant)
Sign VAR Word ' variable for calculating sign
ActPos VAR Word ' calculated/filtered actual position
DesPos VAR Word ' calculated/filtered desired position

' INIT
LastErr = 0 ' clear last err
ActPos = 0 ' initial actual position = 0
DesPos = 0 ' initial desired position = 0
Ei = 0 ' clear accumulated err
HIGH MOTOR ' set motor serial control line high (for low pulses)
HIGH MOTOR_RESET ' motor controller reset (controller on)

' PROGRAM
Main:
GOSUB ReadDSL
GOSUB ReadDSR
GOSUB ReadASL
GOSUB ReadASR
GOSUB TestForStuck
GOSUB CalcPosition
GOSUB CalcDrive
GOSUB RunMotors
GOTO main

' subroutines
ReadDSL: ' Acquire conversion from 0831
LOW DSL_CS ' Select the chip
LOW DSL_CLK ' Ready the clock line.
PULSOUT DSL_CLK,10 ' Send a 10 uS clock pulse to the 0831
SHIFTIN DSL_Dout, DSL_CLK, MSBPOST,[DSLData\8] ' Shift in data
HIGH DSL_CS ' Stop conversion
RETURN

ReadDSR: ' Acquire conversion from 0831


LOW DSR_CS ' Select the chip
LOW DSR_CLK ' Ready the clock line.
PULSOUT DSR_CLK,10 ' Send a 10 uS clock pulse to the 0831
SHIFTIN DSR_Dout, DSR_CLK, MSBPOST,[DSRData\8] ' Shift in data
HIGH DSR_CS ' Stop conversion
RETURN

ReadASL: ' Acquire conversion from 0831


LOW ASL_CS ' Select the chip
LOW ASL_CLK ' Ready the clock line.
PULSOUT ASL_CLK,10 ' Send a 10 uS clock pulse to the 0831
SHIFTIN ASL_Dout, ASL_CLK, MSBPOST,[ASLData\8] ' Shift in data
HIGH ASL_CS ' Stop conversion
RETURN

ReadASR: ' Acquire conversion from 0831


LOW ASR_CS ' Select the chip
LOW ASR_CLK ' Ready the clock line.
PULSOUT ASR_CLK,10 ' Send a 10 uS clock pulse to the 0831
SHIFTIN ASR_Dout, ASR_CLK, MSBPOST,[ASRData\8] ' Shift in data
HIGH ASR_CS ' Stop conversion
RETURN

CalcPosition: ' calculate the actual and desired positions using sensor biasing, and
filtering
' the actual position is the right actual sensor differenced with the left actual sensor
ActPos = ActPos * (AAveCount - 1) + (ASRData - ASLData + ASBias)
Sign = ActPos
GOSUB SetSign
ActPos = ABS ActPos / AAveCount
ActPos = ActPos * Sign
' the desired position is the right desired sensor differenced with the left desired sensor
DesPos = DesPos * (DAveCount - 1) + (DSRData - DSLData + DSBias)
Sign = DesPos
GOSUB SetSign
DesPos = ABS DesPos
DesPos = DesPos / DAveCount
' if we're within roughly the inside 16 inches,
IF ( DesPos < 70 ) THEN
DesPos = DesPos * 11 / 10 ' scale the desired position due to its slight lack of linearity
ENDIF
DesPos = DesPos * Sign
RETURN

TestForStuck: ' look for threshold crossings that would indicate the ball is stuck at one
end of the tube
' if the right sensor reads 'very far away', and the left sensor doesn't read 'pretty close',
IF ( ASRData < 18 AND ASLData < 80 ) THEN
GOTO StuckLeft ' assume we're stuck against the left sensor/fan
' if the left sensor reads 'very far away', and the right sensor doesn't read 'pretty close',
ELSEIF ( ASLData < 21 AND ASRData < 80 ) THEN
GOTO StuckRight ' assume we're stuck against the right sensor/fan
ENDIF
RETURN

StuckLeft: ' routine to kick the ball away from the left end of the tube
SEROUT MOTOR, MOTOR_BAUD, [128, 0, 0, 0] ' turn off the right motor
SEROUT MOTOR, MOTOR_BAUD, [128, 0, 2, 127] ' turn on the left motor full blast
PAUSE 220 ' wait a little while to kick the ball out
Ei = 0 ' clear the integral memory in case we've been stuck here for very long
GOTO Main

StuckRight: ' routine to kick the ball away from the right end of the tube
SEROUT MOTOR, MOTOR_BAUD, [128, 0, 0, 127] ' turn on the right motor full blast
SEROUT MOTOR, MOTOR_BAUD, [128, 0, 2, 0] ' turn off the left motor
PAUSE 220 ' wait a little while to kick the ball out
Ei = 0 ' clear the integral memory in case we've been stuck here for very long
GOTO Main

RunMotors: ' send control speed signal to motor drivers


SEROUT MOTOR, MOTOR_BAUD, [128, 0, 0, (127 - Drive)/2] ' run right motor at
50% speed - drive value
SEROUT MOTOR, MOTOR_BAUD, [128, 0, 2, (127 + Drive)/2] ' run left motor at
50% speed + drive value
RETURN

CalcDrive: ' calculate the total control effort


GOSUB ErrorCalc ' calculate error
GOSUB PropCalc ' Perform proportional error calcs
GOSUB IntCalc ' Perform intigral calcs
GOSUB DerivCalc ' Perform derivitive calcs
Drive = (MBias + P + I + D) ' calculate total drive
Sign = Drive ' Sign adjust to max of 127 min -127
GOSUB SetSign
Drive = ABS Drive MAX 127 ' Limit drive to motor capability
Drive = Drive * Sign ' restore sign
RETURN

'********** Calculate Error - Sign adjusted


ErrorCalc:
LastErr = Err ' save last error for derivitive calc
Err = (DesPos - ActPos) ' Calculate position error
RETURN

'*********** Proportional Drive - Sign adjusted


PropCalc:
Sign = Err
GOSUB SetSign
P = ABS Err * Kp / 100 ' Apply Kp gain in hundredths
P = P * Sign
RETURN

'*********** INTIGRAL DRIVE - Sign adjusted


IntCalc:
IntCount = IntCount + 1 'Add to counter for reset time
IF IntCount < Ti THEN IntDone ' Not at reset count? -- done
Ei = Ei + Err ' Accumulate err
Sign = Ei
GOSUB SetSign
Ei = ABS Ei MAX 6000 ' limit to prevent windup (the only potential for windup is if
the ball gets stuck at an end and doesn't get kicked out)
I = Ei * Ki / 100 ' Apply integral gain in hundredths
Ei = Ei * Sign
I = I * Sign
IntCount = 0 ' reset counter
IntDone:
RETURN

'*********** DERIVATIVE DRIVE - Sign adjusted


DerivCalc:
' Calculate amount of derivative drive based on the difference of last error
D = Err - LastErr
Sign = D
GOSUB SetSign
D = ABS D * Kd / 10 ' apply the derivitive gain in tenths
D = D * Sign
RETURN

'********** Set sign of value


SetSign:
IF Sign.BIT15 = 0 THEN SignPos ' If signbit is 1, then negative
Sign = -1
RETURN
SignPos:
Sign = 1
SignDone:
RETURN

You might also like