2014-06-11 The other day I found a bunch of cheap gps modules on ebay. Will they work?

The other day a got a bunch of Blaupunkt Travelpilot RNS 149 GPS modules with cables from ebay. Looking it up in Google quickly delivered the schematics. There are some differences in details, but the connector equals.

The pcb is 35 mm x 50 mm in size and has two large chip-on-board (cob) on the back side.

So the question is: can it be used with a micro controller? Short answer: yes. It is easy. I needed some parts, so I went to ebay and found some friendly chaps in china willing to send them to me. My micro controller of choice is an Arduino.

For physical connection there are two possible ways to go: use the connector or solder cables.

Connector: It is a 1.0 mm pitch 10 pins FFC/FPC connector. If you go that way I would suggest to buy a 1.0 mm to DIP adapter pcb and solder the connector on that pcb.

Solder cables: For your convenience I marked the test points. The ground point is one the back side, perhaps you find something alternative on the top side.

The pins are:

- pin 1 (/Reset) to +5 V (pull to GND to reset board)
- pin 5 (NAV_OUT) to serial pin rx
- pin 8 (+5 V) to +5 V
- pin 9 (GND) to GND
- pin 10 (VCC_ANTI) to +5 V (or lower depending on GPS antenna)

Pins count from left (1) to right (10) on the above image.

Antenna connector

I got the RNS 149 with a short pigtail connector that has a SMB male plug on the other end. So buy a active antenna with a SMB female jack connector or a SMB female jack adapter to whatever you need. GPS antenna should work with 5 V max.

The connector on board is a female Hirose U.FL. Don’t use this, don’t disconnect it (if you have the short connector cable). It is not specified for multiple dis- and reconnects, so avoid multiple changes.

Software

For a simple test I wrote a program that receives data from the RNS 149 and dumps it to the serial output of the Arduino.

Select
/*
Adapter:

 +5V an Pin 8
 Masse an Pin 9
 Receive an Pin 5
 Reset an Pin 1

*/

#include <SoftwareSerial.h>

const byte PinRX = 8;
const byte PinTX = 9;
const byte PinVss = 5;

SoftwareSerial rns149(PinRX,PinTX); // RX, TX

void setup()
{
  Serial.begin(57600);

  pinMode(PinVss,OUTPUT);
  StartModul();
}

void StartModul() {
  Serial.println();
  Serial.println();
  Serial.print("****BAUD: 4800 ");
  rns149.begin(4800);

  delay(500);
  digitalWrite(PinVss,LOW);
  delay(500);
  digitalWrite(PinVss,HIGH);
  Serial.print(" ");
  Serial.println("GO");
}

void EndModul() {
  rns149.end();
  digitalWrite(PinVss,LOW);
}

void loop()
{
  if (rns149.available()) {
    Serial.write(rns149.read());
  }
  if (Serial.available())
    rns149.write(Serial.read());
}

Result

The RNS 149 starts dumping NMEA data every other second or so.

Select
$GPZDA,,,,,,,,*48
$GPGGA,235959.0,3723.482,S,12202.258,E,0,0,1.00,-00002,M,000,M,,*58
$GPVTG,000.0,T,002.5,M,000.00,N,000.00,K*49
$PRB1,GP,0.0,19.9,16.9,16.9,16.9,0.0,0.0,22.9,S,8.1,29,0,0*2F
$GPZDA,,,,,,,,*48
$GPGGA,235959.0,3723.482,S,12202.258,E,0,0,1.00,-00002,M,000,M,,*58
$GPVTG,000.0,T,002.5,M,000.00,N,000.00,K*49
$PRB1,GP,0.0,19.9,16.9,16.9,16.9,0.0,0.0,22.9,S,8.1,29,0,0*2F
$GPZDA,,,,,,,,*48
$GPGGA,235959.0,3723.482,S,12202.258,E,0,0,1.00,-00002,M,000,M,,*58
$GPVTG,000.0,T,002.5,M,000.00,N,000.00,K*49
$PRB1,GP,0.0,19.9,16.9,16.9,16.9,0.0,0.0,22.9,S,8.1,29,0,0*2F
$GPZDA,,,,,,,,*48
$GPGGA,235959.0,3723.482,S,12202.258,E,0,0,1.00,-00002,M,000,M,,*58
$GPVTG,000.0,T,002.5,M,000.00,N,000.00,K*49

It works with TinyGPS instantly.