Overview

Make your own LED timepiece! Use FLORA and its GPS module to tell time with a ring of pixels. A leather cuff holds the circuit and hides the battery. The watch is chunky but still looks and feels great on tiny wrists!

The circuit sandwich becomes the face of the watch, and you'll use a tactile switch to make a mode selector. The watch has timekeeping (one LED for hours and one for minutes), GPS navigation (customize your waypoint in the provided Arduino sketch), and compass modes.

This is an intermediate-level project requiring soldering and precision crafting. Before you begin, you should read and practice the following guides:
This project is a collaboration with Tyler Cooper! Project help and modeling from Risa Rose.

Tools & Supplies

For this project you will need:
Any entry level 'all-in-one' soldering iron that you might find at your local hardware store should work. As with most things in life, you get what you pay for.
Upgrading to a higher end soldering iron setup, like the Hakko FX-888 that we stock in our store, will make soldering fun and easy.

Do not use a "ColdHeat" soldering iron
! They are not suitable for delicate electronics work and can damage the boards (see here).

Click here to buy our entry level adjustable 30W 110V soldering iron.

Click here to upgrade to a Genuine Hakko FX-888 adjustable temperature soldering iron.

Learn how to solder with tons of tutorials!
You will want rosin core, 60/40 solder. Good solder is a good thing. Bad solder leads to bridging and cold solder joints which can be tough to find.

Click here to buy a spool of leaded solder (recommended for beginners).

Click here to buy a spool of lead-free solder.
Sharp scissors are a must!
Don't forget your wire strippers, pliers, and flush snips! Tweezers can help manipulate the wires connecting components in your circuit.
A helping third hand tool really makes this project a joy to build.

Click here to buy a helping third hand tool.
E6000 craft adhesive dries clear and flexible with a very strong bond. We prefer the small tubes over a single large one, which tends to get gummed up over time. It should be used in a well ventilated area and takes 24 hours to fully cure.

If you've never used this stuff before, let me put it this way: if E6000 were a new truck, hot glue would be a beat up station wagon with no muffler. Trust me, use the good stuff, you won't regret it!

Circuit Diagram

Each component connects to FLORA main board as follows:

GPS:
  • 3.3V->3.3V
  • TX-> FLORA RX
  • RX-> FLORA TX
  • GND-> GND

Accelerometer:
  • GND-> GND
  • SCL -> SCL
  • SDA -> SDA
  • 3.3V-> 3.3V

NeoPixel ring:
  • Vcc (power)-> FLORA VBATT
  • IN (Data Input)-> FLORA D6
  • Gnd (ground)-> GND

Tactile switch:
  • any two diagonal pins -> FLORA D10 and GND

Battery plugs in via the onboard JST port

Assemble Circuit

Gather your tools and supplies on a clean, stable work surface with good lighting.
Start by soldering small stranded wires to your electronics components, about two inches long each. Strip the wire ends, twirl the stranded core to make it more easily pass through the circuit boards' holes, and solder to the NeoPixel ring's IN, Vcc, and Gnd pads. It's best to solder on the back side of this particular board, since the pads are quite close to the leads of the NeoPixels on the front of the board, where a large dab of solder could bridge the two.
Repeat the process of attaching wires to the GPS (3.3V, RX, TX, GND) and accelerometer/compass module (3V, SDA, SCL, GND).
Trim off any wire ends with flush snips.
The first thing that gets attached to the FLORA main board is the GPS. Use the NeoPixel ring to help position the round GPS module in the center back of FLORA. The ring is exactly the same size as FLORA, and so functions as a jig. Use double stick tape or a dab of E6000 to hold the GPS in place.

Hold the circuit with the help of a third hand tool and wire the GPS connections to FLORA according to the circuit diagram. Make sure the wires are not longer than they need to be, and sit flush to the board.

My third hand tool has heat shrink tubing over the grippy alligator clips. This was Collin Cunningham's pro tip, and prevents scratching my circuits and their components!
Flip the circuit over and solder the wires to the FLORA main board. Trim any excess wire ends.
Use a piece of double sided foam tape to mount the accelerometer in the center of the FLORA board, right on top of the central 32u4 microcontroller chip. The foam helps distance the boards from one another to avoid shorting any components on the board.

Trim, strip, and solder the wire connections of the accelerometer/compass according to the circuit diagram.
To prepare the tactile switch, flatten and snip off any two diagonal pins.

Insert the switch into D10 and GND on the busy side of the FLORA board. Bend out the leads to hold it in position and solder the joints.

This big tactile button makes it easy to switch watch modes by holding down the whole face of the watch for a few seconds.

Verify that your solder connections are secure with a multimeter.

