sub-$50 DIY 10hz Bluetooth GPS Receiver

Full Disclosure: I got this project from Aidan over at miataturbo.net. The original thread is here. There is also a thingiverse page on this, which includes all links plus a 3D drawing to 3D print an enclosure for it.

If you do HPDEs, autocrosses, etc, you will likely eventually find yourself wanting to get good lap timing. It used to be that you had to buy a standalone system to do this, which cost thousands of dollars. These days, you can get away with an app for your phone. There are several popular ones, including Harry’s Lap Timer and RaceChrono, available for both iPhone and Android. These apps will show you not only your lap times, but also more detailed information, so you can determine which lines are fastest and help improve your driving.

By default, these apps use a phone’s built-in GPS to get your location and speed. The issue with this is that most phones have a 1hz GPS unit. This means that they can get updated coordinates once per second. While this sounds good, it’s actually too slow for good resolution. Instead, it’s better to get one of the many available 10hz or better GPS units and connect them to your phone via bluetooth.

Unfortunately, the cheapest existing receivers are in the $80+ range, and they aren’t very reliable. However, dozens of companies these days make small GPS, bluetooth, and other modules that can be easily hooked together. This project involves 3 such components (Bluetooth, GPS, and USB), costing a total of about $20, and soldering them together.

Source: http://www.thingiverse.com/thing:698168

Source: http://www.thingiverse.com/thing:698168

The diagram, taken from the thingiverse page, illustrates what will happen. You buy the 3 modules: bluetooth, GPS, and USB. Ground and power from the Bluetooth and GPS modules are connected to ground and 5V power on the USB module. Then, TXD (transmit) on the Bluetooth module is connected to RXD (receive) on the GPS module, and vice-versa. At the end of the day, your phone connects to the bluetooth module, and it forwards data to and from the GPS module. Easy peasy.

I’ll note here that this module does need to plugged in, there is no battery. Adding a battery, particularly the charging circuit, would add complication. Honestly, I find it easier to hardwire this once and forget it.

(Note: I’ve seen discussion on this project centering around using 5V power to the HC-06, stating it requires 3.3V. This isn’t quite true – the module itself does require 3.3, but the commonly purchased submodule, such as the I bought, includes a voltage rectifier allowing it to take between 3.3 and 6V, as it says on the underside. Further reading here.)

Shopping List

(Note: The price of these parts fluctuates _all_ the time. You can shop around Amazon, Ebay, Adafruit, Digikey, Mouser, etc and try to find the lowest prices – don’t forget shipping! A lot of these components ship from China, as well, so be prepared for slow ship times.)

Parts:

  • HC-05 or HC-06 Bluetooth Submodule (Either one will work, I found the HC-06 a little bit cheaper)
  • Reyax RY8253F GPS Module The older RYN725AI also works but is discontinued, as a commenter below pointed out. You want a GPS module that can do 10hz, has serial, has flash, and is powered by 3.3V to 6V with 3.3V logic.
  • USB Mini Breakout Board (Although I wish I’d gotten a USB Micro Breakout Board, since I have more of those cables – should also work)
  • Some double-length header pins
  • Replaced by Reyax RY8253F above: RYN725AI GPS Module (I accidentally bought the RYN25AI, which is a bit cheaper but has no flash or EEPROM to permanently store the 10hz setting. Some versions of the RYN25AI do have EEPROM – make sure you get one of these. If you make this mistake, you’ll simply have to reprogram the chip for 10hz when you use it, as the battery only lasts about a day. You cannot add EEPROM on afterwards.)

You also need a few tools, if you don’t already have them:

All of the parts required

All of the parts required

Here’s a picture showing all of these parts ready to go.

Fixing the Bluetooth module

The HC-06 comes with pins pre-installed

The HC-06 comes with pins pre-installed

The HC-06 will come with 4 pins preinstalled in VCC, RXD, TXD, and GND. This is fine for VCC, but we want to put some pins directly from the other 3 into the GPS module. We also want the chips (and the antennas) on each module to face away from each other. As such, you’ll have to remove three of these original pins.

Use the smallest snips you have to separate the plastic

Use the smallest snips you have to separate the plastic

You need to separate the little plastic pieces, whatever they’re called, to get the 3 other pins out while leaving VCC in place. You could slide all 4 plastic pieces off of the pins, if you want. I find it easiest to grab some snips like the ones pictured, and simply clip them apart.

