Laser-guided Ghost Climber

by PenfoldPlant in Circuits > Arduino

23932 Views, 56 Favorites, 0 Comments

Laser-guided Ghost Climber

Ghost Climber 2 Mini.jpg
Ghost Climber 1 Mini.jpg
Ghost Climber 3 Mini.jpg
As a rock climber who frequently hangs around a popular indoor climbing wall, I spend a lot of time watching other people climbing tricky routes and wondering, "Could I do that in the same way?"

Almost inevitably, when I try to climb the same route I'll forget exactly what sequence of holds they used and end up following a slightly different path. Even when I remember exactly which course to follow, I'll still wonder whether I'm doing it as quickly as the previous climber. Yes, I know that skill in climbing isn't all about speed, but I'm competitive like that.

That's how I decided to make a device that could record the precise route a climber follows when climbing a wall or a rock face, then play it back in such a way that another climber could follow it while climbing and, if they felt so inclined, race against it. This concept will no doubt be familiar to anyone else who grew up playing Mario Kart's time trial mode: it is a ghost.

In an ideal world, a ghost climber would be a 3D holographic recording of a climber that would then eerily haunt the rock face, replaying the climber's exact body motions and speed of progress. In our less-than-ideal world, a ghost climber can be created by accurately tracing and replaying a specific climbing route using a servomotor-controlled laser turret. That's right: in this situation a motorised laser turret is the simple solution.

Here's the finished device in action:


And here's what it looks like while it's working its magic:



My ghost climber device, nicknamed The Redpointer*, can be used in the following situations:
  • In training, for a single climber to try to beat his/her own personal best and view where on the route he/she was fastest and slowest.
  • In competitions, so that multiple climbers can race consecutively on the same route. This is considerably easier to arrange than creating two identical climbing routes side-by-side. It also has the advantage that it is portable enough to be set up outdoors on rock faces that cannot be duplicated.
  • In social climbing, to illustrate a long or complex route to a second climber without requiring the second climber to memorise it before climbing.
  • Any other scenario in which you wish to record and replay a path to be followed by a laser pointer. I'm not suggesting setting up illegal underground cat-racing circuits, but I can't promise that someone else won't try it...

*This is climbing humour. I'm very sorry.

Design Brief

Ghost Climber 3 Mini.jpg
I designed The Redpointer to have three modes:

Mode 1 - Record

In this mode, someone on the ground uses a laser pointer to trace out a path up a climbing wall.
E.g. Climber A ascends a route while Climber B stays on the ground and tracks Climber A's progress with the laser pointer. The Redpointer then records exactly what route was followed.

Mode 2 - Playback

Here, the route recorded in Mode 1 is played back in real-time, projecting a laser point onto the climbing wall to illustrate the path of the previous climber as a "ghost".
E.g. Climber C now turns up late to the climbing session. Climbers A, B and C all stand back and watch the laser turret replay the route Climber A took when recording in Mode 1. Climber C now knows where to climb if she wants to imitate A.

Mode 3 - Playback, record and compare

This mode is a combination of modes 1 and 2 and is designed specifically for competing against a previously set route. Once a route has been recorded in Mode 1, another climber can race against it in Mode 3 and be given live feedback saying whether he/she is ahead of or behind the pace set in the recording.
E.g. Climber C now climbs the same route as Climber A, while Climber B uses one laser pointer to track C's progress. Meanwhile a separate laser pointer illustrates A's ghost on the same wall so that C can tell if she is winning or losing the race. Every time C overtakes A's ghost or is overtaken by A's ghost, a buzzer sounds. At the end of the route, The Redpointer indicates whether A or C won the race.

Safety Issues

Staples4.jpg
There are a few serious safety issues to consider before beginning this project. Please do not skip to the next step without first carefully considering these.

Rock climbing is inherently dangerous. Obviously, this danger is largely mitigated by the careful use of ropes, harnesses and other safety equipment but the danger is always present. Never go rock climbing if you are not fully competent and confident in the various techniques involved (belaying, leading, rigging, etc.).

