DIY GPS receiver modul reader (R1513B GPS MODULE)

Tertarik dengan maraknya pemberitaan dan teknologi telepon genggam dengan kemampuan GPS berikut saya share project yang sudah lama tersimpan mengenai GPS receiver module reader. Saya memiliki beberapa GPS module sejak zaman rockwell board trus menyusut dan menyusut sampai bisa diselipkan ke balik hp atau bahkan ballpoint. (Jupiter board, WD-G-ZX4120, R1513B)

GPS Board

Secara singkat GPS receiver module bekerja dengan menerima isyarat pada frekwensi tertentu, sinyal dan data yang di pancarkan dari sejumlah satelit GPS. Satelit-satelit ini bergerak dalam pola yang teratur mengelilingi dan seolah menyelimuti bumi seperti jaring hingga mampu memberikan sinyal pada seluruh permukaan bumi. Sinyal dan data yang di pancarkan oleh satelit-satelit itu lalu dihitung dengan metode triangulasi hingga didapatlah koordinat pada suatu titik.

satelite map

GPS receiver modul yang akan saya gunakan menggunakan chips SIRF. Perhatikan tabel berikut yang membedakan jenis NMEA informasi yang di keluarkan GPS receiver sesuai dengan standar NMEA2.0

detail informasi mengenai NMEA bisa di peroleh di link berikut

Name Garmin Magellan Lowrance SiRF Notes:
GPAPB N Y Y N Auto Pilot B
GPBOD Y N N N bearing, origin to destination – earlier G-12’s do not transmit this
GPGGA Y Y Y Y fix data
GPGLL Y Y Y Y Lat/Lon data – earlier G-12’s do not transmit this
GPGSA Y Y Y Y overall satellite reception data, missing on some Garmin models
GPGSV Y Y Y Y detailed satellite data, missing on some Garmin models
GPRMB Y Y Y N minimum recommended data when following a route
GPRMC Y Y Y Y minimum recommended data
GPRTE Y U U N route data, only when there is an active route. (this is sometimes bidirectional)
GPWPL Y Y U N waypoint data, only when there is an active route (this is sometimes bidirectional)

Cukup dengan menghubungkan antena (aktif atau pasif) dan supply module sudah secara priodik mengirimkan informasi terkait dengan data-data GPS dengan format sbb:

GGA essential fix data which provide 3D location and accuracy data.
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
Where:
GGA Global Positioning System Fix Data
123519 Fix taken at 12:35:19 UTC
4807.038,N Latitude 48 deg 07.038′ N
01131.000,E Longitude 11 deg 31.000′ E
1 Fix quality: 0 = invalid
1 = GPS fix (SPS)
2 = DGPS fix
3 = PPS fix
4 = Real Time Kinematic
5 = Float RTK
6 = estimated (dead reckoning) (2.3 feature)
7 = Manual input mode
8 = Simulation mode
08 Number of satellites being tracked
0.9 Horizontal dilution of position
545.4,M Altitude, Meters, above mean sea level
46.9,M Height of geoid (mean sea level) above WGS84
ellipsoid
(empty field) time in seconds since last DGPS update
(empty field) DGPS station ID number
*47 the checksum data, always begins with *


GLL – Geographic Latitude and Longitude
$GPGLL,4916.45,N,12311.12,W,225444,A,*1D
Where:
GLL Geographic position, Latitude and Longitude
4916.46,N Latitude 49 deg. 16.45 min. North
12311.12,W Longitude 123 deg. 11.12 min. West
225444 Fix taken at 22:54:44 UTC
A Data Active or V (void)
*iD checksum data

GSA – GPS DOP and active satellites
$GPGSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39
Where:
GSA Satellite status
A Auto selection of 2D or 3D fix (M = manual)
3 3D fix – values include: 1 = no fix
2 = 2D fix
3 = 3D fix
04,05… PRNs of satellites used for fix (space for 12)
2.5 PDOP (dilution of precision)
1.3 Horizontal dilution of precision (HDOP)
2.1 Vertical dilution of precision (VDOP)
*39 the checksum data, always begins with *

GSV – Satellites in View
$GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75
Where: GSV Satellites in view
2 Number of sentences for full data
1 sentence 1 of 2
08 Number of satellites in view
01 Satellite PRN number
40 Elevation, degrees
083 Azimuth, degrees
46 SNR – higher is better
for up to 4 satellites per sentence
*75 the checksum data, always begins with *

RMC – NMEA has its own version of essential gps pvt (position, velocity, time) data
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
Where:
RMC Recommended Minimum sentence C
123519 Fix taken at 12:35:19 UTC
A Status A=active or V=Void.
4807.038,N Latitude 48 deg 07.038′ N
01131.000,E Longitude 11 deg 31.000′ E
022.4 Speed over the ground in knots
084.4 Track angle in degrees True
230394 Date – 23rd of March 1994
003.1,W Magnetic Variation
*6A The checksum data, always begins with *