Before you proceed, test the GPS and accelerometer with the sample sketches provided with their respective code libraries. The next steps will make it hard to correct any bad solder joints or stray wires, so don't skimp on testing the circuit now!
Glue the NeoPixel to FLORA, lining up the PCB edges exactly. Don't pinch the boards together too much-- there should be a cushion of glue separating the two boards. Use a toothpick to fill in any gaps with more adhesive, for instance near where the GPS wires route under the board.

The watch code will allow you to adjust which LED is at 12 o'clock, so the orientation of the ring doesn't matter.

Allow the glue to set up for at least an hour before trimming, stripping, and soldering the ring's wires to pads on FLORA according to the circuit diagram. Load the NeoPixel test code to be sure the ring is connected and functionaing properly.

It turns out the wires around the outside of the circuit aren't super durable (catches on clothing), so if we were you or had this project to do over again, we'd solder the NeoPixel ring's wires via the inside of the ring before glueing the ring to FLORA.

The circuit is finished! Now let's make it a watch.

Assemble Watch

The watch circuit will be held in place by the small strap on a leather watch cuff. The USB port and JST port line up perpendicularly to the band for easy access, and the tactile switch is on the "top" side of the watch. This will point FLORA's onboard power switch towards you while wearing the watch.
Unthread the small strap from one half the cuff and lay it over the busy side of the FLORA board, between the USB port and JST battery connector. The tactile switch intersects with this strap for easy mode selection when you're wearing it.
Use two small strips of fabric to make "belt loops" for the circuit. Apply a small dollop of E6000 adhesive to either side of the USB connector and clip a fabric strips to FLORA with a binder clip. Wipe away and overflow adhesive.
Repeat with another belt loop to the other side of the USB port.
Line up the circuit with the band again, this time placing it between the circuit and the fabric strips.

Apply two more small dollops of adhesive, this time on either side of the JST battery connector, and stick the fabric down taught across the leather band.

Clamp with more binder clips and allow to dry for 24 hours.

Less glue is more! Check to make sure there's no adhesive touching the leather band. Your circuit should slide along the band freely so you can adjust it, so here's a place where being tidy really yields the best result!
After drying, you can remove the clips and trim the fabric close to the board. It should slide along the band but not be too loose or your watch will be floppy! If your fabric strips aren't tight enough, you can use a needle and thread to cinch them up now.
Glide your watch face toward the buckle side and thread the free end back through the cuff.

The Code

The FLORA NeoGeo Watch is very easy to use. It has three modes. To change between modes, press and hold the button for about 2-3 seconds. You can hold down the button and it will change from mode 1 to mode 2 to mode 3 and then back to mode 1. The three modes are:

  1. Watch Mode
  2. Navigation Mode
  3. Compass Mode

Watch Mode works by having showing the "hour hand" as an orange LED, the "minute hand" as a yellow LED, and if both "hands" are on top of each other, the LED will glow purple. When you first turn on your watch, you need to give the GPS a clear view of the sky. Once the GPS locks on, it will automatically update the time for you. Now, if you lose a GPS signal, it will still remember the time (until you disconnect the watch from power).

Navigation Mode works by pointing an LED in the direction you need to go to reach the coordinates you entered in the sketch. When you get close to your destination, the LED will change from yellow to red. You need to have a constant GPS lock for this mode to work.

Compass Mode works by always pointing north with a blue LED.

The code for the FLORA NeoGeo Watch is pretty simple and straight forward. We are using the standard Adafruit GPS Library, a Time Library, the LSM303 Compass Module Library, and the FLORA Pixel Library. You will find links to the libraries at https://github.com/adafruit/FLORA-NeoGeo-Watch.

Follow each library’s README file for more information about installing each library.

Follow the FLORA Pixel tutorial for more information about installing the library. Test out the pixel sample code to be sure your pixels are functioning properly.

Next, we need to test out the GPS module. Enter this code into the Arduino IDE and upload to your FLORA with the GPS module attached:

// test a passthru between USB and hardware serial
void setup() {
 while (!Serial);
 Serial.begin(9600);
 Serial1.begin(9600);
}
void loop() {
 if (Serial.available()) {
 char c = Serial.read();
 Serial1.write(c);
 }
 if (Serial1.available()) {
 char c = Serial1.read();
 Serial.write(c);
 }
}

To make sure your GPS has a direct view of the sky, hang your watch out the window (but don’t let it fall out). I used a USB extension cable so I could have the watch out the window but still plugged in to the computer!

Open the Arduino IDE serial monitor. You can access the serial monitor by clicking the magnifying glass icon to the far right of the top toolbar. Make sure the dropdown in the lower right of the serial monitor is set to “9600 baud.” If you see a constant stream of GPS data, your GPS module is correctly installed.

