亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

跟踪我

组件和用品

Arduino Mega 2560
× 1
NEO 6 GPS
× 1
Adafruit SD 卡屏蔽
× 1
Adafruit SD 卡屏蔽
× 1
Seeedstudio gprs shield V2.0
× 1
Seeed GPRS Shield V2.0
× 1
跳线(通用)
× 1
9V 电池(通用)
× 1
Box
× 1
Box
× 1

关于这个项目

不久前,我决定构建一个汽车/个人跟踪器。

这是我在这个方向上的第一个原型。


系统本身非常简单。只需一个 Arduino Mega、一个 GPS、一个 GPRS 扩展板和一个 SD 卡。这个是可选的,但我将其包括在内,因为我认为在向 Facebook 上的朋友发起挑战时,他们会致电系统并收到一条短信,其中包含我的位置或我最后已知的位置。


系统一直在寻找实际位置。如果有人拨打 SIM 卡的号码,系统会发送一条包含实际位置和谷歌地图链接的短信。例如:


Hugo 位置现在是:纬度:54.315010,日志:10.130997。 http://maps.google.com/maps?q=54.315010,+10.130997


如果 GPS 没有接收到任何位置,系统将发送最后一个已知位置。例如:


我似乎找不到雨果。我最后一次见到他是在:纬度:54.315010,日志:10.130997。 http://maps.google.com/maps?q=54.315010,+10.130997


然后将日期、时间、位置和短信状态存储在 SD 卡中。


组件

我用过:


1x Arduino MEGA

1x GPRS Shield(也可以使用市场上其他可用的 GSM 屏蔽)

1x GPS(我用的是 NEO 6,在 ebay 上很流行)

1 个 SD 卡防护罩

1x 9V 电池

1x 塑料盒

一些电线


连接组件


由于 Arduino Mega 使用不同的引脚排列,因此需要重新布线。

首先,专为 Arduino Uno 设计的 SD 卡扩展板将引脚 10 到 13 用于 SPI,因此为了使其在 Mega 上工作,它们需要“传递”到 MEGA 上的 SPI 引脚。

Arduino UNO SPI 引脚 - Arduino MEGA SPI 引脚

MOSI - 11 到 51

味噌 - 12 到 50

SCK - 13 至 52

SS - 10 至 53

在GPRS Shield上首先需要在Shield的J7跳线中将通信引脚设置为Software Serial。

然后使用一些电线将 GPRS 屏蔽中的引脚 7 和 8 连接到串行 1 端口(Arduino Mega 中的引脚 18 和 19)。

有关如何在 GPRS Shield 中连接 SIM 卡的更多详细信息,请参阅我在 Hackster 中的另一个项目。


GPS 连接到 Arduino Mega 中的串行 2 端口(引脚 16 和 17)。

GPS所需的电源也从SD卡的5V引脚和GND引脚取出。


9V 电池可以连接到 Vin 引脚或电源插头。

准备收箱和现场测试。

代码


我在这里留下了一些关于代码的快速注释。


我将这个库用于 GPRS Shield。

为了使用 Arduino Mega,有必要做一些改变:


1) 打开 GSM.h 并注释-decomment 如下所示的相应行,例如对于 Arduino Mega:

//#定义UNO

#define MEGA


2) 在 HWSerial.h 中对 Mega 定义的行进行注释,例如对于 Arduino Mega:

#define MEGA


对于 GPS,我正在使用这个库。


它自己的程序以非常简单的方式运行。在所有启动程序(GPRS、GPS 和 SD 卡初始化)之后,GPS 将尝试确定可用的卫星数量和有效的 GPS 坐标点。

如果在此期间拨打电话,将自动拒绝该电话,不会有任何反应。

当 GPS 具有有效位置并检测到 3 个以上的卫星时(我假设 GPS 接收良好的位置),如果拨打电话,系统会向电话号码发送包含我的位置的短信。所有这些数据都将存储在 SD 卡中。

如果 GPS 的卫星少于 3 颗,则无法检索到有效位置,因此如果拨打电话,电话号码将收到一条包含我最后已知位置的短信。同样,所有数据都存储在 SD 卡中。


利弊


由于这是一个原型,所以有很多东西不能正常工作。但目标始终是改进。

首先电池只能持续一个小时!!我没有在软件中实施任何节能机制。所以为了未来的改进,“睡眠模式”是必须的。

尺寸也经过审查,我设计了一个完整的新板。第一眼是这样的:

如果您发现任何错误,或者您有任何建议/改进或问题,请写信给我。

感谢阅读。

雨果戈麦斯

代码

  • 代码
