Translate

Membuat Alat Monitor Jarak HC-SRF04 dan Lokasi GPS NEO UBLOX 6MV2 via HANDPHONE ANDROID ARDUINO

Membuat Alat Monitor Jarak HC-SRF04 dan Lokasi GPS NEO UBLOX 6MV2 via HANDPHONE ANDROID ARDUINO


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membat sebuah alat yang dapat memonitor jarak dan lokasi menggunakan arduino dan ditampilkan ke handphone android secara realtime. alat ini menggunakan media bluetooth sebagai media pengiriman datanya sehingga jaraknya tidak bisa jauh. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Uno




b. LCD + I2C




c. Bluetooth HC-05




d. Sensor Jarak HC-SRF04




e. GPS NEO UBLOX 6MV2




f. Program Android







g. 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 <LiquidCrystal_I2C.h>  //i2C LCD Library

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#define trigPin 9
#define echoPin 8

SoftwareSerial mySerial(10, 11);
TinyGPS gps;

LiquidCrystal_I2C lcd(0x27, 16, 2);

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

void setup()
{
   pinMode(trigPin, OUTPUT);
   pinMode(echoPin, INPUT);
   lcd.begin();
   lcd.clear();
   lcd.noCursor();
 
  // 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
{
 
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
 
  lcd.setCursor(13,0);
  lcd.print(distance);
  lcd.print("      ");
 
  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)
{
  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;

  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.");

  lcd.setCursor(0,0);
  lcd.print("LAT:");
  lcd.print(flat, 5);
 
  lcd.setCursor(0,1);
  lcd.print("LONG:");
  lcd.print(flon, 5);

  Serial.print("jarak= ");
  Serial.print(distance);
  Serial.println(" cm");
  Serial.print("long= ");
  Serial.println(flat, 5);
  Serial.print("lat= ");
  Serial.println(flon, 5);
    
}

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;
  }
}





h. VIDEO HASILNYA









No comments:

Post a Comment