Find all your DIY electronics in the MakerShed. 3D Printing, Kits, Arduino, Raspberry Pi, Books & more!

The Data Dial Dashboard brings back the fun of old-school analog dial gauges while updating them with internet connectivity. In this project we will use an Arduino, Ethernet shield, and 3 servos to create a system for tracking global earthquake activity. The data are pulled from the USGS real-time data feeds page. With a little hacking, it is easily adapted to track your unanswered e-mail count, the speed of your internet connection, the price of rice in Rhode Island, or any other data you can scrape off the ‘net!



Step #1: On the case

Data Dial DashboardData Dial DashboardData Dial DashboardData Dial Dashboard
  • We'll start by building the case. You can cut the parts out of balsa wood by hand, as shown here, or, if you have access to a laser cutter, easily make them from plywood, acrylic, or some other material. Begin by downloading the templates, Arduino sketches, and other digital assets for this project from the MAKE Github repository.
  • Print out the paper templates and use scissors to cut out the individual parts, sparing the lines. Tape the templates to your balsa wood and cut around them with a sharp utility knife. Make each cut in multiple passes, rather than trying to cut all the way through in one stroke.
  • There are seven parts altogether: the large front bezel, the two mirror-image sidewalls, the bottom brace, and the three small spacers. Use your utility knife to clean up the rough cuts so the parts slot neatly together.
  • Test-assemble the case by slotting the sidewalls into the bottom brace, then the front bezel onto the sidewalls. Make sure the holes in the spacers are the same size as the holes in the front bezel.

Step #2: Get your glue on

Data Dial DashboardData Dial DashboardData Dial DashboardData Dial Dashboard
  • Using your paintbrush apply glue to the joints starting with the holes in the sidewalls and the tabs on the bottom brace. Glue the sidewalls to the bottom brace. Apply glue to the recesses on the front bezel and the sidewalls, then glue the front bezel in place.
  • Use a damp paper towel to clean off any excess glue that has been pressed out of the joints.
  • Apply glue to the back of the spacers and then press them onto the backside of the front bezel (the side with the bottom brace). Make sure the edges of the holes in the spacers and the holes in the bezel line up.
  • Check to make sure all the joints are tight, then set the case aside for 24 hours to let the glue fully dry.

Step #3: Make a double-power jumper

Data Dial DashboardData Dial DashboardData Dial DashboardData Dial Dashboard
  • The Ethernet Shield has two 5-volt pins, but for this project we need three, so we’ll make our own custom “Y” cable to split one of the five volt pins into two.
  • Use a razor blade to split the insulation covering the female connector on one of your jumper wires and peel it out of the way. Clip off the female connector from a second jumper wire (leaving a long wire with the male connector still attached). Strip 4mm of insulation from the end from which the female connector was removed.
  • Wrap the stripped wire around the exposed female header near the crimped part of the connector, and solder it in place. Be careful not to get solder in the connector or it may not join correctly with a pin.
  • Pull the insulation back down and secure it with a small piece of electrical tape or a fresh layer of heat shrink tubing.

Step #4: Stop: solder time!

Data Dial DashboardData Dial DashboardData Dial DashboardData Dial Dashboard
  • Break one 4-pin and two 3-pin sections off the header pin strip from the Ethernet shield kit.
  • Solder the two 3-pin strip headers right next to each other, as shown, into the two sets of adjacent holes that correspond to the Arduino's GND, GND, and 5V connections. Solder the 4-pin strip header into the holes on the Ethernet shield that correspond to digital pins 4, 5, 6, and 7.
  • NOTE: The header on pin 4 may be useful for testing and debugging but will not be connected during the build. It's a good idea to go ahead and attach it, but it's not strictly necessary.
  • Once all the pins are soldered, install the Schmart Board on the Arduino, making sure all the pins line up and connect properly. Connect your special "Y" jumper to one of the 5V pins, splitting it into two outputs, and then connect seven more normal M/F jumper wires to the other 5V pin, three of the GND pins, and digital pins 5, 6, and 7.

Step #5: Install the servos

