Translate

Membuat alat pelacak posisi GPS dengan SMS dan kendali Relay via HP Android bluetooth ARDUINO

Membuat alat pelacak posisi GPS dengan SMS dan kendali Relay via HP Android bluetooth ARDUINO


          Pada kesempatan kali ini saya akan menjelaskan mengenai sebuah alat yang berfungsi sebagai alat pelacak posisi GPS dengan menggunakan sms dan alat kendali Relay menggunakan HP Android, jadi fungsi alat ini ada dua seperti yang telah disebutkan, untuk yang pertama yaitu alat pelacak posisi GPS dengan menggunakan sms prinsip kerjanya yaitu jika kita ingin mengetahui lokasi dimana alat / kendaraan berada maka tinggal sms ke nomer alat maka alat akan membalasnya dengan posisi keberadaan yang berupa koordinat longitude dan latitude, kemudian untuk kendali relay digunakan untuk mematikan CDI agar bisa hidupkan dan matikan sepeda motor dengan HP Android via bluetooth.  untuk skema dan programnya berikut adalah penjelasannya.




a. Arduino Mega





b. GPS NEO 6MV2 UBLOX





c. SIM800L MODUL SMS GSM





d. Modul Step Down Buck Converter





e. Modul Sismin ATMega8





f. Bluetooth HC05





g. Modul Relay 5V





h. LCD + I2C






i. Program Arduino IDE

/*********************
 *10 to GPS Module TX*
 *09 to GPS Module RX*
 *********************/
 // vcc gps = 3.3V
 // vcc sim800l = 3.7 - 4.2 v

#include <Wire.h>  // i2C Conection Library
#include <LiquidCrystal_I2C.h>  //i2C LCD Library
#include "SIM900.h"
#include <SoftwareSerial.h>
#include <TinyGPS.h>

#include "sms.h"
SMSGSM sms;

SoftwareSerial mySerial(10, 11);
TinyGPS gps;

LiquidCrystal_I2C lcd(0x3F, 16, 2);

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

char string[160];
int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];
char strsms[5];
char latstr[20];
char lonstr[20];
char latlonstr[20];

  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 setup() 
{
     Serial.begin(9600);
     Serial.println("GSM Shield testing.");

     if (gsm.begin(2400)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

     if(started) {
          if (sms.SendSMS("083831362852", "Alat Ready"))
          Serial.println("\nSMS sent OK");
     }
    
   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
{
  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();
  }
 
 
  dtostrf(flat,10,6,latstr);
  dtostrf(flon,10,6,lonstr);
  sprintf(string,"LAT= %s, LONG= %s", latstr, lonstr);

 if(gsm.begin(9600)){
  started=true;
 }
 int pos=0;
 if(started){
  pos=sms.IsSMSPresent(SMS_ALL);
  if(pos){
    sms.GetSMS(pos,n,smsbuffer,100);
 
    if(!strcmp(smsbuffer,"monitor")){
      sms.SendSMS(n,string);
    }
    if(!strcmp(smsbuffer,"Monitor")){
      sms.SendSMS(n,string);
    }

    delsms();
  }
 }
  delay(100);


}


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

  lcd.setCursor(0,0);
  lcd.print("LAT:");
  lcd.print(flat, 5);
  
  lcd.setCursor(0,1);
  lcd.print("LONG:");
  lcd.print(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;
  }
}



void delsms()
{
  for (int i=0; i<10; i++)
  {
      int pos=sms.IsSMSPresent(SMS_ALL);
      if (pos!=0)
      {
        if (sms.DeleteSMS(pos)==1){}else{}
      }
  }
}




j. Program Bascom AVR

$regfile = "m8def.dat"
$crystal = 12000000
$baud = 9600


Ddrc = &B11111111

Portc.5 = 1

Dim Perintah As String * 10

Cls
Cursor Off

Do

Perintah = Waitkey()

Select Case Perintah

    Case "a" :
    Portc.5 = 0

    Case "b" :
    Portc.5 = 1

  End Select

Loop





k. Program Android







l. VIDEO HASILNYA











No comments:

Post a Comment