怎样用Arduino和GPS天线创建汽车跟踪系统

电子说

1.3w人已加入

描述

在本教程中,我将深入介绍SIM808硬件接口。您可能拥有一个从中国制造的SIM808模块,但发现它们没有附带任何文档或测试代码。本教程可以帮助初学者快速了解SIM808接口规范以及机械和电气细节。另外,我将在GitHub上添加文档和库,以便您能够快速设计各种应用程序。

这个项目是一个简单的跟踪系统,使用相同的GSM和GPS模块,内置于SIM808模块中。在本教程结束时,当您从任何手机发送GSM模块时,您将能够根据模块的GPS位置获得模块的GPS位置响应。

gps

什么是SIM808模块?

基本上, SIM808模块专为全球市场设计。它与高性能GSM/GPRS芯片集成,它还有一个GPS引擎和一个BT引擎。

gps

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有68引脚SMT焊盘(单芯片模块无需焊接),提供模块和用户板之间的所有硬件接口。它还具有以下功能:

一个完整的调制解调器串行端口(UART接口)

音频通道,包括麦克风输入和接收器输出

一个SIM卡界面

默认情况下能够支持4 * 4keypads

充电界面

一个USB,支持调试和固件升级

能够支持蓝牙功能

可编程通用输入和输出(GPIO)

能够支持两个PWM和两个ADC

集成TCP/IP协议和扩展TCP/IP AT命令,这对数据传输应用非常有用

支持GPS功能的能力

一种省电技术,在睡眠模式下保持电流消耗低至1.2mA(GPS引擎断电)

PCM/SPI接口

硬件和软件要求

硬件 的结果,

《升i》 SIM 808模块

Arduino UNO或Arduino MEGA

Arduino电缆

9V电源

GPS天线和GSM天线

gps

必要的硬件

软件

Arduino IDE

SIM808库

建立连接

如下图所示连接所有内容。

Rx至引脚10

Tx至引脚11

将SIM808与9V适配器连接

提供通过USB线或9V充电器为Arduino供电

Arduino UNO的连接

gps

Arduino Mega的连接

gps

下图显示正确连接时连接的外观:

上传源代码

上传以下代码。如果您是Arduino的新手,请务必查看Maker Pro的Arduino教育页面以获取更多教程。

#include

#include

#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 ”);

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 Longitude : %s Wind Speed : %s kph My Module Is Working. Mewan Indula Pathirage. Try With This Link. http://www.latlong.net/Show-Latitude-Longitude.html http://maps.google.com/maps?q=%s,%s ”, 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();

}

}

全部放在一起

通过Arduino IDE上传代码后,只需以9600波特率打开串口监视器。在这里您将看到以下内容:

因此,每当您将“Hi”或“Hello”字符串发送到已插入的SIM号码时在GSM模块中,Arduino会使用模块位置的经度和纬度信息给你发回信息。

此外,我已经添加了一个链接到Google地图,所以当它发回给你时,它也会来使用Google地图位置,如下图所示:

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分