With the board held down, heat with the iron and pull with the pliers

With the board held down, heat with the iron and pull with the pliers

After clipping them apart, I clamped the board to my bench. I used the soldering iron to heat the solder, and then used the pliers to pull it out. If you have desoldering wick, that’s even better. Use the iron to heat the solder, and let the wick suck it up. If I did this again, I would do it this way, because it will make the next step easier.

3 Pins in RXD, TXD, GND

3 Pins in RXD, TXD, GND

Same 3 pins on the other side - GND is much longer

Same 3 pins on the other side – GND is much longer

Once the original pins are removed, we can put in pins of our own. You want them to go through the board, with the GND pin being one of the double-length header pins in the shopping list. The other two (TXD and RXD) can be normal length, like one of the many pins that ships with the components. As I said, if you used a desoldering wick earlier, the pins should now be nice and free of solder. If you didn’t, they’re probably full of solder, in which case you’ll have to do your best to heat the solder up while you ram the pin in with some pliers.

Putting a pin in VDD on the GPS module

Pin for 5V Power in VDD

Pin for 5V Power in VDD

We’re nearly ready to hook the GPS and Bluetooth modules together. Before doing that, though, we should put a pin in the GPS module for 5V power while we still have easy access. This should be another double-length pin, with most of the length towards the bottom, so we can bend it to hook into the USB breakout module later.

Combining the Bluetooth and GPS modules

Stacking the modules

Stacking the modules

Side view showing clearance between the two modules

Side view showing clearance between the two modules

It just so happens that RXD, TXD, and GND on these boards line up so that we can just stack them as shown. The three pins soldered to the bluetooth module earlier will stick straight into the GPS module pins. As in the original diagram from earlier, RXD on Bluetooth goes to TXD on GPS, TXD on Bluetooth goes to RXD on GPS, and GND on Bluetooth goes to GND on GPS.

I also allowed a bit of a gap between them. Truthfully, they should also have a sheet of insulator as well, but I didn’t do that. Presumably You could still wedge something in there after soldering.

Both pieces combined

Both pieces combined

Once this step is complete, you’ll have something like the above. Notice the ground and +5V pins are quite a bit longer than the other two. That’s so we can hook them to the USB breakout module in the next step.

Hooking up the USB breakout module

The USB module hooked up

The USB module hooked up

The USB breakout module only has two pins we care about, VBUS (+5V) and GND (ground). The other pins are for data, and we are only using the USB cable for power. I simply bent the extra-long pins over with pliers until they would hold the USB breakout module where I wanted it, as shown. The GND pin was a little bit short, so I actually soldered extra pin to the board, bent that, and connected it to the original GND pin on the GPS module.

In any event, as long as the wiring looks like the above, it should work.

The Bluetooth module needs a 5V wire

The Bluetooth module needs a 5V wire

Of course, the Bluetooth’s 5V module was on the wrong side, so it didn’t line up nicely. I simply took a short piece of 22 gauge wire and soldered it to the the top side of the USB breakout board, where the 5V pin sticks out. Then, I soldered the other end to the original VCC pin that came with the Bluetooth module. (The one that was not removed at the beginning of this article.)

Setting the GPS receiver to 10hz

Once the GPS receiver is ready, it still needs to be set to run at 10hz. By default, the module only does 1hz, which is no better than the average phone. I wrote up how to do this in a separate article.

Using the GPS receiver

To test it out, I used RaceChrono. It and Harry’s Lap Timer are the two most popular options, at least for Android. RaceChrono has a free version to try, though, while Harry’s doesn’t. To use it, simply add the HC-06 in your phone’s bluetooth menu like any bluetooth device. The default pin is 1234. (You can change this by hooking up a serial connection to the HC-06 and sending some AT commands, but I didn’t bother and this is out of the scope of this article.)

Then, in RaceChrono, go to “Settings”, “Device 1”, and change it to external GPS. Pick the HC-06 out of the menu. If you go back to the main screen and hit Start, it will connect to the GPS Receiver and the bluetooth light will turn solid red if you did everything right. You can hit the up arrow in the bottom left to see GPS details. Once it obtains a satellite fix, you should see the top right area show it is reading at 10hz. If it says 1hz, check that you didn’t goof something up.

Conclusion

Done

Done