VTG – Velocity made good.
$GPVTG,054.7,T,034.4,M,005.5,N,010.2,K*48
where:
VTG Track made good and ground speed
054.7,T True track made good (degrees)
034.4,M Magnetic track made good
005.5,N Ground speed, knots
010.2,K Ground speed, Kilometers per hour
*48 Checksum

untuk membaca informasi diatas saya bangun sistem sebagai berikut:

  • ATMega32 (saya juga pasangkan GSM Modem pada module, namun tidak dibahas pada posting ini)
  • 2×16 Char LCD
  • R1513B GPS Module
  • GPS external active antenna
  • 1x Serial Port to GPS module
  • 1x Serial Port with  RS232C

GPS board + Antenna + Microcontroller

software akan membaca dan melakukan parsing dari data serial diatas kemudian menampilkan pada LCD atau mengirimkan kembali ke informasi tadi ke device lain seperti pc atau aplikasi peta, atau mengirimkan via serial bluetooth sehingga PDA atau ponsel menjadi memiliki fasilitas GPS.

‘*******************************************************************************
‘ CAR 01
‘ ATMega32
‘ 20×4 LCD
‘ GPS + GSM Module
‘*******************************************************************************
$regfile = “m32def.dat”
$crystal = 1159200
$baud    = 38400
$swstack = 32
$hwstack = 32
$framesize = 32

‘*******************************************************************************
‘ config pin
‘*******************************************************************************
Config Lcd = 16 * 2
Config Lcdmode = Port
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.6

Dim Sdat As Byte
Dim Res As String * 96
Dim Nmea(15) As String * 10
Dim Dcount As Byte
Dim Scount As String * 2
Dim Sat_count As Byte
Dim Lat As String * 12
Dim Lon As String * 13

‘*******************************************************************************
‘ Main
‘*******************************************************************************

Cls : Cursor Off
Locate 1 , 1 : Lcd “CAR TRACK 01”
Waitms 500

Open “coma.0:9600,8,n,1” For Input As #2
Waitms 1000