This project involves soldering and working with electrical circuits. Always do both of these in well-ventilated, uncluttered and dry environments, using sensible precautions to avoid burns, fires and electric shocks.

Lasers are also potentially dangerous. This project only uses a pair of Class 2 lasers, about which Wikipedia says the following:

"A Class 2 laser is safe because the blink reflex will limit the exposure to no more than 0.25 seconds. It only applies to visible-light lasers (400–700 nm). Class-2 lasers are limited to 1 mW continuous wave, or more if the emission time is less than 0.25 seconds or if the light is not spatially coherent. Intentional suppression of the blink reflex could lead to eye injury. Many laser pointers are class 2."

Never look directly into the laser beam. Never intentionally shine it into someone's eye. Never adjust its circuitry to increase its power.

The Redpointer's operation does rely on tracing someone's motion using a laser pointer. For safety reasons, always focus on point on the person's body well away from the head, such as the belt of the climbing harness. Fortunately, most rock climbing takes place with the climber facing inward towards the wall, so the chance of the climber turning to face the beam by accident is minimal. Always ask permission from climbers (or anyone else) before pointing lasers at them.

Don't be mean to cats with lasers. That sentence can be interpreted in two ways. Both hold equally true.

Parts and Materials

Servo1.jpg
Ghost Wiring 1.jpg
Sensor2.jpg
Staples1.jpg
Sensor4.jpg
I used the following materials to construct my laser-guided ghost climber:

  • Arduino Duemilanove board (ATmega328P)
  • USB cable
  • Two Class 2 laser pointers
  • Two 6V servomotors
  • Two 10 kilohm linear rotary potentiometers (i.e. not a logarithmic rotary potentiometer*)
  • Two 10 kilohm resistors
  • Four 150 ohm resistors
  • Three LEDs (red, green and yellow)
  • Three pushbuttons
  • Piezo buzzer from Arduino kit
  • Four AAA batteries
  • Battery holder for four AAA batteries
  • 9V battery
  • 9V battery adapter for Arduino (optional - see here for details on how to make one)
  • One double pole, single throw switch
  • Plenty of insulated wire
  • A few hundred 10mm staples (see Step 6)
  • Assorted scrap wood
  • Five wooden tongue depressors
  • Three old CDs
  • Solder
  • Wood glue
  • Superglue
  • Electrical insulation tape
  • Plasticine
These tools came in useful:
  • Soldering iron
  • Jigsaw
  • Orbital sander or sandpaper
  • Craft knife

I'm sure that you can change some of the items on this list to suit your own needs.

*I will refer to these components as potentiometers throughout this Instructable because that is how they are usually listed in catalogues of components. In actual fact, I will be using these as rheostats rather than potentiometers.

Building the Sensor Turret

Laser tip 1.jpg
Sensor1.jpg
Sensor2.jpg
Sensor3.jpg
Sensor4.jpg
Sensor5.jpg
Sensor6.jpg
Sensor7.jpg
Sensor8.jpg
Sensor9.jpg
As you may have noticed, The Redpointer actually has two laser turrets. One of these, the sensor turret, is for inputting information into the Arduino. The other turret, the servo turret, is for outputting that recorded information as the motion of a laser pointer. Both turrets are glued to a plank of scrap wood. Here's roughly how I constructed the sensor turret.

I'm not going to go into a lot of detail here, because the decisions regarding the sizes and shapes of the bits of wood I used were largely arbitrary. Most of the curves ended up the size they are because that meant I could easily draw them using a CD as a stencil.

The most important thing to understand is that the sensor turret is made using two linear potentiometers as a pair of perpendicular axles. As the user moves the laser pointer around, rotating it on its x and y axes, the pointer rotates on the two axles and changes the resistance of the potentiometers. The Arduino measures this resistance and uses it to calculate the angle of the pointer.

