0°

使用SIM808模块做一个汽车定位系统

该项目是一个简单的定位系统,使用内置于SIM808模块中的相同GSM和GPS模块。在本项目完成后,当您从任何手机发送信息到GSM模块时,您将能够根据模块的GPS位置获得模块的GPS位置响应。

在这个项目里面,你可以通过使用Arduino和GPS天线创建汽车定位系统,并熟悉SIM808模块的使用。

简介

该项目是一个简单的定位系统,使用内置于SIM808模块中的相同GSM和GPS模块。在本项目完成后,当您从任何手机发送信息到GSM模块时,您将能够根据模块的GPS位置获得模块的GPS位置响应。

步骤一 材料清单

  • SIM808模块
  • 1*Arduino UNO或Arduino Mega
  • 1*Arduino数据线
  • 1*9V电源
  • 1*GPS天线
  • 1*GSM天线

软件

  • Arduino IDE
  • SIM808库

步骤二 原理说明

什么是SIM808模块?
SIM808模块为全球市场设计。它与高性能GSM / GPRS芯片集成,并且它还具有GPS引擎和BT引擎。

使用SIM808模块做一个汽车定位系统

SIM808是一款四频GSM / GPRS模块,适用于GSM 850MHz,EGSM 900MHz,DCS 1800MHz和PCS 1900MHz的频率。它具有GPRS多时隙12级/ 10级,支持GPRS编码方案CS-1,CS-2,CS-3和CS-4。GPS解决方案提供同类最佳的采集和跟踪灵敏度,首次定位时间(TTFF)和精度。

在此处阅读有关SIM808模块的更多信息。

SIM808模块的优点
SIM808具有68引脚SMT焊盘(单芯片模块,无需焊接),提供模块和用户板之间的所有硬件接口。它还具有以下功能:

  • 一个完整的调制解调器串口(UART接口)
  • 音频通道,包括麦克风输入和接收器输出
  • 一个SIM卡接口
  • 默认情况下能够支持4 * 4keypads
  • 充电接口
  • 一个USB,支持调试和固件升级
  • 能够支持蓝牙功能
  • 可编程通用输入和输出(GPIO)
  • 能够支持两个PWM和两个ADC
  • 集成的TCP / IP协议和扩展的TCP / IP AT命令,对数据传输应用程序非常有用
  • 能够支持GPS功能
  • 在睡眠模式下保持电流消耗低至1.2mA的节能技术(GPS引擎断电)
  • PCM / SPI接口

步骤三 硬件搭建

Arduino UNO的连接

使用SIM808模块做一个汽车定位系统

Arduino Mega的连接

使用SIM808模块做一个汽车定位系统

正确连接展示:

使用SIM808模块做一个汽车定位系统
使用SIM808模块做一个汽车定位系统
使用SIM808模块做一个汽车定位系统
  • Rx连接到到引脚10
  • Tx连接到引脚11
  • 将SIM808与9V适配器连接
  • 通过USB线或9V充电器为Arduino供电

步骤四 开始编程

在开始编程之前,需要下载SIM808库,下载地址:

当前内容已被隐藏,您需要登录才能查看

项目完整程序:

#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>
#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;
char MESSAGE[300];
char lat[12];
char lon[12];
char wspeed[12];

char phone[16];
char datetime[24];

#define PIN_TX    10
#define PIN_RX    11
SoftwareSerial mySerial(PIN_TX,PIN_RX);
DFRobot_SIM808 sim808(&mySerial);//Connect RX,TX,PWR,

void setup()
{
  mySerial.begin(9600);
  Serial.begin(9600);

  //******** Initialize sim808 module *************
  while(!sim808.init())
  {
      Serial.print("Sim808 init error\r\n");
      delay(1000);
  }
  delay(3000);

  if( sim808.attachGPS())
      Serial.println("Open the GPS power success");
  else 
      Serial.println("Open the GPS power failure");
      
  Serial.println("Init Success, please send SMS message to me!");
}

void loop()
{
  //*********** Detecting unread SMS ************************
   messageIndex = sim808.isSMSunread();

   //*********** At least, there is one UNREAD SMS ***********
   if (messageIndex > 0)
   { 
      Serial.print("messageIndex: ");
      Serial.println(messageIndex);
      
      sim808.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
                 
      //***********In order not to full SIM Memory, is better to delete it**********
      sim808.deleteSMS(messageIndex);
      Serial.print("From number: ");
      Serial.println(phone);  
      Serial.print("Datetime: ");
      Serial.println(datetime);        
      Serial.print("Recieved Message: ");
      Serial.println(message); 

    while(!sim808.getGPS())
    {
      
    }

   
      Serial.print(sim808.GPSdata.year);
      Serial.print("/");
      Serial.print(sim808.GPSdata.month);
      Serial.print("/");
      Serial.print(sim808.GPSdata.day);
      Serial.print(" ");
      Serial.print(sim808.GPSdata.hour);
      Serial.print(":");
      Serial.print(sim808.GPSdata.minute);
      Serial.print(":");
      Serial.print(sim808.GPSdata.second);
      Serial.print(":");
      Serial.println(sim808.GPSdata.centisecond);
      Serial.print("latitude :");
      Serial.println(sim808.GPSdata.lat);
      Serial.print("longitude :");
      Serial.println(sim808.GPSdata.lon);
      Serial.print("speed_kph :");
      Serial.println(sim808.GPSdata.speed_kph);
      Serial.print("heading :");
      Serial.println(sim808.GPSdata.heading);
      Serial.println();
  
      float la = sim808.GPSdata.lat;
      float lo = sim808.GPSdata.lon;
      float ws = sim808.GPSdata.speed_kph;
  
      dtostrf(la, 6, 2, lat); //put float value of la into char array of lat. 6 = number of digits before decimal sign. 2 = number of digits after the decimal sign.
      dtostrf(lo, 6, 2, lon); //put float value of lo into char array of lon
      dtostrf(ws, 6, 2, wspeed);  //put float value of ws into char array of wspeed
    
      sprintf(MESSAGE, "Latitude : %s\nLongitude : %s\nWind Speed : %s kph\nMy Module Is Working. Mewan Indula Pathirage. Try With This Link.\nhttp://www.latlong.net/Show-Latitude-Longitude.html\nhttp://maps.google.com/maps?q=%s,%s\n", lat, lon, wspeed, lat, lon);
      
       Serial.println("Sim808 init success");
       Serial.println("Start to send message ...");
       Serial.println(MESSAGE);
       Serial.println(phone);
       sim808.sendSMS(phone,MESSAGE);
      //************* Turn off the GPS power ************
      sim808.detachGPS();
      
   }
}

步骤五 最终演示

使用SIM808模块做一个汽车定位系统

从图中可以看到,当您将“Hi”或“Hello”字符串发送到已插入GSM模块的SIM卡号时,Arduino将使用模块位置的经度和纬度信息向您发送文本。

此外,xiangmuli我已经添加了一个指向Google地图的链接,当它向您发送文本时,它还会附带Google地图位置,如下图所示:

使用SIM808模块做一个汽车定位系统
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论