Grinkevich Photography

Grinkevich Photography header image 2

Nikon D90 Homemade GPS

December 5th, 2010 · 87 Comments · Nikon D90, Projects

I decided to make my own GPS for my Nikon D90.  Nikon wants well over $200 for a GPS unit.  The parts I used cost roughly $40 in total, much less expensive than Nikon’s solution.  The D90 accessory plug outputs +5V and expects 5V TTL logic.  I was able to output +3.3V logic from my Arduino and it worked, but the GPS unit’s threshold must have been lower and the D90 didn’t accept the data.  Below are the details on how I completed the task. I have left out the tracing and testing (e.g. checking to make sure I didn’t connect two pins or ground anything out) phases of the project in this writeup, but needless to say you should test and check your modifications with a multimeter.

Remote Shutter Release

I started with a cheap knockoff remote shutter release cable from Ebay; cost $5-$6.

10 Pin Connector

The connector needs to be cut apart since the the wire only has the pins soldered for the remote release (3 wires).

10 Pin Connector

The outer molding removed.

Nikon D90 10 Pin Connector (Side)

After careful cutting the connector has been completely exposed.

Nikon D90 10 Pin Connector Pinout (Front)

Here is the pinout of the connector for the D90.

Nikon D90 10 Pin Connector Pinout (Bottom)Nikon D90 10 Pin Connector Pinout (Top)

The corresponding solder pads, I’m not sure if all the connectors will have the same location of pads.

Interface Wire

Soldering the molex connector wire onto the D90 plug.  I decided to use this approach instead of hard wiring into the GPS for three reasons.  I wanted to be able to disconnect from the GPS unit, still be able to use the USB output from the GPS and if the connector broke I could make a new jumper wire easier.

Arduino Emulating GPS Data

I wanted to test the connector after I finished soldering it, so I setup my Arduino to output some emulated NMEA GPS sentences.  The D90 accepted the Arduino’s 3.3V logic.

GPS Board

After tracing the pins from the PL2303 Serial to USB converter I was able to find larger pads to solder the +3.3V and GPS Data.  The +5V is used for powering the GPS and as a reference voltage for the logic level converter.  The 3.3V is used as reference for the logic level converter.  This GPS unit cost $30 shipped off Ebay.

GPS and Logic Level Converter

Here is the Sparkfun logic level converter hooked up to the GPS.  The converter needs +5V and +3.3V as reference voltages to do the conversions.

Sparkfun Logic Level Converter

Closeup of the logic level converter.  Cost under $2.

Finished GPS

Here is the completed GPS.  I didn’t take any pictures of soldering the USB connector.  Since this picture I have epoxied the cover back into the connector to add strength and to prevent short circuiting.  I would not connect the GPS to the computer and camera at the same time.  If you do you will just want to connect the ground and GPS data lines and NOT THE +5V.  You really don’t want the a voltage differential to go into your camera or vice versa.

Real GPS Data

And we have real GPS data!

All things considered the project was definitely worth it and made me exercise some of my EE skills from college.  I still need to figure out how I am going to mount the GPS to the D90.  So now I will be able to geotag my photos when I am out taking pictures and won’t ever forget where I took one again.

Tags: ···

