3A – Linear Collision with a Fixed Object

Instructions

Worksheets

Overview

In this experiment you will characterize different types of collisions by measuring the momentum of an air track glider before and after it collides with a fixed force sensor.  Different types of attachments such as a spring, a rubber bumper, or clay, will be placed on the end of the force sensor to change the nature of the collision.  The force sensor will measure the force during the collision which can be integrated numerically to give the impulse.  The goal is to test the momentum principle by seeing if the change in momentum of the glider agrees within measurement uncertainty with the impulse.  In addition, the degree of elasticity of the different collision types will be characterized by calculating the coefficient of restitution for the collision.  Finally, a simplified VPython model will be built that will adjust the speed after the collision using the coefficient of restitution as an adjustable parameter.

Experimental Measurements

Figure 1: Experimental Setup Figure 2: Force Sensor Location Figure 3: Force Sensor Attachments (Spring, Clay, Rubber)

The basic experimental setup is shown in Figure 1.  A blue glider, of mass 0.572 kg, was allowed to move with constant speed on a horizontal air track.  It collided with a fixed force sensor mounted on the end of the track as shown in Figure 2.  The force sensor had one of the three types of attachments (spring, clay, or rubber bumper) shown in Figure 3 attached on its end.  A sonic ranger was used to measure the position of the glider every 25 ms (0.025 s).   The position versus time data was differentiated numerically within the Physics Lab Assistant software to obtain velocity and then multiplied by the mass to obtain momentum versus time.  At the same time the force sensor was measuring the force on the glider during the collision.  However, since the collision was a rapid event the force sensor was setup to measure force every 1 ms (0.001 s).  An example of the data that was collected for the collision with the spring is shown in Figures 4 thru 6.

Figure 4: Position vs Time for Spring Collision Figure 5: Momentum vs Time for Spring Collision Figure 6: Force vs Time for Spring Collision

In the above example, the collision between the glider and the force sensor (with the spring attachment) occurs between approximately 4.93 seconds and 4.99 seconds.  Before the collision the position changes in a linear fashion as expected which implies the velocity and momentum are constant. The average value and uncertainty of the momentum before the collision was calculated by averaging several momenta values before the collision.  For this collision the result was \(p_i = -0.1572 \pm 0.0005\) kg m/s.  After the collision the position is once again linear and the velocity and momentum are again constant.  In this case the final momentum was determined to be \(p_f = 0.1453 \pm 0.0009\) kg m/s.

The force on the glider measured by the force sensor is zero before the collision as expected.  Its magnitude rises from zero to a maximum value and then decreases back to zero as shown in Figure 6.  After the collision the force measurement shows some oscillation that is likely due to the vibrations in the spring.  These oscillations are ignored.  The impulse delivered during the collision was measured by integrating the force from the start to the end of the collision.  For the collision with the spring this result was found to be \(J = 0.3007 \pm 0.0012\) Ns.  The units of impulse, Ns, are the same as the units of momentum, kg m/s.  You should convince yourself that this is true by substituting a kg m/s\(^2\) for the N in the impulse units.

These measurements were repeated for collisions with the rubber bumper and with the clay.  A summary of the findings for the initial and final momentum and for the impulse are shown in the table below.

Object Initial Momentum, \(p_i\) Final Momentum, \(p_f\) Impulse, \(J\)
kg m/s kg m/s Ns = kg m/s
Spring \(-0.1572 \pm 0.0005\) \(0.1453 \pm 0.0009\) \(0.3007 \pm 0.0012\)
Rubber Bumper \(-0.1187 \pm 0.0007\) \(0.0823 \pm 0.0011\) \(0.1984 \pm 0.0009\)
Clay \(-0.0792 \pm 0.0011\) \(0.0227 \pm 0.0008\) \(0.1028 \pm 0.0008\)

For each of the collisions described above you should compute the change momentum of the glider and compare it to the impulse delivered to it during the collision.  Be careful to propagate uncertainties correctly.  Compare the momentum change to the impulse using the difference method described in Appendix B of the lab manual.  You will need to take the difference between the momentum change and the impulse and see if this difference agrees with zero within the uncertainty.

In addition you should compute the coefficient of restitution for each collision.  The coefficient of restitution is defined as the ratio of the final relative speed to the initial relative speed.  Since our second object, the force sensor, is fixed in this situation, this will be the same as the final speed of the glider divided by its initial speed.  You can also just divide the final momentum by the initial momentum since the mass of the glider will cancel in this operation.

Simulation

The starter code below describes how to create a simple model of this collision.  The basic premise is that the force is modeled as a linear restoring force using Hooke’s law.  The  stiffness of the spring is set rather arbitrarily in the variable ‘springconstant’.  The model assumes that the force has one value as it is being compressed and then it has a smaller value, reduced by a factor of the coefficient of restitution, as it expands and pushes the glider back out.  This will simulate the energy loss that occurs during the collision.  It will give you results that look right for the momentum change, but the shape of the force versus time will look odd because the force will rather magically reduce 1/2 way thru the collision.