Do
Res = “”
Do
Sdat = Inkey(#2)
Select Case Sdat
Case 0
Case 13
Case 10 : If Res <> “” Then Exit Do
Case Else
Res = Res + Chr(sdat)
End Select
Loop Until Sdat = 10

Nmea(1) = “”
Dcount = Split(res , Nmea(1) , “,” )
Lat = Mid(nmea(3) , 1 , 2) + Chr(223) + Mid(nmea(3) , 3 , 2) + “,” + Mid(nmea(3) , 6 , 4) + “‘” + Nmea(4)
Lon = Mid(nmea(5) , 1 , 3) + Chr(223) + Mid(nmea(5) , 4 , 2) + “,” + Mid(nmea(5) , 7 , 4) + “‘” + Nmea(6)

Select Case Nmea(1)
Case “$GPGGA” : Cls
Locate 1 , 2 : Lcd Lat ; ” ” ; Nmea(8)
Locate 2 , 1 : Lcd Lon
Print Res
End Select
Loop

mungkin kalau ada kesempatan akan saya bahas bagaimana menambahkan GPS receiver ke camera DSLR nikon (D200 keatas) agar ada informasi koordinat di data EXIFF sebuah foto (what a nice geo- tag) .

semoga bermanfaat

Dian Kurniawan

Car Engine Monitor #1

Ide untuk membuat sesuatu terkait dengan mesin mobil diawali oleh permintaan kakak laki-laki saya yang sangat menyukai mobil tua, yang oleh saya seringkali dianggap lebih banyak membawa masalah ketimbang memudahkan kehidupan. Dia meminta saya untuk melakukan sesuatu dengan elektronika sehingga berguna untuk mobil tuanya, yaitu sebuah VW beetle buatan tahun 1960-an.

bug

 

engine

clean old dashboard

 

spechless

 

 

Setelah melakukan sedikit review dan diskusi singkat, ada beberapa point yang menurut saya bisa saja ditambahkan untuk vintage car, yaitu:

  • Digital RPM meter/Tachometer
  • Digital engine/oil temperature monitor
  • Electronic ignition system
  • Replace carburetor system with injection system

Sesuai dengan urutannya,  modifikasi/tambahan yang saya sebutkan diatas berurut dari yang paling mudah dilakukan hingga yang tinggi tantangannya.  Berikut akan saya bahas satu persatu.

1. Digital RPM meter/Tachometer

Kebanyakan “vintage car” belum menyediakan instrument untuk memonitor jumlah putaran mesin (RPM = Rotate Per Minute). Saya kira akan sangat memudahkan (mungkin karena terbiasa) bila pada saat mengemudikan kendaraan kita bisa mengetahui kondisi putaran mesin.  Dari Tachometer ini sekilas kita juga bisa mengetahui kesehatan atau kondisi mesin kendaraan kita. Beberapa hal yang terkait dengan nilai bacaan tachometer adalah:

  • Iddle/stationary RPM, pada saat mobil dalam menyala tetapi tidak dalam kondisi berjalan berapakah nilai bacaan RPM yang tepat? Hal ini tidak sama untuk semua kendaraan, namun masing-masing manufaktur sudah mendefinisikan pada masing-masing jenis mesin.
  • Curva perbandingan antara jumlah putaran mesin dengan torsi yang dihasilkan.

  • Fuel consumption terkait dengan point diatas.
  • Batas maksimum dan usia kerja, oli, dan fast moving komponen mesin.
  • dan lainnya

Ada beberapa teknik yang umum digunakan untuk membaca putaran mesin dari sisi sensor untuk membaca pulsa, yaitu :

  • Electric direct couple dengan tegangan dari primer koil ignition. Artinya,  kita melakukan kopling langsung dengan tegangan primer di platina. Pada primer koil ignition yang terhubung dengan kontak platina akan terdapat tegangan pulsa dikarenakan memutus sambungan platina pada saat bekerja untuk menghasilkan tegangan primer koil iginition bagi busi.

direct coupling

  • Electric inductive couple. Letaknya tidak terlalu jauh dari direct couple,  namun secara induktif  dengan menggunakan lilitan kita membaca induksi tegangan sekunder dari ignition atau katakanlah kita mengambil pulsa dari salah satu kabel busi.

inductive coupling

 

  • Electro mechanic. Diperlukan pemasangan sensor pada bagian mesin yang berputar. Sebagai contoh bisa menggunakan hall effect sensor atau mungkin optocoupler, untuk menghasilkan pulsa sesuai dengan putaran mesin. Adakalanya dengan pengaturan yang lebih komplek metode ini dapat memberikan masukan yang lebih akurat sehingga persis memberikan bacaan posisi camshaft, hal ini bermanfaat untuk mengendalikan mesih lebih jauh (ignition timming dan injector timming).

electro mechanical couling

Dua metode pertama di atas terkait dengan proses pengapian kendaraan yang secara detil bisa dibaca pada link berikut ignition system.

Sinyal pulsa dari salah satu sumber yang saya sebutkan di atas lalu di hubungkan ke pin interrupt microcontroller di mana sebuah timer di-trigger oleh sinyal ini lalu dibaca nilainya. Dengan mengetahui waktu antara pulsa pulas ini dan jumlah silender kendaraan dengan perhitungan dapat diketahui berapa jumlah putaran mesin dalam satu menit.

RPM = 60 / (jumlah silinder * waktu antara pulsa)

Contoh: bila waktu antara pulsa adalah 0.010 (10ms) maka rpm adalah

RPM = 60/(4*0.01)

= 60/0.04

= 1.500*

*untuk mechnical pick up perlu di sesuaikan lagi perhitungannya.

RPM schematic + Temp (PT100)

Rangkaian di atas adalah bagian mikrontroller dan 2 buah 4 digit seven segment, rangkaian ini mampu menampilkan 2 buah besaran display yang saya peruntukan bagi besaran RPM dan temperatur mesin.

Sinyal dari rangkaian pick up di atas selanjutnya men-trigger interupsi, waktu antara interupsi dihitung oleh timer yang dimiliki mikrokontroller. Jeda waktu inilah yang kemudian dihitung dan diolah menjadi besaran jumlah putaran mesin dalam satu detik, setelah tentunya dihitung pula jumlah silinder atau untuk sensor jenis ketiga diperhitungkan juga jumlah pulsa dalam satu rotasi.

Seven segment di-trigger secara bergantian oleh sebuah transistor yang dikontrol oleh sebuah 3 ke 8 decoder. Alternatif metode lain bisa juga dengan menggunakan serial sift register (74HC595) untuk men-drive seven segment dan lebih hemat port (serial data). Akan tetapi karena saya tidak punya librari-nya di ExpressSCH jadi memakai metode ini saja di gambar ya, toh tidak sulit bila ingin mengantinya.

Perhatikan signal conditioning untuk  PT100 yang mengkonversi 0-300’C menjadi  0-5Volt yang bisa di-sampling oleh internal ADC mikrocontroller.  Karena masih ada banyak pin mikrocontroller yang belum terpakai maka kita masih bisa menambahkan input analog lain, seperti kita bisa membaca 2 besaran temperatur untuk olie mesin dan satu lagi untuk air intake atau yang lainnya.

Selanjutnya pilihan kembali kepada kita seperti apa tampilan yang diinginkan apakah berupa 7 Segment, LED bar atau LED circular.

 

note: beberapa gambar adalah ilustrasi dari berbagai sumber

semoga bermanfaat

Dian Kurniawan