One of the potentiometers lies horizontally with its shaft suspended between two fixed pieces of wood, able to rotate freely.
The shaft is attached by superglue to a third piece of wood (shaped like a truncated circle) which is sandwiched between the first two pieces of wood. As this almost-circular piece rotates between its neighbours, the potentiometer shaft will rotate with it and inform the Arduino about the elevation of the laser pointer.

The base of the potentiometer is anchored to The Redpointer's base by a section of tongue depressor glued to another piece of wood.

Notice the little semicircular notch cut into the flat top of the middle piece of wood. There is a hole drilled down at the base of that notch just wide enough for a potentiometer's shaft to fit inside. The second potentiometer is eventually glued into that hole, but first it is attached to another tongue depressor. Two CDs act as a bearing between the wooden block and the tongue depressor. Once the potentiometer is glued in place, it acts as a sensor for the laser pointer's lateral rotation.

With the two-axis base assembled, a simple gun-like handle (made from three pieces of glued wood) is attached to the top. This will allow for simple one- or two-handed control of the sensor turret.


Building the Servo Turret

Servo Turret 1.jpg
Servo1.jpg
Servo2.jpg
Servo3.jpg
Servo5.jpg
Servo6.jpg
Servo7.jpg
The servo turret works on much the same principle as the sensor turret, but with servomotors instead of potentiometers.

Two servos are held perpendicular to each other by a wooden frame. Eventually, a laser pointer will be attached to the top servo shaft, allowing the Arduino to aim the pointer vertically and horizontally by adjusting the position of the two servomotors. A CD was used as a convenient round smooth surface to glue between the wooden wheel and the grounded servomotor.

Attaching the Lasers

Staples1.jpg
Staples2.jpg
Staples3.jpg
Staples4.jpg
One problem with using the cheapest laser pointers I could find was that they both had power buttons which required constant pressure to keep the laser turned on. This meant I had to either (a) open the case of the laser pointers and rewire the power switch or (b) find an easily reversible way to hold down the power buttons. I opted for the latter.

I found that two rows of 10mm staples make a very nice casing for a laser pointer. Not only can these be used to attach a laser pointer to a wooden turret at a precise angle, they also fit snugly enough that they can hold down the power button when required (see images).

Circuitry

Redpointer circuit 4.jpg
Ghost Wiring 1.jpg
Below is the circuit diagram for the entire ghost climber device. Notice that the servomotors have their own power supply in the form of 4 AAA batteries.

I know the wiring looks intimidating, but all of the different components are on their own quite simple circuits, usually consisting of a simple 5V-to-ground circuit with another wire connecting to an input or output pin.

What I haven't shown on the diagram is the optional 9V power supply for the Arduino. I recommend wiring it up to the same switch as the servomotor battery circuit, although still on its own circuit. That just makes it slightly easier to turn power on and off to the whole device at the same time.

Carefully wire it all up, test it, then solder it together. I attached components to the base plank where necessary, using wood screws to attach the Arduino and plasticine to make a stylish case for the three buttons.

Programming the Arduino

Ghost Wiring 1.jpg
I have uploaded the two files needed to run the Ghost Climber program on an Arduino. One of these files, "pitches.h", is borrowed under a Creative Commons agreement from a tutorial on the Arduino website and is just a list of musical tones that the Arduino can play through its buzzer.

The other, more complex file, is the brains of the operation. I've annotated it quite thoroughly throughout the code, but feel free to ask me any questions. I'll offer a few thoughts on the code here for those who are interested.

The following variables are worth playing around with, depending how you wish to use the device:
  • resolution will set the sampling interval of the sensors in milliseconds. If you increase this time, the resolution of the recording will decrease, but yo will be able to record for longer without running out of memory.
  • routeSamples is the maximum number of points of data you can record. You can increase this if you have the memory capacity on your device. A better way to record longer routes would be to decrease the sampling time, resolution.
  • overtakePause is the minimum time one climber must spend ahead of the other before it registers as an overtaking event. This is currently set at two seconds to prevent a rapid flurry of conflicting beeps when two climbers are neck and neck. Decrease this time for increased confusion and excitement. Notice that although it will take two seconds for a noise to play, the yellow LED will immediately respond to an overtaking event by lighting up or turning off accordingly. This can be used by judges in a clinch.
