Hi, Welcome to a video tutorial from Robojax. In this video we are going to look at
Ublox Neo-6M GPS module to extract
Latitude and longitude using Arduino
this is made by Ublox. this piece. Somebody put on this board and selling ont
ON the internet for cheap.
There is not datasheet or information
They are selling it with a relatively small antenna.
this is standard antenna usually comes with GPS module with different housing.
It has a battery to hold setting and some data.
It has 4 pins.
There is VCC which is the + terminal, RX, TX, GND
RX is the input to receive commands to set parameters, clock of the GPS module
Or UART or other way to communicate.
This is TX this is the output pin of data. and then the GND is the ground pin of power supply.
For purpose of this video, I put a 4 pin header
Let me plug it int the breadboard . I have a video on how to use breadbarod. Link is below this video.
and this is the antenna.
I am setting close to the window about
a meter (100cm) away from the window. Hopping to get GPS signal here.
Let's have a look at some other other specs of this device
Let me just open the actual datashet.
This is the Neo-6 GPS module the module size is 16x 12.2. x 2.4mm
This the size of this module.
Neo-6 had different variations. G, Q, M, P, V and T
So we are looking at Neo-6M
This has a type number 001 which
is printed on the actual module here.
the most important data for Neo-6M here is the supply voltage
on this bullet show 2.7 to 3.6V
so this is the voltage range and
fortunately on Arduino we have 3.3V here
so you will find the 3.3V output on Arduino on this side.
There are so much information which are not of our concerns.
for new design you will need sensitivity and other characteristics.
the most important parameter to use this module is the navigation update rate
which is 5Hz. so 5 times in a second it updates the information.
this quiet fast comparing it with this which 1Hz
But without any configuration it goes to 1Hz which I am gonna show you soon.
On my oscilloscope and on the screen
Position accuracy is 2.5 meter
so whatever information you are getting it might be up to 2.5 meter off the actual location.
so + or - 2.5 meter
it has tones of inf oration
for programming and configuring
so I am looking at blink sketch
uploading it
The LED is blinking.
if we connect external LED to pin 13 we also will see that.
for initial test the Arduino should not have anything else. Specially
to connect it
connecting a wire from TX of GPS to TX of Arduino board through a 300Ω resistor.
I just put this resistor to
eliminate the current between two devices
after the resistor there I am connecting it there
Now for the ground , one of the ground GND pin from Arduino is enough
I just plugged into the GND. These lines are connected if you want o know.
Here serial monitor is opened (Click on Tools->Serial Monitor, to open it)
Okay, now you can see both wires.
I am just connecting the VCC to 3.3V
You can see the data is coming.
This is automatically sent without any programming to your screen.
The actual data will come when the blue LED turns ON
or it shows locks to the GPS Stream of data
Then we will get actual latitude and longitude
so it will take about a minute for GPS signal to lock.
Now look at my oscilloscope here
I am conning the Ground of my oscilloscope to the Ground on breadboard
to GND of Arduino
and also I am connecting the
oscilloscope probe to output of this
as you can see that is the data coming from GPS . This
is still missing the latitude and longitude
now the signal have been synced. Blue LED is blinking.
on the screen you see the data is coming.
let me click on "scroll pause"
this field has the latitude and the longitude
and also the latitude and the longitude is shown in GPRNC
here is the latitude
if you watch this video in HD,
you will be able to red the text.
it is shown in multiple places
some of these codes number of satellites for example
if you got with GGA, then yo will get the number of satellites
you can get from 00 to 22
let me just look here
so GGA, this shows here 3
this 4 is number of satellites. for example I am getting signal from 4 satellites.
it has altitude, it has tones of information
which we don't need them all.
to decode this
copy portion of it. After highlighting it, I'm pressing CTRL with C key
and there are tools online which I am going to provide you the links in the description
for example
this website has free NMEA net decorder
I am just pasting that data here (CTRL +V)
and then pars it and it shows you all
for example the time 16:20 UTC time
this shows the actual GPS latitude and longitude
and if you click you will be able to see it.
also in GPS world also has details
of those codes that I just mention.
you can get further information from there.
okay this is my
oscilloscope showing the signal form satellite
if Is stop it (capture it)
you will see the actual signal
Now I am removing this and connecting it to RX
now I am loading my code
the sources code for this video is provided at Robojax.com and below this video under the descriiption
to the Arduino
as you can see the light is there
and GPS is locked.
when loading the code to Arduino, disconnect the RX cable from the Arduino board.
I forgot to mention to disconnect RX cable from Arduino
i just reloaded the code.
now connect the cable to the TX from GPS to RX of Arduino
As you can see we are getting latitude and longitude and I
put big dividing line here
which is printed by this
I am going to explain all of this.
watch it in HD to read the actual data
let's go to the explanation of this
this is one of the line that I am trying to use and explain
I am looking at GPGLL line
the line that starts with $ sign and then GPGLL
this is the latitude
and after comma it has N, this refers from North
and then we have this value which is longitude
this is West.
this is the time
so we don't need then all. We are concerned with latitude and longitude
in the code here we have
all these
Click on link in the description of this video which will take you robojax.com/learn/arduino
let me explain it in a bigger text.
Sorry one more thing I have to mentions
at the bottom of this code I got this function from
Arduino website. So what it does is
When this code runs and if there is data in the Serial Input,
if Serial is available
Then this will set this STRING called "COMPLETE" equal TRUE
which I am going to use at the top of this code.
This code have been taken from here Arduino.cc the SerialEvent function
It has been described here.
and I copied and pasted exactly here.
and added my code in between
if you want to start from scratch, get it SerialEven from Arduino.cc website
and my code goes here and some other information which I am going to show you
in the setup() function.
okay. these codes are above the setup() function. I just put STRING
inputString as blank.(without any data) stringComplete BOOLEAN
these two are alrady there.
I have just added mine here STRING SIGNAL
so I want to target only $GPGLL data from satellite . so I stored this string here
inside the setup this was already there and I have not changed it.
it works perfectly as my Serial Monitor is set to 9600 Baud
and here if stringComplete is TRUE
this will be set to TURE when signal from GPS module is coming.
Then we can do all these calculation. So first things.
We pick 200 bytes of signal using this line
so this is holding our signal. The whole line.
This is holding all of this from here to here.
so this will be saved (in the iinputString)
and here we say go inside the inputString and start from character 0 and get only 6 character
of it and save it in BB
we check if BB is equal signal
ans signal is this
We are looking for the line which starts with GPGLL
We ignore the rest of data. we say if it is found,
As we are getting so much of other information.
when BB is equal this signal
GPGLL
then we extract 17 character starting from character 7.
now if you look at the signal,
and 0, 1, 2, 3, 4,5 6 and this "4" is the character 7
then 8, 9,....16 up to 17
so we get up to 17 character
and stare it in LAT which is latitude
and then we want ot get the character "periiod" or the dot.
from character 7 to 17 is stored in LAT variable.
then in LAT we want to find the position of dot or "period"
then we wan tot find the position of any zero at the begining of LAT string
and that position is stored in LATzero variable
then we check it if LATzero is equal zero
in some latitude in the world we will have zero in here.
that zero in google map will give issue so
so we want to make sure if there is zero, just remove it.
for example in my location here we have a zero.
if the zero is at the beginning
if first char is zero,
then we say take the latitude and start from 1.
and not from zero.
so if it has zero, it will be removed.
so we do the same for
we start from 20 to 31
that is for the longitude.
and this line prints --LAT-- and the next line
prints actual LAT value and then
which was this one
and this is a text again for --LON-- and value for Longitude and then w
and we print ======== so we know reading is ended.
then we empty the nputString because
making sure it is ready for the next reading
and we set stringComplete to FALSE
so when the loop goes again, inside the loop
this should be fresh data
as you can see we got latitude and longitude
so you can do many things with this and applications are countless
you can program this to
something can be triggered or SMS can be sent
using GPRS module
if this device is in a certain location.
you can program it for
Geofencing so you can create a fence
area and put all the coordinates of 4 points
and if the data is beyond those points, it should trigger
some event or take picture or send SMS or do something.
that is it. I will have more project related to this.
if you like this video please 👍 and if yo have not subscribed to my channel please do so now.
Subtitle typed on April 01, 2020 by Ahmad Shamshiri. This was very hard.