Laser Timing Rig Software
In our last blog we talked about our Laser Timing Rig hardware and how it is connected to a Raspberry Pi using the GPIO.
Now it is time to take a look at how we read these signals and generate the lap times:
First we need to check the GPIO pin that the sensor is attached to.
The sensor gives a low value when blocked by a robot, so we are looking for a high to low change on the GPIO pin.
You can use almost any of the GPIO libraries to do this.
We went with pigpio as we used it with our original laser timing rig used for the Pi Wars straight-line speed test.
Once pigpio is setup the basic script looks like this:
import pigpio import time ### Configuration ### MIN_LAP = 1.0 # Minimum time difference before registering another crossing SENSOR = 14 # Set which (BCM) GPIO pins the sensor beam is connected to # Setup the GPIO pi = pigpio.pi() global lastTrip lastTrip = time.time() # Callback when the sensor is triggered def TripSensor(gpio, level, tick): global lastTrip tripTime = time.time() if tripTime > (lastTrip + MIN_LAP): # Actual sensor trip print 'Lap at %f' % (tripTime) else: # Duplicate reading pass lastTrip = tripTime # Setup the sensor pin pi.set_mode(SENSOR, pigpio.INPUT) pi.callback(SENSOR, pigpio.FALLING_EDGE, TripSensor) # Idle loop, does nothing but keep the script running while True: time.sleep(1.0)
The script works as follows:
- Setup the GPIO pin as an input
- When the pin has a high to low change (falling edge) call
TripSensor
TripSensor
checks if the previous call was too recent, if so it is still the robot passing the start line- If the previous call was a while ago it takes a timestamp for the robot reaching the start line
Now we have some start line timestamps, but the full script does a little bit more.
Each time we get a new timestamp this script sends a message down to our camera controlling PC.
This PC is running another script, the one responsible for selecting cameras.
What this script does is to take these timestamps and turn them into lap times.
While waiting for the next one it also counts how long it has been since the latest lap started.
Finally the lap times are drawn over the camera feeds, ready to be passed onto Claire's PC to have the commentary added.
The final result looks like this:
Add new comment