The next step is to test out the compass module. With the LSM303DLHC library (https://github.com/adafruit/Adafruit_LSM303DLHC) installed in your Adafruit Arduino IDE, open up the magsensor example, or manually enter the code below and upload to your FLORA.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LSM303_U.h>
/* Assign a unique ID to this sensor at the same time */
Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(12345);
void setup(void)
{
 Serial.begin(9600);
 Serial.println("Magnetometer Test"); Serial.println("");
 /* Enable auto-gain */
 mag.enableAutoRange(true);
 /* Initialise the sensor */
 if(!mag.begin())
 {
 /* There was a problem detecting the LSM303 ...
 check your connections */
 Serial.println(
 "Ooops, no LSM303 detected ... Check your wiring!");
 while(1);
 }
}
void loop(void)
{
 /* Get a new sensor event */
 sensors_event_t event;
 mag.getEvent(&event);
 /* Display the results (magnetic vector values are in micro-Tesla (uT))
*/
 Serial.print("X: "); Serial.print(event.magnetic.x);
 Serial.print(" ");
 Serial.print("Y: "); Serial.print(event.magnetic.y);
 Serial.print(" ");
 Serial.print("Z: "); Serial.print(event.magnetic.z);
 Serial.print(" ");Serial.println("uT");
 delay(500);
}

Again, open the serial monitor and make sure you don’t get the “Ooops, no LSM303 detected … Check your wiring!” warning. You should see the X, Y, and Z values change as you move your NeoGeo watch around.

Now that you have confirmed all of the sensors are working, it is time to modify the main NeoGeo watch sketch. Find this part of the code near the top of the sketch:

//--------------------------------------------------|
//                    WAYPOINT                      |
//--------------------------------------------------|
//Please enter the latitude and longitude of your   |
//desired destination:                              |
  #define GEO_LAT                44.998531
  #define GEO_LON               -93.230322
//--------------------------------------------------|
//Your NeoPixel ring may not line up with ours.     |
//Enter which NeoPixel led is your top LED (0-15).  |
  #define TOP_LED                1
//--------------------------------------------------|
//Your compass module may not line up with ours.    |
//Once you run compass mode, compare to a separate  |
//compass (like one found on your smartphone).      |
//Point your TOP_LED north, then count clockwise    |
//how many LEDs away from TOP_LED the lit LED is    |
  #define LED_OFFSET             0
//--------------------------------------------------|
We like iTouchMap for finding latitudes and longitudes online. Dump in a location, such as your home, so you will always be able to find your way home.

We also know that your NeoPixel Ring and compass sensor won't line up perfectly with our design (even our two prototypes didn't line up exactly). So, we made it easy for you to calibrate your watch. The first thing you want to do is calibrate your NeoPixel Ring. This is as simple as lighting up each pixel using the NeoPixel code and determining which pixel is your top pixel (from 0-15). In the code, it is set to pixel 1.

Next, you need to make sure your watch knows which way north is. This is really easy to do. When your watch is on, hold down the button until you get to mode 3, which is the compass mode. Then, using a compass on your smartphone, or the old fashioned kind, point your TOP_LED north. Count clockwise how many pixels away the lit LED is away from the TOP_LED. So, if you aim your TOP_LED north, and the LED 4 spots over (counting clockwise) is lit up, you would change the 0 in the LED_OFFSET code above and replace it with 4.

That's it, you should be ready to upload the code to your FLORA, and start using your NeoGeo Watch!

Wear it!

Plug in a tiny lipoly battery and tuck it into the cuff! Although you can place it directly behind the circuit, we liked it better tucked into one of the "side pockets" where the cuff overlaps the strap. A piece of gaffer tape holds the battery nicely to the strap, where it can be protected by the cuff.
FLORA's onboard power switch should still be accessible, hidden under the part of the watch closest to you. If you don't have nails, use a toothpick or other pointy nonconductive object to flip the switch!
The watch fetches the time of day from GPS satellites, so when it first powers on it needs to get a GPS fix by directly seeing the sky. Set it on your windowsill or go for a walk in the sunshine so your watch knows what time it is! It can take several minutes to first acquire a GPS fix, but only needs to do this once on power up. You can attach an optional backup battery to the GPS to keep its fix between battery charges, and tuck it in the opposite "side pocket" of the cuff or right behind the face.
Once the GPS gets a fix, the watch will display the current time, with one pixel color for the hours "hand" and another for minutes.
Press and hold near the top of the watch face to engage the tactile switch for a few seconds to change modes. Compass mode lights up blue in the direction of north.
GPS navigation mode points towards the coordinates you configure in the Arduino sketch, and grows redder the closer you get to your destination.
This watch is not waterproof! Take it off and power it down if you get stuck in the rain. Don't wear it while doing the dishes, etc.

Enjoy your new geo watch!