And there it is. Note that your phone or laptop won’t necessarily stay connected to it after pairing. I found that my phone didn’t actually connect until I opened RaceChrono, specified it as my external GPS, and actually started timing. In other words, it doesn’t bother connecting until something actually tries to communicate with the receiver. Once I did all of that, it worked perfectly.

In a future article, I’ll talk about making an enclosure for it. I am choosing to do something a little different than the 3d printed solution available on thingiverse.

Subscribe
Notify of
guest

43 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback

[…] thingiverse page is that I went into a lot more detail on how to solder it up. Writeup is here: sub-$50 DIY 10hz Bluetooth GPS Receiver – Did It Myself I also wrote up how to set it to 10hz in detail: Setting Bluetooth GPS Receiver to 10hz – Did It […]

Kerly o Mastoras
Kerly o Mastoras
6 years ago

Hi
Nice project! Can I add this to the rest and have an accelerometer as well? Hi should I connect it?
Thanks!

https://rover.ebay.com/rover/0/0/0?mpre=https%3A%2F%2Fwww.ebay.com%2Fulk%2Fitm%2F221539755286

James Spadaro
James Spadaro
6 years ago

I have not done this, but you might be able to get away with an accelerometer with serial output, like this:
https://www.ebay.com/itm/MPU6050-Serial-6-axis-Accelerometer-Gyroscope-Module-for-Arduino/322763231536?hash=item4b26301130:g:vdcAAOSwCkZZOSYV

Then you would wire the accelerometer in instead of the GPS module.

As far as running an accelerometer AND a GPS module on the same bluetooth-serial adapter, that won’t work. The bluetooth module will connect to one serial device only. Also, this depends on whatever you’re using to connecting to the accelerometer supporting reading accelerometer data from a bluetooth-serial device.

Dang
Dang
6 years ago

Hi, thanks for the detailed writeup. It seems like the RY725xx series of GPS modules are now obsolete. Do you know if what I think the replacement RY825xx modules would work as a substitute?

REYAX RY825CF
http://reyax.com/products/ry82510/
https://www.ebay.com/itm/183150562491

Thanks!

James Spadaro
James Spadaro
6 years ago
Reply to  Dang

Yes, that looks like it should work. Please let me know how it goes if you try it.

Martin
Martin
6 years ago
Reply to  James Spadaro

just ordered RY8253F 3v3 logic and flash RY825CF is 12v logic , have spoke with Reyax 🙂

James Spadaro
6 years ago
Reply to  Martin

Excellent, thank you for the tip! I’ll update the article.

Martin
Martin
6 years ago
Reply to  James Spadaro

Reyax send me by mistake CF module so can confirm thats wrong one 🙁 no comunnication (12v logic) aw replacment of 3F

Billy
Billy
6 years ago

HI James, thanx for the detailed info and what a great project. I want to try build one for my super bike track bike! I have assembled the parts and started testing. I can pair the bluetooth module and in Race Chrono it indicates that it is receiving data but no satellite info? I ordered the Reyax RY825CF gps module and requested the one with serial output and onboard flash? Any ideas? The gps is powered on and the red led starts flashing so its is seeing the satellites?

James Spadaro
6 years ago
Reply to  Billy

Unfortunately, if you read above comments, the RY825CF appears to be 12V, and the USB module in this article is providing 5V. I suppose you could try to get 12V power to it – your bike presumably has 12V, but be aware that you’d have to have a voltage regulator. Probably easier to buy the RY8253F instead, which can run on 5V.

To work like in the article, you need the RY8253F, which I’ve linked at the top of the article as well. Sorry for the confusion!

Martin
Martin
5 years ago
Reply to  James Spadaro

no both can be powered by 5v , but the logic in CF is 12v communication data TX RX , and HC05 HC06 communicate at 3.3v logic thats why RY8253F is required 🙂 recived replacment yesterday works at 17Hz no problem, baudrate have set up for 115200 https://photos.app.goo.gl/LPT4U36a95iunVLJ6

James Spadaro
5 years ago
Reply to  Martin

Ahh, OK – thanks for the clarification!

Martin
Martin
5 years ago
Reply to  James Spadaro

you can change title 🙂 for 17Hz 🙂 GPS Reciver see my photo https://photos.app.goo.gl/LPT4U36a95iunVLJ6