I have programmed in a simple linear smoothing process to the servomotors' motion. This means that even if you sample from the sensor turret at a very low resolution, the servo turret will still play the motion back smoothly.

If you build this, you will need to map your sensors to your servomotors. This isn't hard at all, it just involves a little bit of playing around. Search for the word "map" in the code to see where this is relevant.

Also notice that the modes I have referred to earlier in this Instructable are numbered slightly differently in the code. Mode 1 is divided into Modes 10 and 11, Mode 2 into 20 and 21, with Mode 3 divided into Modes 30, 31 and 32.

Operating the Finished Ghost Climber

Climb 1.jpg
Climb 2.jpg
The ghost climber should run as follows:
  • Turn on the power and a red LED will indicate that the device is in Mode 1 - Record.
  • Press Button 1 to record a route. A short series of beeps will countdown to the start of the route. If you wish to aim using the servo turret as well as or instead of the sensor turret, press Button 2 to toggle it on or off.
  • Use the sensor turret to track a climber to the top of a route, then press Button 1 again to indicate that the route is complete. A different brief tune will indicate the recording process is over.
  • If you wish to re-record the route, repeat the previous two steps. Otherwise, press Button 3 to toggle to Mode 2 - Playback. A green LED will confirm this mode.
  • Press Button 1 to play the recorded route back via the servo turret, projecting the "ghost climber" onto the wall as a laser point.
  • Press Button 3 to toggle to Mode 3 - Playback, record and compare, indicated by the green and red LEDs both being lit.
  • As before, press Button 1 to start playback. At the same time, be prepared to track the new climber with the sensor turret. A series of beeps will again indicate the start.
  • As the new climber climbs, the ghost climber will be projected onto the same wall. When the climber overtakes the ghost, a positive alert sound will be played. When the ghost overtakes the climber, a gloomier sound will be played. Similarly, at the end of the route, different sounds will be played depending on whether the climber or the ghost reached the top of the route first. During the race, the yellow LED will light up while the climber is ahead of the ghost.
  • At the end of the route, only the yellow LED will be lit. This indicates that you have the option to overwrite the ghost with the newly recorded route. Press Button 2 to overwrite or Button 3 to discard the new route.
  • Press Button 1 to toggle between modes as desired.
Below is a brief tech demo with the lasers turned off. This video is also shown on the Intro page.



Final Thoughts

Servo Turret 1.jpg

As a project, the ghost climber was a roaring success and created much interest at my excellent local climbing wall, where the staff and other climbers were all kind enough to let me sit around playing with lasers on a quiet afternoon. A few were even quite keen to be guinea pigs for The Redpointer's first trial run.

Once again, here's the video of The Redpointer in action at the climbing wall:



I think that I will add the following features to future iterations of this device:
  • Finer calibration between the sensor turret and the servo turret. These are currently positioned about 20cm apart from each other, so their separation is negligible in comparison to the distances covered on a climbing wall. However, there is some irregularity that occurs at the extremes of the turrets' arcs, when both the servomotors and the sensors deviate from their supposed linearity. A bit of tinkering should overcome this.
  • An integrated power supply and on/off switch for the laser pointers would be much neater than the current staple-casing method. During the trial runs of my ghost climber device, I had issues with the batteries on the cheap laser pointers running out. This would have been avoided if they were powered from the same source as the Arduino or the servomotors.
  • A more rugged casing for the whole device would be handy for trips out into the wild. Ideally, it would be something with rubber corners and a way to attach it to a tripod for uneven terrain.
Finally, thanks for reading all of this! If you have any questions about the ghost climber, please don't hesitate to contact me. I'd love to hear what other ideas people have for this new toy!