0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:工程师吴畏 2019-08-01 11:21 次阅读

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

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

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

什么是SIM808模块?

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

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天线

必要的硬件

软件

Arduino IDE

SIM808库

建立连接

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

Rx至引脚10

Tx至引脚11

将SIM808与9V适配器连接

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

Arduino UNO的连接

Arduino Mega的连接

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

上传源代码

上传以下代码。如果您是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地图位置,如下图所示:

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

    关注

    22

    文章

    2881

    浏览量

    165977
  • Arduino
    +关注

    关注

    187

    文章

    6461

    浏览量

    186570
收藏 人收藏

    评论

    相关推荐

    GPS天线静电保护方案

    GPS天线静电保护方案 GPS天线根据不同方式可分为以下类别: 1.    极化方式 : GPS天线
    的头像 发表于 09-27 15:40 266次阅读
    <b class='flag-5'>GPS</b><b class='flag-5'>天线</b>静电保护方案

    逻辑和翻译例优化资产跟踪

    电子发烧友网站提供《逻辑和翻译例优化资产跟踪器.pdf》资料免费下载
    发表于 09-21 11:24 0次下载
    <b class='flag-5'>用</b>逻辑和翻译<b class='flag-5'>用</b>例优化资产<b class='flag-5'>跟踪</b>器

    怎样用THS3201实现输出功率可调?

    怎样用THS3201实现输出功率可调?
    发表于 08-26 08:28

    OPA735加OPA333,怎样用TINA TI去仿真?

    当输入信号VG1从7.06V慢慢变化到7.22V时。 输出电压Vout的变化必须是接近线性变化的。我想知道我该怎样用TINA TI去仿真?怎样设置那个输入信号VG1才能达到我的目的。因为这个电压源好像
    发表于 08-02 08:39

    怎样用Arduino测试锂电池容量

    本文详细介绍了如何用Arduino测量锂电池的容量。并附有电路图和Arduino的程序代码。
    的头像 发表于 07-30 09:14 691次阅读
    <b class='flag-5'>怎样用</b><b class='flag-5'>Arduino</b>测试锂电池容量

    SGS利用MVG天线测试系统实现快速汽车天线测试

    从自动驾驶汽车到日常通勤车或商用车, 包括蜂窝、WiFi、导航(GNSS/GPS/ Beidou/GLO- NASS) 、UWB 等在内的各种通信链路现已成为新车的标准配置。随着汽车天线
    发表于 07-16 13:56 2163次阅读
    SGS利用MVG<b class='flag-5'>天线</b>测试<b class='flag-5'>系统</b>实现快速<b class='flag-5'>汽车</b><b class='flag-5'>天线</b>测试

    选择正确的GPS北斗定位天线——北斗GPS天线使用技巧与性能对比

    思为无线GPS多模卫星定位导航北斗模块的冷启动捕获灵敏度可达-148dBm,接收器能够在无任何先前协助数据的情况下,从完全关闭状态下捕获卫星信号 ,跟踪灵敏度可达-162dBm,接收器能够在已经捕获并锁定卫星信号后,继续保持跟踪
    的头像 发表于 07-10 17:02 2342次阅读
    选择正确的<b class='flag-5'>GPS</b>北斗定位<b class='flag-5'>天线</b>——北斗<b class='flag-5'>GPS</b><b class='flag-5'>天线</b>使用技巧与性能对比

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?
    发表于 05-07 06:55

    stm32f100怎样用重映射功能?

    的是stm32f100c8t6b芯片,现在想用将PB1映射为TIM1_CH3N,在调用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)时, GPIO_PinAFConfig和GPIO_AF_TIM1都没定义,stm32f100
    发表于 05-07 06:06

    STM32F412G-DISCO怎样用MX生成fatfs的代码?

    STM32F412G-DISCO怎样用MX生成fatfs的代码? SD卡例程能跑,但mx生成的代码不能正常运行,我生成代码后是不是还要配置一些东西?(我生成后只写了测试代码) 问题解决了,虽然我不知道我为什么不能直接使用mx生成的代码去操作sd卡,但我通过复制粘贴例程的代码完成了测试。
    发表于 03-12 08:15

    怎样用表来判断加热管的好坏?

    怎样用表来判断加热管的好坏? 万表是电工常用的测量仪器,它可以用来判断加热管的好坏。加热管是一种常见的加热元件,广泛应用于家电、机械设备和工业生产中。在选择和使用加热管时,我们需要了解其电阻值
    的头像 发表于 12-20 17:21 4897次阅读

    无线通信:怎样用电磁波表示1和0

    为什么频率越高,能携带的信息就越多?以数字信号为例,信息就是一串串的1和0,所以先搞清楚怎样用电磁波表示1和0。
    发表于 12-05 14:44 1721次阅读
    无线通信:<b class='flag-5'>怎样用</b>电磁波表示1和0

    ADAU1452做FFT分析,怎样设定取样点的数量?

    请问,我想用ADAU1452做FFT分析,怎样设定取样点的数量,还有就是怎样用单片机读出分析得到的复数结果数组?谢谢!
    发表于 11-29 06:42

    GNSS天线的分类 影响GNSS天线的因素

    。以下是几种常见的GNSS天线分类: 1. 单频和多频天线:根据GNSS卫星系统所使用的频率,天线可以分为单频和多频天线。单频
    的头像 发表于 11-28 15:39 1894次阅读

    怎样用ADAU1761设计DRC的压缩/扩展?

    请问怎样用ADAU1761设计DRC的压缩/扩展。我在SigmaStudio 4.5的模块中只找到RMS。如果ADAU1761设计DRC要怎样
    发表于 11-28 06:41