Data Dial DashboardData Dial DashboardData Dial DashboardData Dial Dashboard
  • Plug in a GND jumper at the brown lead on each of the three servo connectors. Connect a 5V jumper to the red lead on each connector. Finally, connect pin 5 to the left-hand (from the front of the case) servo's yellow lead, pin 6 to the middle servo's yellow lead, and pin 7 to the right-hand servo's yellow lead.
  • Press-fit the servos into the three holes in the case front bezel. Each should fit tightly with just a little force. If the fit is too tight, open the hole a little with sand paper or a utility knife. If it's too loose, use some tape to "thicken" your servo.
  • If the servo arms are attached to your servos, remove them now with a small screwdriver.

Step #6: Add the dials and hands

Data Dial DashboardData Dial DashboardData Dial Dashboard
  • Print the dialface and indicator hand art onto rigid card stock and cut out each shape. Again, if you have access to a laser cutter, consider etching and cutting the art from plywood or plastic panel stock.
  • Rubber-cement the dialfaces over the holes in the front bezel, as shown. Make sure to align the indicator hand holes with the servo shafts, and that the center of each dial's sweep range is pointing straight up.
  • Don't put the servo arms back on the servos just yet. First, glue an indicator hand to each arm with rubber cement. Be careful to closely align the hand with the servo arm's centerline.

Step #7: Calibration

Data Dial DashboardData Dial DashboardData Dial Dashboard
  • Connect your Arduino to your computer with a USB A/B cable. then open ServoCalibration.ino and upload it to the board. One at a time, the servo shafts should sweep one direction, then the other, and finally stop. When they stop they are at their "zero" positions.
  • Reattach the servo arms (and indicator hands) to the servo shafts. Try to get the pointer on each as close to its dial's zero position as possible. (A little bit under zero is better than a little bit over.)
  • If any of your pointers are aligned under zero, adjust the "zero" variable in the Arduino sketch code that corresponds to that dial. For example, adjusting "zeroC" from 180 to 178 will increment the zero position of the right-hand "C" servo by two degrees.
  • NOTE: Keep track of any calibration changes you have to make to the code, as you'll need them in the next step.

Step #8: Final setup

Data Dial Dashboard
  • Connect the Ethernet Shield to your local network with an ethernet cable.
  • Open the DataDial.ino arduino sketch and adjust any of the three "zeroX" values to match the numbers from the calibration step.
  • Upload the sketch to your Arduino and sit back and watch as the dials begin reading out the tectonic status of our planet.
  • Once the code is uploaded you disconnect the Arduino from your computer and use the wall power supply to power the device. Just make sure you keep it plugged into your network.


If your dials don't move into place, open the Arduino IDE's "Serial Monitor" window at 115200 baud and check the output. Here you can see status updates as the device attempts to connect to the web to download the data it needs to update the dials. Once it has made a connection, the dial output values will also report in the Serial Monitor window.

If you see the error message "Failed to configure Ethernet using DHCP," check to make sure your Ethernet cable is plugged in and your network is configured to use DCHP.

If you see "connection failed," try to visit on a computer connected to the same network equipment as the Data Dial Dashboard. If you don't have any problems opening the site this way, wait a few minutes to let the device try again.

Matt Stultz

Matt Stultz