87 Comments so far ↓

  • George

    Ahh, reminds me of good old senior design project days. Very nice write-up. Wish my Olympus eVolt was enable to encode GPS data into photos.

  • Max

    Brilliant! I had thought about doing something similar but hadn’t find a cheap way around the proprietary connector. I didn’t realize that they were using that slot for remote triggers. I wonder if you could track down a manufacturer that would pin-out all the connections to a cable?

    I’ve been thinking about doing some interesting things w/ the USB port, and would love to vampire-off the 5V of the GPS port. Any idea how much current you can sap off it?


    • dan


      I haven’t found anything short of the cable Nikon sells that you could cut in half.

      I just took an amp reading and the GPS draws roughly 50mA. I don’t know how much you can pull on that pin. The +5V is always on, even when the camera is off. I think there is another pin that can output the +5V with the “auto meter” option in the GPS menu but then the GPS would have to re-acquire the GPS fix.

  • Fernando Lamarca (FLA)

    Great job …
    Thanks for putting the text clearer picture of the original.
    Forgot password Flickr and I can not access my web.
    See the link to Nikon with the progress of my work


  • Robert

    This is awesome. Gonna have to give this a go if my Garmin Edge 705 doesn’t work.

    Great write up!

  • Rafal


    On my D90 on pin as you describe +5V I have 6,5V. Is this pin connected directly to battery?
    Is in D90 another pin with exactly +5V?

    I am going to connect this GPS to camera.

    Do you have idea how to connect it to D90? How make DC stabilizer and converter for different voltage level between GPS and camera?
    Could you help me and give some advices.

    Best regards,


    Great job !
    I would like to do the same, but I don’t understand why do you not use directly the +5V of the camera to power the GPS ? Why using a converter in 3,3v ?


    • dan

      I am using the 5V to power the GPS. The GPS chip outputs 3.3V TTL and the D90 expects 5V TTL, so that is why I used the logic level converter.

      • DOUCET

        Okay, but I still don’t understand the use of the 3,3V output’s
        Maybe it’s the connections that I’m not sure..
        It’s not enough to connect the 5V power and the ground to the GPS and the GPS data to the camera ?

        • dan

          The GPS I used was a USB GPS and I had to find the data out from the actual GPS chip which is 3.3V. The output from the GPS chip is connected to a PL2023 serial to usb converter that is at 5V, but you can’t use USB signals for the D90.

          • DOUCET

            Okay, so if I well understand, you need to convert the GPS data in a 5V signal in order to be accepted by the camera ?

          • dan

            Correct, the D90 expects 5V logic, even though most 5V logic devices can accept 3.3V logic, but the D90’s thresholds must be higher.

  • LouiZo

    Thanks for your article that describe the pinouts! I’ve just done a test with a Pharos GPS-500 and the same connector you have (with a shutter cord). The power on my side is 6v and Pharos output is 3.3V, but plug directly, it works fine! no need to have a level shifter, at least on my D3100 😉
    Thanks again !

  • Wells


    I got a GPS module, it output 4800 baud serial signal, and I found it has a ST232B ic to transform TTL signal to RS232 signal, so I line out the ttl signal from PIN12 of ST232B, the TTL signal is 5V, but D90 could not find the GPS device.

    I connected Vcc to GPS module +5v
    GND to GPS module GND
    GPS Data to GPS module ST232B pin 11 (TTL output).

    what’s wrong with my device?
    my arduino can use TinyGPS library to got GPS data from my GPS module.

    Can you provide the arduino test sketch for refference.



    • Wells


      I found my problem~
      I connected the gps data pin to the ST232B pin 12.

      I confirmed with the ST232B datasheet, found that it’s the ttl input pin. so it’s my mistake, now my GPS module works!


  • Dave

    Here’s a suppier for the connector on a basic lead.

    • dan


      That looks like it just has pinouts for the shutter and focus, you need other pins for the GPS to work.

  • Bernd

    Hi nice job!

    Anyone having some info on how to make a bluetooth module for the nikon D90 to connect to various external gps loggers , like the I-blue , qstarz and so on.

    Thank You

  • Luc

    Hi, nice job, very usefull !

    Tested on a Nikon D5100 , just work fine !

    If this can Help for D5100 users :
    – Vcc is 6V an permanent
    – Gps data in is internally pulled up to 3V, so you can use a simple NPN transistor to translate signal from RS232.
    ( for example a 2N2222 with a 10K resistor on base, emitter to gnd an collector directly tied to Gps input : tested OK with a Garmin GPS )

    • Rahul

      Hey there, thanks for the tip.. My camera doest recognise anything. is it because of level shift? can you elaborate on circuit for level shifter using 2n2222?? thanks

  • DIY Nikon D5100 GPS | Cyrozap's Tech Projects

    […] the GPS from here and the pinout data for the camera connector (with a lot of other useful info) here. Note: on the Flickr photo, read my comment for clarifying info and […]

  • zequ

    hello i need one gps for my nikon D80 you can help me??

  • Josh

    Hi Dan,

    I’ve re-wired up a shutter-release cable, and I’d just like to emulate some GPS positions for my research. Can you give me an idea of the NMEA sentences you used?

    I’ve been using Serial.begin(4800); and Serial.println(); with some of the examples at but while the camera seems to detect the GPS messages – it allows me to go into “position”, which it didn’t before I debugged my code – it is set to “—, —” for everything.

    Kind Regards,

  • Jeffrey

    This is excellent!

    I wonder, would it be possible to log the position of the camera in space and write that into the exif data?

    that would be great. Do you know if it would be possible, or will only GPS info work?

    • dan

      The camera only accept NMEA sentences. If you formulated the proper GPRMC and GPGGA sentences it would accept them.

  • Jacob

    I have been looking for something like this on and off for nearly two years, I sold my D90 some time ago, and I am now going to get a D7000. I am a tinkerer of sorts, and I do enjoy building things myself, however, with regards to GPS and the construction done here, it seems I am a bit in the dark.

    I am wondering if you could possibly give me a bit more detail than what you have on your site. i.e. I am a bit confused about the USB to serial adapter, what is the purpose, from what I can see, the navibe GPS unit uses USB, and should not require any sort of adapter. So a bit more detail would be greatly appreciated… If you would like, I have submitted my email and would thoroughly enjoy learning a bit more from you if you have the time.


    • dan

      The cameras accept TTL level logic from the GPS. You can’t hook up a USB GPS directly to the camera. The adapter you see is a logic level converter that brings the 3V logic to 5V logic so the camera can use the data. Some people have been able to directly hook the GPS up without the logic level converter.

  • Emppu

    Jacob, you just have to bypass the USB converter, since the camera accepts rs-232 serial data at TTL (5V/0V) levels, so you cannot hook the USB cable directly to the camera. Or you could use a GPS module that outputs TTL level signal natively.

  • Accessory for Nikon D7000 – Part 1 – GPS receiver

    […] pins. You need just three of them: VCC, Ground and Data In (RX). Therefor I used the pinouts from dan’s blog: Nikon connector from top (taken from Nikon connector from bottom (taken from […]

  • Eric

    Hi Dan,
    thank you for sharing. Do you think it could work if instead of using a logic level converter you used a transistor (provided the GPS has its own energy source)
    |————| ______| +5V |
    |GPS | / | |
    | | |/ | CAMERA |
    | TTL out|——-| | |
    | | |\ | |
    | ground |_____\______| GPS in |
    |_______| |__________|

    thank you

  • Daniel

    Hi I have a D3200 my gps is producing the following sentences at 4800 baudrate

    My camera recognizes a connected gps but no location data is displayed.

    • dan

      It shows a fix. Do you have a way to simulate data with an Arduino? I had issues with the voltage thresholds and had to use the logic level converter.

      • Daniel

        Hi dan,

        I’m using software serial on my arduino to read from the gps and hardware serial to send to camera. So I don’t think it is a logic level issue.

    • Mickey

      Did you fix it? I have same issue. The module is SiRFiii TTL 4800bps

    • Daniel

      I needed at least 10 satellites before my camera would acknowledge my gps location.

      • Daniel

        A clarification for anyone interested it ended up being a problem with my gps modules formatting. The satellite count needs to be 2 digits for camera to recognise it. eg 03 instead of just 3

        • Dándor

          Hi Daniel,

          Thanks for the info, probably I have the same problem. Can you tell us which exact NMEA data field does the camera looks for? And how did you fix it? Does your gps receiver have some option to send the correct format, or you fixed it differently (eg.: fixing the format in a microcontroller code, etc.)?

        • Artek

          Daniel, thanks to your hints and my own investigation I managed to build my own GPS module based on the FGPMMOPA6C GPS module manufactured by Global Top (Taiwan) which I purchased from local distributor ( ).
          When I launched the trial on my desk I experienced the same behaviour as you described – my Nikon D3100 could not interpret the NMEA GGA message properly. I used Hyperterminal and did read a bunch of messages from GPS module and discovered that the field with number of satellite was formatted as one digit. I sent that sample to Global Top along with problem description.
          I must say Global Top guys are fabulous – within next few days they delivered modified firmware which appeared to work at first glance (previously they also delivered firmware with 4800 bps transmission, standard is 9600) !
          Initially I thought they would not even react but I got very positively surprised by Global Top customer oriented approach. Thanks to that I avoided using a message translation module which further made the whole project extremely easy to accomplish, with only a few additional components.
          Collection of project pictures including schematics can be fund here:

          Besides the outlined module I also used a cheap ‘hot shoe’ as a housing (it had some unwanted holes which I filled in with epoxy glue and sprinkled over with black varnish) and Phottix GPS cable for Nikon.

          Whoever is interested in more details, I am reachable on email: sp3loz(#!$) (replace the stuff in brackets with the ‘at’ sign).

  • Magrioteli

    That was very nice done!

  • Ilia

    Hi all,

    I have a D7000, I’m using a level converter and still have a problem – the GPS is blinking, meaning the camera sees the GPS but the blink never stops, meaning I don’t get a signal. This happens for both the converted signal and for the 3.3v signal. Does anybody have an idea?


  • Ash

    Hi Dan,
    Thank you for such an excellent tutorial. I wonder if the Nikon D7000 has the same connectors. Can you tell me which shutter release you used? It seems someone else found one but you said that won’t work. Also, will a baud rate of 9600 work? that’s the GPS I have.

    • dan


      I used a knock off MC-DC2 off Ebay, which should work with the D7000 after you hack it apart like I did. The data rate has to be 4800 BAUD in TTL serial not RS232.

  • Eric

    Hi Dan,
    I see that we need 5v for the ttl signal, but do you know of much curent we need to output, (and what would be the max value as well).
    I want to transfer the signal from a phone audio jack, using an octocoupler.
    I will reinject the 5V from the camera directly into the gps ttl input (thru the octocoupler that will be driven by the phone )
    But I am not sure I will have enough current.
    Would you know how much current you are transfering to you gps input?
    thank you

    • dan


      I’ll hook it up to my multimeter when I get home tonight.

      EDIT: The whole GPS uses 45 mA and the data line uses a max of 0.55 mA. I accidentally shorted +5V to the data line and the GPS light lit up, which was interesting since I thought it only lit up once it received a valid sentence.


  • Aftermarket GPS units for Geotagging on Nikon Cameras | Gough's Tech Zone

    […] fact, after trying all of these units, it might just be better to build my own using the details here, and a very sensitive Mediatek based GPS unit which I have had great success with, coupled with a […]

  • lauri

    How should i connect the gps unit to arduino to get the gps data out of it.
    Which are the tx and rx pins on the gps board?
    i couldnt get the data to arduino from that gpsdata pin it just shows nothing on serial monitor. Im using the tiny gps library.
    if anyone can help me please answer to my email.

  • Josh

    Hi Guys,

    I’m just gathering all the parts I need to attempt this little project, what I would like to introduce is the GPS’s own power supply, so as not to drain the camera battery on a day out shooting.

    What are people’s thoughts on introducing a small USB battery pack into the mix???

    I could then mount the USB device to the battery pack and try and find an old hot shoe slide to mount to the underside of the battery and BAM, it mounts nicely on top and does not kill my camera battery….

  • Josh

    This is another blog I was using… The EM-406A is the gps unit inside the bu-353 USB dongle I’m pulling apart to salvage.

  • chake

    Nice to meet you.
    I was successful in my camera(Nikon D5100 & GMS6-CR6).
    I owe my success to you.
    Sincerely I thank you.

  • Shane

    Hi all,
    I’m new to electronics and want to use this mod with a high end GPS receiver.

    As a test bed, I am wiring it to my Nikon D3200 camera’s GPS port to Geotag the imagery as the frames are fired from a third party software\hardware package.

    Can you please clarify my understanding regarding the wiring for the GPS please.

    GPS output signal…
    I have an RS232 signal (not TTL) from the GPS receiver which can output GPGGA and GPRMC at 4800 baud rate, 1 Hz update. The GPS receiver has its own external power supply.

    I have modified an MC-DC2 remote switch to trigger the camera via external software and hardware and want to pickup on the camera GPS pin for the signal from the GPS receiver.

    In order to get the GPS signal into the camera, do I simply have to convert the RS232 signal from the GPS to TTL 5v logic using something like below?

    and connect the output TTL signal and a ground to the camera GPS pin and ground?

    appreciate your help!


  • Shane

    Hi Dan,
    Thanks a lot for the quick reply. I’ll let you know how it goes. Its all theory at this stage 🙂

    I plan to use an Ashtech Z-Xtreme survey receiver.

  • Rahul

    hello, nice project.. I own a d3200 and want to use arduino to emulate NMEA.. can you provide the sample sketch? or .ino file.. thank you

    • dan

      I used static sentences that were replayed. There are plenty of gps simulator sketches if you do a Google search.

  • Rahul

    hi.. I am trying to emulate NMEA sentences using a usb-tty converter that can be configured to 5V logic. I have a nikon d3200. I wired the Tx of ttl to gps pin of mc-dc and am using serial monitor to send NMEA sentences. e.g $GPRMC,081836,A,3751.65,S,14507.36,E,000.0,360.0,130998,011.3,E*62
    However, the camera doesn’t do anything, no response. The position tab in GPS menu is graded out. Any clue? is it because of code or hardware? can u recommend any software to continuously send NMEA sentences using usb-tty converter??
    Regards, Rahul.

  • Robert Morrison

    I know this page and comments are ancient, but it has some useful information so I thought I add what I have discovered:

    I’m connecting an adafruit ultimate gps to a Nikon D800,

  • Robert Morrison

    Cont’d from immediately above.

    I’m connecting an adafruit ultimate gps to a Nikon D800 but starting with an arduino (an ESP8266) to simulate the gps initially.

    1) I’m using the sparkfun level shifter to deliver 5V logic to the camera, but I suspect its probably not necessary, as 3.3V logic should be enough to register as a ONE even with the camera expecting 5V logic;
    2) Dan is correct that you only have to deliver GPGGA and GPRMC NMEA sentences to the camera, but they have to be fully formed and correct sentences, INCLUDING a valid checksum. Some of the example sentences I initially tried from the intertubes had an incorrect checksum and the camera recognized gps data being delivered, but would not give a position fix;
    3) 4800,8,N,1 no parity are the only serial setting that will work. There are suggestions (again on the intertubes) that the camera will auto-negotiate a baud rate with the sender, and I do not believe this is correct. Serial.begin(4800); will correctly configure the arduino to send 4800,8,N,1;
    4) So long as the sentences are fully correct as NMEA sentences, the exact timing of the data delivery does not appear to matter — I think most inexpensive gps units deliver position data at about 1Hz, but for testing with the arduino, the camera doesnt seem to care;
    5) the adafuit gps come configured for a 10Hz position update, which cant be done at a pokey 4800 baud, so you need to slow this gps unit down to something like 1Hz position update timing.

  • Robert Morrison

    Here are the NMEA sentences I used for testing with the arduino, including correct checksums (checksum is immediately after the *):



    $GPRMC, 161229.487, A, 3723.2475, N, 12158.3416, W, 0.13, 309.62, 120598, , *10

    there are NMEA checksum calculators on the internet (the checksum is the XOR of the sentence) that will spit back a valid checksum for any NMEA sentence.

  • Robert Morrison

    SORRY: second NMEA sentence above was the BAD one with the wrong checksum. Here is the correct:


Leave a Comment