Skylab SKM53 GPS Module

Gps Banner
I got this GPS Module from ebay at just under RM 80. It’s not cheap but this is the cheapest solution to get GPS signal for any electronic projects.

The module has a built-in GPS antenna and also the Skylab SKM53 chip.

The moment when I tried to plug the module on a breadboard, I realised that the pitch of the pins is not of regular size, its 2mm instead of the standard 2.54mm that we all get used to. Bummer. (Pitch is the distance between each pins, the standard distance is 0.1 inch which also translates to 2.54mm)

I had to make a PCB that will convert it into the standard 2.54mm pitch.

Without a laser printer, I had to trace the PCB on a transparency sheet.

As usual, I’m using the photoresist method.

Applying some minor corrections before etching the board.

Had to draw some dots to guide my drilling process.

The final product.

I’ll admit that it’s not the best soldering work. Just wanted to get it up and running.

I modified a sketch that I found online to display the GPS data on an LCD.

The sketch requires two libraries :

1. SoftwareSerial (included in Arduino 1.0 and above)
2. TinyGPS

Download Sketch

The GPS module takes around a minute to get a lock on the location. The LCD will then display the latitude and longtitude of the current location.

To find out where the corresponding latitude and longtitude is, you can enter it into the search bar of http://maps.google.com in the form of latitude,longtitude.

 

  1. Mahmoud02-15-2014

    Please tell us

    Which Arduino board you have used ?
    How much time required to get values ?
    You tested the module outdoor or indoor ?

    I`am testing the module using Arduino UNO or DUE
    I tried a lot of codes but my result shown like this..

    Latitude : 0.0000000 :: Longitude : 0.0000000
    Latitude : 0.0000000 :: Longitude : 0.0000000
    Latitude : 0.0000000 :: Longitude : 0.0000000

    do you know what is the problem?

  2. Wan11-21-2013

    hello.can i know where i can buy the gps receiver skg13c and also the compass board in malaysia.hope u can help me.thanks.

  3. Zx lee06-27-2013

    I just look through your post, you didn’t use any level shifter from the GPS output? From the data sheet, the output is 2.85V LVTTL logic level.

    • Wai Hung06-27-2013

      I think the module I have already have a level shifter.
      You can refer to this data sheet in page 3.
      http://ber.googlecode.com/files/SKM53_DS_030609.pdf

      TXD and RXD is 70 percent x 5v which is still more than 3V.
      5V MCU will treat any signal > 3V as high so no problem.

      • Zx lee06-28-2013

        Okay, thanks for the info :D

        • Zx lee06-28-2013

          Then I would like to ask what footprint do you use to convert the 2mm spacing pins to 2.54mm spacing pins?

          • Wai Hung06-29-2013

            It’s under con-headers-jp library in Eagle.

  4. shadi06-21-2013

    please anyone help me>>>
    i use arduino mega 2650
    and i connect RX on gps>>>>>>>TO TX3 (14)on arduino
    and i connect TXon gps >>>>>>>TO RX3(15) on arduino
    so in software
    NewSoftSerial GPS(15,14);
    but these reading shown ((Latitude: 0.0000000 :: Longitude: 0.0000000))
    i go out and wait the gps about 15 min and nothing
    whats the problem?????????????????

    • waihung06-21-2013

      Hi. You don’t need to use the NewSoftSerial library as the Mega have more serial channels.

      For convenience of using back the same code, you must use pins that are Interrupt capable.
      They are pins 2, 3, 21, 20, 19, 18 on the Mega. If you use back these pins, you don’t need to change the code that I’ve written.

      The list of Interrupt pins are available here :
      http://arduino.cc/en/Reference/attachInterrupt

      Hope this helps.

      • shadi06-22-2013

        Thanks(( Waihung)) for your reply>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        i connect the RX on gps to the 18 on arduino
        i connect the TX on gps to the 19 on arduino
        the code without lcd became:

        #include
        #include
        unsigned long fix_age;
        SoftwareSerial GPS(19,18);
        TinyGPS gps;
        void gpsdump(TinyGPS &gps);
        bool feedgps();
        void getGPS();
        long lat, lon;
        float LAT, LON;
        void setup(){
        GPS.begin(9600);
        Serial.begin(9600);
        Serial.begin(9600);
        }
        void loop(){
        long lat, lon;
        unsigned long fix_age, time, date, speed, course;
        unsigned long chars;
        unsigned short sentences, failed_checksum;
        // retrieves +/- lat/long in 100000ths of a degree
        gps.get_position(&lat, &lon, &fix_age);
        // time in hh:mm:ss, date in dd/mm/yy
        /*gps.get_datetime(&date, &time, &fix_age);
        year = date % 100;
        month = (date / 100) % 100;
        day = date / 10000;
        hour = time / 1000000;
        minute = (time / 10000) % 100;
        second = (time / 100) % 100;
        Serial.print(“Date: “);
        Serial.print(year); Serial.print(“/”);
        Serial.print(month); Serial.print(“/”);
        Serial.print(day);
        Serial.print(” :: Time: “);
        Serial.print(hour); Serial.print(“:”);
        Serial.print(minute); Serial.print(“:”);
        Serial.println(second);
        */
        getGPS();
        Serial.print(“Latitude : “);
        Serial.print(LAT/100000,7);
        Serial.print(” :: Longitude : “);
        Serial.println(LON/100000,7);

        }
        void getGPS(){
        bool newdata = false;
        unsigned long start = millis();
        // Every 1 seconds we print an update
        while (millis() – start < 1000)
        {
        if (feedgps ()){
        newdata = true;

        }
        }
        if (newdata)
        {
        gpsdump(gps);
        }
        }
        bool feedgps(){
        while (GPS.available())
        {
        if (gps.encode(GPS.read()))
        return true;
        }
        return 0;
        }
        void gpsdump(TinyGPS &gps)
        {
        //byte month, day, hour, minute, second, hundredths;
        gps.get_position(&lat, &lon);
        LAT = lat;
        LON = lon;
        {
        feedgps(); // If we don't feed the gps during this long routine, we may drop characters and get checksum errors
        }
        }
        still display :((Latitude: 0.0000000 :: Longitude: 0.0000000))
        what do you thing???

        • Wai Hung06-22-2013

          Your code seems correct. Have you tried going outdoors?
          The GPS chip won’t get signal if you’re inside a building or house.

          • AdI07-01-2013

            im also facing this kind of problem..my code is exactly like your code. i stay at outside almost 20 min but still got (Latitude: 0.0000000 :: Longitude: 0.0000000). im using the DFRduino romeo v2 board. so what is the problem actually?

            • Wai Hung07-01-2013

              Since your Romeo board is based on an Uno/Duemilanove, you should only use Digital Pin 2 and 3 for the GPS RX/TX because only both of these pins are interrupt capable.

              • Adi07-02-2013

                oh really..i connected those on digital pin 8 and 9. ok, thanks for your help.

                • Adi07-08-2013

                  im suing pin 2 and 3 for GPS RX/TX but still showing the same result. do you have another solution?

  5. kngdavid04-12-2013

    Hey, thanks so much for this helpful information. I’ve gotten my SKM53 hooked up. I am reading my latitude and longitude, but my date and time only displays the year and something funny happens with the seconds. It displays 1-9 seconds and then it goes blank for over half a minute, only to come on between 40-50 seconds to display random characters until it reaches 0 and starts displaying 1-9 again. Nothing else of the date and time shows. What might be going on? Thanks!

  6. Rodrigo Carpe03-14-2013

    It worked … I could not imagine using the pins 10 and 11 as Rx and Tx …
    Thank you!

    • Wai Hung03-15-2013

      Yes, with the software serial library you can set different pins to be the RX and TX.
      I’ve not used an Arduino Mega before so I’m not sure whether my code will work on it or not since I’m using an UNO.

      Anyway glad you worked it out :)

  7. Rodrigo Carpe03-14-2013

    The pin 1280 has:

      “0″ Rx
      “1″ Tx
    “18″ Tx1
    “19″ Rx1
    “16″ Tx2
    “17″ Rx2
    “14″ Tx3
    “15″ Rx3

  8. Rodrigo Carpe03-14-2013

    Hi Waihung!

    I believe my problem is related to the Tx and Rx ports used. How do I change them? It is directly in the code or have to change them in the library SoftwareSerial.h?

  9. Rodrigo Carpe03-13-2013

    Hello friend!

    Very cool your code …
    I’m testing with a MEGA1280, however, serial LCD and only show:
    Latitude: 0.0000000 :: Longitude: 0.0000000

    Any idea what’s wrong?

    Hug!

    Rodrigo Carpe
    Brazil

    • waihung03-13-2013

      You need to go outside to get a GPS signal. It might take up to 2-3 minutes depending on the satellite signals.

Leave a Reply