Matt Stultz is the leader of the 3D Printing Providence group, founder of HackPittsburgh, and a MakerBot alum, with experience in multimaterial printing and advanced materials.


  1. Firdaus says:

    hi. what would it takes for me to modify this project to be an internet speed monitor? i dont have the clue to fetch information about my speedtest on my local internet connection. Would you help me for it.? my email is

    1. jkctech says:

      yeah, same thing for me.
      please leave a reply if someone got the code

      1. cbm104 says:

        There’s a link in the text but it could do with having it’s own step or tab.

    2. Austin Beer says:

      Where’s the code?! Particularly for an internet speed test, I’ve been hunting this down for months!!!

      1. For a standalone internet speed monitor, you might want to have a look at my “fritzmeter” project on github
        The arduino code is written to get the info from an AVM FritzBox Router (popular in Germany), but may work for other routers using UPNP with some modifications.

        1. Austin Beer says:

          gah, so awesome. thanks dude

          1. Glad you like it. I put up a video for ATMEL’s AVRHero contest here:
            I admittedly edited out some nasty fits of the cheap servos. If you’re not on facebook (to vote for my project), you’ll also find the fritzmeter video on youtube.

  2. jkctech says:

    where is the code??

  3. Toby says:

    seems like a great idea. I’m wondering, is there a way to do this as simple to do on a raspberry pi?

  4. son of the son of a sailor says:

    Sorry if this is written out somewhere or obvious to a more experienced maker, but what voltage should be selected on the AC adapter?

    Also, I am not getting anything printing out in the serial monitor–neither errors nor live data.

    Lastly, why not have links inside the page open in new windows or tabs, and I realize the fun in the old-timey style of the video, but I have to agree with another comment above about it detracting from the delivery of the project after awhile.

    1. The arduino comes with a 5V voltage regulator on board. The recommended input voltage is 7-12V DC, although you’ll probably get away with 6-20V. Cranking up the voltage will only heat up the voltage regulator. If your AC adaptor has a 7,5V setting, that will be fine.
      Some cheap servos require very high currents causing voltage drops resulting in resets. If you have jerky movement of your servos, it is better to power them independently from the controller. Keep in mind that if the servos are powered separately from a 5v source, the controller and the servos still need to share a common ground rail.
      The other thing you may want to check is, if the output current of your AC adaptor is sufficient. The easiest way to do that is to check with a multimeter if the voltage drops below specs.

      1. Oh, and silly as it may sound: run the sketch without the servos connected and check the output on the serial console. Having the arduino on the USB port of your PC, you don’t even need to connect your AC adapter.
        If that doesn’t work, check your Arduino and your ethernet shield with simpler sketches.

        1. son of the son of a sailor says:

          Okay, I’ve tried what you suggested with success, and still nothing on serial with this sketch. I think my problem might be the mac address, which I’ve left untouched from the original sketch. (I am using the Seeed Studio v1.0 shield, which does not have a sticker to tell me what the mac is.) How do I determine what the mac address actually is? Or is the value there (0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED) usable?

          1. I have downloaded the sketch and tried it out. The only thing that caught my eye is that the serial speed is set to 115200 baud in the sketch. AFAIR the standard speed is 9600, so if you get nothing or gibberish you may not have the speed setting in the lower right corner of the serial console windows set to 115200 baud.
            The MAC address is software defined, so the old DEADBEEFFEED joke is not an issue. You can check in your router’s dhcp table if an address has been assigned.

  5. son of the son of a sailor says:

    Hmmmm… Besides the baud speed, which I have set to 115200 in the serial window, not entirely certain I understand what you’re saying about MAC. It’s okay to leave the original value there?

    1. I am out of ideas now. The mac address is not an issue as long as it is unique on your local network. If I run the sketch it looks like this: (I pressed the reset button after the 5.40, so it is twice the normal output.
      You might want to check your router’s DHCP server table if an IP (IPv4) address is issued for DE:AD:BE:EF:FE:ED. If the example sketches of the ethernet library like DHCPAddressPrinter work ok, I can’t see why this sketch shouldn’t. I use the original arduino ethernet shield (R3) but the ethenet chip is the same as yours. I can’t have an SD-Card in the slot, probably an SPI ChipSelect line issue. I didn’t really care to investigate in detail. As you don’t have that, that can’t be the issue either. – Sorry I couldn’t help.

      1. son of the son of a sailor says:

        Well, I figured it out, I think. I should have known this was the cause, since it was the only variable left: I was using Sparkfun’s Redboard (I didn’t want to drop the extra dough on an Uno if I didn’t have to). Turns out, now that I have an Uno, the serial monitor is working just fine. I probably should have mentioned this sooner. It’ll take me just a little while longer to re-connect the components, but I think we’re in business. Thanks for all your help troubleshooting. Any idea why the Uno vs. Redboard would be an issue?

        1. Good to hear you’ve got it working! What still puzzles me is that the example ethernet sketches worked with your old setup. I only had a quick glance at the redboard schematic, but found nothing obvious that would be likely to cause problems. Let me know if you find it out.