Translate

Menampilkan Longitude dan Latitude GPS Neo 6M Ublox ke LCD OLED ARDUINO

Menampilkan Longitude dan Latitude GPS Neo 6M Ublox ke LCD OLED ARDUINO

         Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa mendeteksi lokasi menggunakan modul GPS Neo Ublok 6M yang ditampilkan ke lcd OLED berupa latitude dan longitudenya. untuk lebih jelasnya berikut adalah komponen dan programnya.


a. Komponen yang dipakai



b. Program Arduino IDE

 //vcc pada GPS modul adalah 3,3 volt
/*********************
 *10 to GPS Module TX*
 *09 to GPS Module RX*
 *********************/

#include <Wire.h>  // i2C Conection Library
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include "Adafruit_GFX.h"
#include "OakOLED.h"

SoftwareSerial mySerial(10, 11);
TinyGPS gps;

OakOLED oled;

int dataadc;
long lat, lon;
float flat, flon;
unsigned long age, date, time, chars;
int year;
byte month, day, hour, minute, second, hundredths;
unsigned short sentences, failed;

void gpsdump(TinyGPS &gps);
void printFloat(double f, int digits = 2);

void setup()
{
    oled.begin();
    oled.display();
    
   // Oploen serial communications and wait for port to open:
  Serial.begin(9600);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(9600);
  delay(1000);
  Serial.println("uBlox Neo 6M");
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = ");
  Serial.println(sizeof(TinyGPS));
  Serial.println();
}

void loop() // run over and over
{

  dataadc = analogRead(A0);
 
  bool newdata = false;
  unsigned long start = millis();
  // Every 5 seconds we print an update
  while (millis() - start < 5000)
  {
    if (mySerial.available())
    {
      char c = mySerial.read();
      //Serial.print(c);  // uncomment to see raw GPS data
      if (gps.encode(c))
      {
        newdata = true;
        break;  // uncomment to print new data immediately!
      }
    }
  }
  if (newdata)
  {
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();
  }
}

void gpsdump(TinyGPS &gps)
{
 
  gps.get_position(&lat, &lon, &age);
  Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
  gps.f_get_position(&flat, &flon, &age);
  Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  //oled.clearDisplay();
  oled.setTextSize(1);
  oled.setTextColor(1);
  oled.setCursor(0, 0);
  oled.print("LAT: ");
  oled.println(flat, 5);

  oled.setTextSize(1);
  oled.setTextColor(1);
  oled.setCursor(0, 16);
  oled.print("LONG: ");
  oled.println(flon, 5);

  oled.setTextSize(1);
  oled.setTextColor(1);
  oled.setCursor(0, 32);
  oled.print("HUM: ");
  oled.println(dataadc);
  oled.display();

}

void printFloat(double number, int digits)
{
  // Handle negative numbers
  if (number < 0.0)
  {
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
  rounding /= 10.0;
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print(".");

  // Extract digits from the remainder one at a time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}



c. VIDEO HASILNYA



 

No comments:

Post a Comment