Space Pointer

by SteevAtBlueDust in Circuits > Arduino

3543 Views, 32 Favorites, 0 Comments

Space Pointer

20200426_101041.jpg

This is a space pointer!

It lets you select a planet, and time of day, and the arrow will spin around to point to its position in the sky.

This is a very simple project, and can be completed in a couple of hours. The computation of the planet positions are done offline and copied into the Arduino source, thereby simplifying the code required.

You can see it in action here:

Supplies

You need for the physical unit:
* Two servo motors (the SG90 micro gear servos are cheap, light, and used here)

* Some thin balsa wood (2-6 mm thick)

* A binding clip and screws (optional)

* Small block of wood, for mounting

* Glue

* A pen

And for the electronics:

* Arduino

* Three push buttons

* One LCD display

* A battery connector

* A PP3 battery

* Lots of wires

* A pot (optional, to control LCD brightness)

Mounting the First Motor

20200425_113416.jpg
20200425_113523.jpg
20200425_113559.jpg
20200425_114452.jpg

The easiest mounting is to glue the motor directly onto a piece of wood. But, because I though I might need to re-use the motor in future project, I decided to adopt a less permanent solution by attaching it with a bent binding clip.

Start by holding the top of each 'wing' in a vice, and bending the rest with a set of sturdy pliers. This will take some elbow grease! Be careful to not bend them to 90 degrees - even though that what it looks like is necessary. When the clip is holding the motor, the wings fold down by a further 30 degrees as shown in the first image.

Then, with the motor inside the jaws of the clip, screw it down to the wood. You will need 4 screws here because when the pointer moves, so does the whole motor+clip arrangement. So 2 screws (one of each side) stop it rotating clockwise, while the other 2 stop it rotating anti-clockwise. Since the motors are not very heavy, any small piece of wood is good enough.

(Of course, you could always glue the base of the clip to the wood, instead of using screws.)

The Azimuth Arm

20200425_114238.jpg
20200425_114531.jpg

This is the arm which points in the correct horizontal direction, following the compass points of north, east, and south.

Cut a small piece of balsa wood (around 55x15mm) and glue it one of the plastic motor arms. My wood was only 2mm thick, so I doubled it up to ensure it wouldn't bend when a second motor was placed on top.

You can then mount this arm on top of the motor spindle, so that it points north. (Check this with a compass or phone.)

Note: I used balsa wood because it's very amenable to being stuck to plastic by basic glue sticks!

The Second Motor and Altitude Arm

20200425_115344.jpg
20200425_115432.jpg

This can be glued directly on top of the first arm, at the end, but mounted sideways so that the spindle slightly overhangs the lower azimuth arm. (If you have heavier motors you might need to glue a penny, or other small weight, to the opposite end of the arm to counterbalance the second motor.)

Then, cut a single slice of balsa wood (also 55x15mm) and shape one end into a point. Glue it to a second plastic arm, in the same way as the previous one, and attach it to the motor. This will serve to indicate the altitude of the planet.

The Electronics

20200426_101023.jpg
20200425_113149.jpg
20200425_115518.jpg
circuit1_bb.png

While this might look like a mess of wires, it is rather simple. Connect the LCD, buttons, and motors as shown. My connections for the LCD use slightly different pins to most sample circuits, but any valid connections (which are correctly specified in the source code) should work fine. When I built mine, I had issues with the servo library seemingly taking control of pin 9 on the Arduino, so I re-organised the wiring to prevent it being used.

(The LEDs are from my previous project, ignore them!)

Important note: the Arduino is unlikely to be able to power both the LCD and the motors. Therefore, I have included a second battery to power the motors, whilst the USB powers the Arduino. To do this, simply connect the ground (i.e. -ve terminal) of the battery to the ground of the Arduino, and the +ve of the battery to the +ve of both servo motors.

The Software

mdg-compute.png

First, grab the code from github and build it, to test that the LCD works, and the arms move. I have built this under Arduino IDE 1.8.x

Secondly, generate a new dataset which indicates the sky position for each planet, over time. For this you will need to know:

* The time and date

* The longitude and latitude of your location (most mapping software tells you this)

Armed with this information, visit my Space Pointer calculation page, enter the data, and click 'Calculate'. You can then copy the numbers into the dataset.h file.

Calibration

20200425_115446.jpg

To use it, you must first calibrate the pointer by telling the software to send 0,0 to the motors. So, use the left and right buttons to change the top row of the UI to read 'Calibrate', and click the select button. You will see the '>' cursor move to the second row. Then use the left and right buttons again to show 'Set to 0',and click select.

Both motors should spin to their 0 position.

At this point ensure the arrow is pointing north, and is at 0 degrees - flat towards the horizon. If it is not, you can simply remove the balsa wood arm from the motor spindle and reposition it, so that it is.

Then switch to 'Set to 90', so that it points east, and upwards.

And finally to 180, which is south, and flat towards the opposite horizon.

Since these motors only have 180 degrees of travel, the screen says '263S' means follow the 'south' side of the arrow, rather than the 'normal' (i.e. north) side.

Note: the sun, although not a planet, is included because that's a very easy way to test the pointer during daylight hours. (But remember to never look directly at the sun.)

Completion!

20200426_101041.jpg

You should now be able to select the various planets, and a time, to watch the pointer spin to the correct location in the sky. Weather permitting, of course! I couldn't finish my Instructable teaching how you can remove the clouds from the sky! But perhaps if someone wants a challenge... :)

Future improvements might be to download the sky position dataset directly from the Internet, and include a real-time clock, so that the pointer can track individual planets. Perhaps one could upgrade the calculation routines to track stars. Or use larger motors, capable to moving a camera.

For the artistically inclined, you could draw the planet on the base, indicating the north position. (Or even mount a small compass.)

p.s. I know the sun isn't a planet

p.p.s. Tell Mike Brown that Pluto is!