Arduino kontrollerad bil Tracking System baserade på SMS-
Använda modulerna är;
Arduino nano V3.0
SkyLab GPS-modulen
WaveCom GSM-modul
SoftwareSerial bibliotek, TinyGPS används för att kommunicera med moduler.
När jag ringde enheten från registrerade telefonnummer, den returnerar lat, lon och googlemap länk i ett sms =)
Källkoden är:
< code >
#include < TimerOne.h >
#include < TinyGPS.h >
#include < SoftwareSerial.h >
TinyGPS gps;
SoftwareSerial gsmSerial (2, 3);
SoftwareSerial ss(5,6);
Sträng inData = "";
booleska inputAvailable = false;
String ADMIN_PHONE_NUMBER_1 = "05558233343";
String ADMIN_PHONE_NUMBER_2 = "05323342543";
String ADMIN_PHONE_NUMBER_3 = "05396933985";
String ADMIN_PHONE_NUMBER_4 = "05373624959";
String recievedNumber = "";
Sträng bora = "";
int callback_counter = 0;
int indexofMsgStr = 0;
flyta platt, flon, fkmph;
osignerade långa ålder;
char okunanKarakter = ' *';
flyta flat_store = 0,0;
flyta flon_store = 0,0;
booleska gsmdinle = false;
void setup()
{
Delay(30000);
Serial.BEGIN(9600);
SS.BEGIN(9600);
gsmSerial.begin(9600);
Timer1.Initialize(8388480); ca 8,3 sekunder
Timer1.attachInterrupt(callback);
Delay(2000);
gsmSerial.listen();
Serial.println("basla");
gsmSerial.println("AT+CLIP=1");
Delay(1000);
gsmSerial.println("ATE=0");
Delay(1000);
gsmSerial.listen();
}
void loop() / / kör om och om igen
{
While(gsmSerial.available())
{
inputAvailable = sant;
okunanKarakter = (char) gsmSerial.read();
inData += okunanKarakter;
om (okunanKarakter == ',') {
bryta;
}
}
IF(inputAvailable)
{
inputAvailable = false;
processData();
inData = "";
}
}
void printGPSDATA() {
GPS.f_get_position (& platt, och flon, och ålder);
om (platt > 0,0)
flat_store = platt;
om (flon > 0,0)
flon_store = flon;
fkmph = gps.f_speed_kmph(); hastighet i km/h
}
void TAKEGPSDATA() {
Serial.println ("---> TAKEGPSDATA");
booleska gps_valid = false;
SS.listen();
Delay(1000);
för (int jag = 0; jag < 200; i ++)
{
IF(!gps_valid)
{
samtidigt (ss.available())
{
char c = ss.read();
om (gps.encode(c)) / / kom en ny giltig mening?
{
printGPSDATA();
gps_valid = sant;
bryta;
}
}
Delay(5);
}
}
gsmSerial.listen();
Delay(1000);
Serial.println ("<---TAKEGPSDATA");
}
void processData() {
Serial.println(inData);
IF(IsRinging())
{/ / telefon caliyor
Serial.println ("telefon caliyor");
indexofMsgStr = inData.indexOf("05");
recievedNumber = inData.substring (indexofMsgStr, indexofMsgStr + 11);
Serial.Print ("fått numret =");
Serial.println(recievedNumber);
IF(IsAdminNumber())
{
Serial.println ("admin ok!");
TAKEGPSDATA();
KoordinatBilgisiGonder();
}
}
}
void KoordinatBilgisiGonder() {
Bora = "AT + CMGS = \" ";
Bora += "9";
Bora += recievedNumber;
Bora += "\" ";
gsmSerial.println("AT+CMGF=1");
Delay(2000);
gsmSerial.println(bora);
Delay(1000);
gsmSerial.print ("ENLEM =");
gsmSerial.println(flat_store,6);
gsmSerial.print ("BOYLAM =");
gsmSerial.println(flon_store,6);
gsmSerial.print ("HIZ =");
gsmSerial.print(fkmph);
gsmSerial.println ("km/saat");
gsmSerial.println ("LINK =");
gsmSerial.print ("http://maps.google.com/?ie=UTF8 & hq = & ll =");
gsmSerial.print(flat_store,6);
gsmSerial.print(",");
gsmSerial.print(flon_store,6);
gsmSerial.print ("& z = 20");
gsmSerial.write(26);
}
int IsRinging()
{
om (inData.indexOf("CLIP:") > = 0)
{
tillbaka 1.
}
annat
{
Return 0;
}
}
int IsAdminNumber()
{
IF(ADMIN_PHONE_NUMBER_1 == recievedNumber)
{
tillbaka 1.
}
annat if(ADMIN_PHONE_NUMBER_2 == recievedNumber)
{
tillbaka 1.
}
annat if(ADMIN_PHONE_NUMBER_3 == recievedNumber)
{
tillbaka 1.
}
annat if(ADMIN_PHONE_NUMBER_4 == recievedNumber)
{
tillbaka 1.
}
Return 0;
}
void callback()
{
callback_counter ++;
om (callback_counter > = 80)
{
Serial.Print ("callback ok!");
callback_counter = 0;
TAKEGPSDATA();
}
}
< / code >