代码Arduino
#include "SIM900.h"#include #include "sms.h"#include "call.h"#include //要更改软件/硬件串行的引脚,请使用27、GSM.cpp中的28行。//要使用Arduino Mega,请在GSM.h的第5行定义MEGA。#include #include //Mega CS pinconst int chipSelect =53; //我们必须为短信和电话创建类。CallGSM call;SMSGSM sms;char number[20];byte stat =0;int value =0;char value_str[5];//GPS变量// TinyGPS++对象TinyGPSPlus gps;const char *googlePrefix ="http://maps.google.com/maps?q=";double Lat;double Long;int 日、月、年;int 小时、分钟、秒;int num_sat;boolean one_point_true =false;void setup(){ //串行连接。 Serial.begin(9600); //GPRS 连接 Serial.print(F("Starting GSM...")); //以波特率开始配置屏蔽。 if (gsm.begin(9600)) Serial.println(F("READY")); else Serial.println(F("空闲")); //GPS 连接 Serial.println(F("Starting GPS")); //GPS com 端口 Serial2.begin(9600); //SD 卡启动 Serial.print(F("Initializing SD card...")); // 确保默认的片选引脚设置为 // 输出,即使您不使用它: pinMode(53, OUTPUT); // 查看卡是否存在并且可以初始化: if (!SD.begin(chipSelect)) { Serial.println(F("Card failed, or not present")); // 不要再做任何事情:return; } Serial.println(F("card initialized."));}//******************************** **********************************************//主循环void循环(){ Get_GPS(); // 获取位置 Check_call(); //看看有没有人打电话};//////////////////////////////////////// /////////////////////////////////////////********* ****************************************************** *******************// 从 GPSvoid Get_GPS(){ while (Serial2.available()> 0) if (gps.encode(Serial2.read) 获取位置())) num_sat =gps.satellites.value(); //Serial.println(num_sat); if (gps.location.isValid() ==1) { Lat =gps.location.lat(); Long =gps.location.lng(); if (Lat !=0 &&Long !=0) one_point_true =true; } if (gps.date.isValid()) { day =gps.date.day();月 =gps.date.month();年 =gps.date.year(); } if (gps.time.isValid()) { 小时 =gps.time.hour();分钟 =gps.time.minute();秒 =gps.time.second();智能延迟(500); if (millis()> 5000 &&gps.charsProcessed() <10) { Serial.println(F("未检测到 GPS:检查接线。"));同时(真); }}//**************************************************** ********************************// 此自定义版本的 delay() 确保 gps 对象// 正在"fed".static void smartDelay(unsigned long ms){ unsigned long start =millis();做 { while (Serial2.available()) gps.encode(Serial2.read()); } while (millis() - start =3 &&one_point_true ==true) { char sms_OK[160]; sprintf(sms_OK, "Hugo 的位置现在是:Lat:%s, Log:%s.%s%s,+%s\n", lat_print, Long_print, googlePrefix, lat_print, Long_print); Serial.println(sms_OK);错误 =sms.SendSMS(number, sms_OK);延迟(500); if (error ==0) //检查状态 { Serial.println(F("SMS ERROR")); } else { Serial.println(F("SMS OK")); } } else if (num_sat <3 &&one_point_true ==true) { char sms_NOK[150]; sprintf(sms_NOK, "我没看到雨果。我最后一次见到他是在:纬度:%s, 日志:%s. %s%s,+%s\n", lat_print, Long_print , googlePrefix, lat_print, Long_print); Serial.println(sms_NOK); int error =sms.SendSMS(number, sms_NOK); if (error ==0) //检查状态 { Serial.println(F("SMS ERROR")); } else { Serial.println(F("SMS OK")); } } else if (one_point_true ==false) { Serial.println(F("No valid GPS point")); }//保存SD卡文件中的所有内容 dataFile =SD.open("datalog.txt", FILE_WRITE); // 如果文件可用,写入它: if (dataFile) { dataFile.print(Date); dataFile.print(" "); dataFile.print(time1); dataFile.print(" "); dataFile.print(number); dataFile.print(" "); dataFile.print(lat_print); dataFile.print(", "); dataFile.print(Long_print); dataFile.print(" ");数据文件。打印(错误);数据文件.println();数据文件.close(); } // 如果文件没有打开,弹出一个错误: else { Serial.println(F("error opening datalog.txt")); }}//////////////////////////////////////////////// /////////////////////////////////

示意图


制造工艺

  1. 使用 Raspberry Pi 和 Bridge Shield 的机器人
  2. Web 操作的 DMX 控制器
  3. Arduino Spybot
  4. UnifiedWater v1
  5. HSVClock
  6. SnowPlow Robot
  7. 移动投票箱
  8. Whac-A-Mole(按钮版)
  9. 现代点唱机
  10. Arduino Apple Watch
  11. 感谢所有有礼貌的司机
  12. BLUE_P:无线 Arduino 编程扩展板