James Spadaro
5 years ago
Reply to  Martin

Nice!

Martin
Martin
4 years ago
Reply to  Martin

What title to change to get 17hz?

Klister
Klister
5 years ago

Hi James, I’d like to build one of these myself for use while flying commercially. (I work for an airline) My question is if you know if I can use this with Google Maps on Android? That would be my preferred method but any mapping app that allows offline useage would be fine.

James Spadaro
5 years ago
Reply to  Klister

It looks like it should work, but it’s a little bit convoluted. You set it your phone to “use a mock location” and then install another app that sets the mock location to your external GPS’ real location. I haven’t tried this personally, but it looks like it would work.

https://nerdynerdnerdz.com/4053/pair-external-bluetooth-gps-receiver-with-android-for-superior-navigation/

Alternatively, any app that natively supports bluetooth GPS (like RaceChrono does) should work. Sorry I’m not more help, I’ve always just used my built-in GPS for navigation.

klister
klister
5 years ago
Reply to  James Spadaro

Thanks for the feedback. I will go ahead and try it. Basically I travel overseas a lot for work and would like to try to get the GPS position while on a plane using an android tablet. Generally the slow 1hz gps frequency in phones makes them notoriously difficult to get a lock because of how far you travel in that second.

James Spadaro
5 years ago
Reply to  klister

That makes total sense. As noted above, it looks like the new part number for this GPS supports up to 17hz, in case you want to upgrade. I still mean to update my app to program it to 17hz, on my to-do list.

I’d be interested to hear if this works for you.

Vinicius
Vinicius
5 years ago