#
# Lab 09 - Collisions of a Single Object
#
# Model the motion of a glider on a horizontal air track
scene = canvas(title = 'Motion on Horizontal Air Track', width = 800, height = 300)
# Define a custom color for the air track
Aluminum = vector(132/255,135/255,137/255)
# Define the Air Track object as a stationary box. 
#################################################################
#                                                               #
# Make sure the dimensions of the air track are appropriate     #
#                                                               #
#################################################################
track = box()
track.length = 1.50
track.width  = 0.085                        ## I edited the width to make it the width of my track
track.height = 0.05                         ## I edited the height to make it the height of my track
track.color = Aluminum
track.pos = vector(track.length/2, -track.height/2, 0)
# Define the Glider object as a rectangular box that will
# leave a trail of points behind making a motion diagram                                                            
# Set the size, color, and velocity of the glider
#
glider = box(make_trail = False, trail_type = "points", trail_radius = 0.01, interval = 20)
glider.length = 0.30                        ## Length of glider in meters
glider.width  = 0.085                       ## Width of glider in meters
glider.height = 0.075                       ## Height of glider in meters
glider.color = color.blue                   ## Set the glider color
glider.pos = vector(track.length-glider.length, 0, 0)  # Position the glider at the right of screen
glider.m = 0.5732                           ## Mass of glider in kg
glider.v = vector(-1,0,0)                   # Initial velocity of glider
glider.p = glider.m * glider.v              # Initial momentum of glider
# Position the center of the scene at the midpoint of the top of the Air Track
# This will allow the air track to occupy the majority of the scene.
scene.center=vector(track.length/2, 0, 0)
           
# Create a Position vs Time Graph
PositionGraph  = graph(title='Position vs Time', xtitle='Time (s)', ytitle='Position (m)', fast=False, width=800)
PositionVsTime = gcurve(color=color.blue, width=2, label='Position, x')
# Create a Momentum vs Time Graph
MomentumGraph  = graph(title='Momentum vs Time', xtitle='Time (s)', ytitle='Momentum (kg m/s)', fast=False, width=800)
MomentumVsTime = gcurve(color=color.red, width=2, label='Momentum, p_x')
 
# Create a Force vs Time Graph
ForceGraph  = graph(title='Force vs Time', xtitle='Time (s)', ytitle='Force (N)', fast=False, width=800)
ForceVsTime = gcurve(color=color.yellow, width=2, label='Force')
 
# Define necessary constants
dt = 0.02           # Time step in seconds [s] 
t  = 0              # Initial value of elasped time [s]
L0 = 0.2            # L0 = Unstretched length of spring [m]
k  = 25             # k = spring constant [N/m]
# 
# Draw a spring at the end of the track 
spring = helix(pos=vector(0,0.02,0), axis=vector(1,0,0), length=L0, radius=0.010, thickness=0.003, coils=12)
 
 
#####################################################################
#                                                                   #
#  A. Set a value for the coefficient of restitution                #
#   ("energy remaining after bounce" factor)                        #
#                                                                   #
#####################################################################
 
cor = 0.3     ## (change as needed)
 
gliderend=glider.pos.x-glider.length/2. # position of left side of glider
 
# Iterate until the glider hits the end of the air track
 
while(glider.pos.x < track.length - glider.length/2):
    rate(100)
    
    # We will define the force on the glider by the spring as a vector.
    # Later, you will update only the x-component of this force vector
    # by writing an expression in the form 
    # 
    # force.x = - k * stretch
    #
    force = vector(0,0,0)   # force when not in contact with spring
    
    # Test for if the glider is in contact with the spring so that we
    # can update the force as necessary.  The scalar variable 'gliderend' is 
    # updated within the loop and we will compare it to the natural length
    # L0 to determine if it has hit the spring yet.
    if(gliderend < L0):     
       
        ####################################################################
        #                                                                  #
        #  B. The glider is now in contact with the spring.                #
        #   Insert an expression for the x-component of the spring force.  #
        #                                                                  #
        #       force.x = ________                                         #
        #                                                                  #
        #   Use the varialbes 'k', 'L0', and 'gliderend'.  Be careful to   #
        #   get the sign correct.                                          #
        #                                                                  #
        ####################################################################
        
        
        
        # The following ling will ensure that the animation of the spring
        # will match the end of the glider.
        spring.length = gliderend 
       
        ####################################################################
        #                                                                  #
        #   C. Now put another condition in to express the x-componnet of  #
        #      the spring force when the glider has reversed direction.    #
        #                                                                  #
        #   If (condition):                                                #
        #       force.x = _____________                                    #
        #                                                                  #
        #    Your expression should include the coefficient of restitution #
        #    which is defined in the variable 'cor'.                       #
        #                                                                  #
        #    Note that this condition is "nested" within the               #
        #                                                                  #
        #     if gliderend < springlength                                  #
        #                                                                  #
        #    condition, so that it only applies when the glider is in      #
        #    contact with the spring, otherwise the force is zero.         #
        #                                                                  #
        ####################################################################
        
        
            
        
    #####################################################################
    #                                                                   #
    #  D. Update the glider momentum (glider.p) and velocity (glider.v) #
    #                                                                   #
    #####################################################################
    
    
    
    
    #####################################################################
    #                                                                   #
    # E. Update the glider's position (glider.pos)                      #
    #                                                                   #
    #####################################################################
    
    
    
    # this updates the position of the end of the glider based on glider.pos.x
    gliderend=glider.pos.x-glider.length/2. 
    
    # Update the elapsed time
 
    t = t + dt
  
    # Append data to graphs
    PositionVsTime.plot(t, glider.pos.x)
    MomentumVsTime.plot(t, glider.p.x)
    ForceVsTime.plot(t,force.x)