Hey man. Congrats for you project and the very detail tutorial. I will youse your tutorial to do a similar project, but I have some doubts.
First, I need change the GPS Module, because the model used by you is very dificult to find in my country. My ideia is use this gps (https://pt.aliexpress.com/item/32948172227.html?spm=a2g0o.cart.0.0.4dfc3c00iBUxGt , with NEO M7N). Do you think it meets the requirements?
Second, I will use the project in a kart, so I need create with a portable size. For this, I need include a source of energy, like a batery. Could you give me a tip for this?
Thanks,
Vinicius

James Spadaro
5 years ago
Reply to  Vinicius

Hi Vinicius,
It looks like this is probably only 1hz GPS: https://www.circuitspecialists.com/content/481525/NEO-6M-V2.pdf

Otherwise, it looks like it can probably be wired the same way, although I can’t say for sure without trying it. But you really want 10hz or better GPS update frequency.

Vinicius
Vinicius
5 years ago
Reply to  James Spadaro

Hi James
This link that I sent to you from Aliexpress sells 3 different models: NEO 6M, NEO 7M and NEO 8M. I will buy the NEO 7M model: https://www.u-blox.com/sites/default/files/products/documents/NEO-7_DataSheet_%28UBX-13003830%29.pdf
The model NEO 7M has 10hz update frequency.

James Spadaro
5 years ago
Reply to  Vinicius

Oh, I see. Very nice, much better deal than the reyax unit if it works then. It looks like it should work, but I can’t say for sure.

Regarding power for it, most drones use lipo batteries. I assume they would work for this as well, although they might be overkill. I don’t know enough about it to make any recommendations. I would ask someone into RC / drones.

Vinicius
Vinicius
5 years ago

Hey guys. I need help!! I bought all components and, before I solder all things, I connect all components with jumpers to test, but I have a problem and I don’t find the solution. I turn on the circuit, but the Bluetooth device don’t shows in the device list in my cell phone. I don’t know what to do. Can you help me? There is a configuration to do before?
Thank you!!
This is the photo from my test: https://ibb.co/vQrkYS9

James Spadaro
5 years ago
Reply to  Vinicius

Is the LED flashing? Flashing LED indicates that it is ready to pair.

Is this the first time you’re pairing with it? You may have to hook up a serial connection to the module to fix it.

Vinicius
Vinicius
5 years ago
Reply to  James Spadaro

The LED is flashing, like I saw in many videos on Youtube.
This is the first time that I try pair with my cell phone. I bought this component yesterday and this is the first time that I try use. I probably will buy a TLL component to do a serial connection.
I’m so sad because in your tutorail looks like so easy, and I don’t know what to do or try.

James Spadaro
5 years ago
Reply to  Vinicius

Yeah, that is a bummer. Do you have another phone/tablet/laptop you could try pairing with instead?

Vinicius
Vinicius
5 years ago
Reply to  James Spadaro

I try using 2 cell phones with Android and a PC with Wondows. No one of them can discovery the HC-06.
It is a bummer because all of videos and tutorials on web show that is very simple, almoust plug and play.

James Spadaro
5 years ago
Reply to  Vinicius

That is frustrating. I assume you also tried pairing with the GPS disconnected, just to make sure that isn’t causing a problem?

In any case, I don’t think I have any good suggestions, except that you can try a serial connection and maybe your HC-06 module is a dud. Sorry I can’t be more help, but good luck!

James Spadaro
5 years ago
Reply to  Vinicius

Also, you’re sure you’re getting a voltage to it within the tolerated range? If you have a variable power supply handy, you could try 3.3V instead of 5, just to see…

Vinicius
Vinicius
5 years ago
Reply to  James Spadaro

My first test was using only the HC-06, without the GPS. How didn’t work, I try add the GPS module to the circuit, and continous not working.
I will get a Arduino with a friend to connect and try change the setup from the HC-06. It is a try, but…

Cava C
4 years ago

Hello, very usefull thank you, just some questions, you suggest to set the measurement period to 100ms so to have 10hz, ok, but what if I set 10 ms? 100hz? I think it’s no possibile so my question is: what is the limit? You suggest to use 10hz, Martin achieved 17 Hz, do you think is possibile something more? If no, why?
Thank you
Claudio.

James Spadaro
4 years ago
Reply to  Cava C

The hardware is the limit, you can’t set it to anything you want. Older modules supported up to 10hz, while newer modules support up to 17hz.

Martin got 17hz with a newer module.

Cava C
Cava C
4 years ago
Reply to  James Spadaro

Thank you James for your fast replay, ok I got it, last question, do you think it makes sense try to use, instead of Reyax RY8253F, a Venus838FLPx-L?

https://altiforce.net/shop/prod-ic-gps-50hz-venus838flpx-l/

It’s a 50hz gps receiver, what Do You Think?
Thank you so much!!

James Spadaro
4 years ago
Reply to  Cava C

That’s a standalone integrated circuit, so you’d have to design a board for it and SMD mount it. Based on the questions you’re asking, I would suggest sticking with the pre-packaged Reyax board.

Cava C
Cava C
4 years ago
Reply to  James Spadaro

Thank you James, thanks a lot

Luke
Luke
4 years ago

Hi guys,
i tried to build a similar 10hz GPS antenna (chips: GPS NEOM8-N + Bluetooth JDY-30). But i performed a factory reset through the U-CENTER interface. Now it never locks on any satellite.
Have you any suggestions?

Yuri
Yuri
2 years ago

Hello everyone, first I’d like to thank Spadaro for the very good tutorial.

As all of you already noticed, the GPS module used here is not available anymore, at least for me in Brazil. Then I decided to research an option and I found the NEO-7M module.

This module has the possibility to configure 10Hz of GPS position refreshing, and it already has a MicroUSB port, which means the supply voltage can be connected directly to it, the USB breakout board is not needed anymore. Check out my video presenting this module:

https://youtu.be/OLtj7QJKc7o

The Bluetooth module is supplied by the GPS module via the pins. The connection between them:

Bluetooth VCC——VCC GPS NEO-7M Module
GND——GND
TX———RX
RX———TX

Simple like that. Check out the videos demonstrating the assembling and the first tests:

https://youtu.be/cm_cItKuOvY

https://youtu.be/QHOXy8wTrTQ

WhatsApp Image 2022-02-15 at 09.01.05.jpeg
Adriano
Adriano
1 year ago
Reply to  Yuri

Olá Yuri. Vi seus vídeos dos componentes e também vi um vídeo seu de kart com gráficos do traçado. Queria saber se deu certo usar esse NEO-7M no kart. Tem uma precisão boa? Você usou para cronometragem também?

Júlio César Damasceno manoel
Júlio César Damasceno manoel
1 year ago

olá amigo, tentei fazer a configuração para 10hz e o aplicativo não consegue fazer a configuraçao, voce pode me ajudar?

Júlio César Damasceno manoel
Júlio César Damasceno manoel
1 year ago

hello friend, I tried to make the configuration for 10hz and the application cannot make the configuration, can you help me?