基于Arduino和GPS模块构建女性安全手环

可穿戴设备

266人已加入

描述

  借助近来我们可以使用的所有技术,为女性打造一款安全设备并不难,它不仅会发出紧急警报,还会向您的朋友、家人或相关人员发送信息。在这里,我们将构建一个可供女性佩戴的手环,她们可以使用 SOS 紧急短信和当前位置通知警察或任何人。使用这些信息,警方将能够从现场救出受害者。为此,我们使用了一个 Arduino,它可以与 GSM 和 GPS 模块连接,用于发送 SMS 警报和获取位置坐标。

  使用的材料

  Arduino纳米

  SIM900 调制解调器

  NEO6M GPS模块

  433 MHZ 射频发射器和接收器

  按钮

  电池

  面包板

  跳线

  GPS模块

  这里我们使用 NEO6M GPS 模块。NEO-6M GPS模块是一款流行的GPS接收器,内置陶瓷天线,提供强大的卫星搜索能力。该接收器能够感知位置并跟踪多达 22 颗卫星并识别世界任何地方的位置。通过板载信号指示灯,我们可以监控模块的网络状态。具有数据备份电池,当主电源意外关闭时,模块可以保存数据。

Arduino

  GPS 接收器模块内部的核心是 u-blox 的 NEO-6M GPS 芯片。它可以在 50 个通道上跟踪多达 22 颗卫星,并具有令人印象深刻的灵敏度水平,即 -161 dBm。这款 50 通道 u-blox 6 定位引擎拥有不到 1 秒的首次定位时间 (TTFF)。该模块支持的波特率范围为 4800-230400 bps,默认波特率为 9600。

  特征:

  工作电压:(2.7-3.6)V DC

  工作电流:67毫安

  波特率:4800-230400 bps(9600 默认)

  通讯协议:NEMA

  接口:UART

  外置天线和内置 EEPROM。

  GPS模块的引脚排列:

Arduino

  VCC:模块输入电压引脚

  GND:接地引脚

  RX, TX:与微控制器的 UART 通信引脚

  GSM 模块 SIM900

  这是一款兼容GSM/GPRS的四频手机,工作频率为850/900/1800/1900MHz,可用于上网、语音通话、收发短信等多种应用等。 GSM 调制解调器的频段可以通过 AT 命令设置。波特率可通过 AT 命令配置为 1200-115200。GSM/GPRS 调制解调器有一个内部 TCP/IP 堆栈,使我们能够通过 GPRS 与互联网连接。这是一款 SMT 类型的模块,采用集成 AMR926EJ-S 内核的非常强大的单片处理器设计,在各种工业产品中非常流行。

Arduino

  技术规格:

  电源电压:3.4V – 4.5V

  省电模式:睡眠模式功耗=.5mA

  频段:SIM900A 双频:EGSM900、DCS1800。

  工作温度:-30ºC 至 +80ºC

  支持 MIC 和音频输入

  扬声器输入

  UART接口支持

  通过调试端口进行固件升级

  通讯:AT 命令

  连接图

  具有 GPS 跟踪和警报的女性安全系统可以细分为两个部分,例如发射器和接收器部分。每个部分的电路图描述如下:

  发射器部分:

  在射频发射器部分,将有一个 SOS 按钮以及一个 433 MHz 射频发射器,它将数据无线传输到接收器部分。在这里制作两个独立部件的目的是,尽量减小发射模块的尺寸,使其可以作为腕带佩戴。发射器部分的电路图如下所示:

Arduino

Arduino

  接收部分:

  在 RF Receiver 部分,从腕带(发送器部分)发送的数据由具有 433 MHz RF 接收器的设备接收。RF 接收器通过数字引脚将此信息发送到 Arduino。Arduino Nano 然后接收信号并使用闪入其中的程序对其进行处理。当受害者按下发射器部分的 SOS 按钮时,会产生一个 HIGH 信号并传递到 Arduino 端,然后 Arduino 会向 SIM900 调制解调器发送一个信号,向注册用户发送一条短信以及已经获取的 GPS 坐标借助 NEO6M GPS 模块存储在微控制器中。接收端电路图如下图所示:

Arduino

Arduino

  Arduino的编程

  成功完成硬件连接后,现在是对 Arduino Nano 进行编程的时候了。下面给出代码的逐步解释。

  通过在代码中包含所有必需的库文件来启动代码,例如用于 NEO6M GPS 板的TinyGPS++.h ,用于定义软件串行引脚的 SoftwareSerial.h 。

  现在,声明 GPS 模块的连接引脚及其默认波特率,在我们的例子中为 9600。此外,定义 GPS 与 Arduino 通信使用的软件串行引脚。

  静态常量 int RXPin = 2,TXPin = 3;

  静态常数 uint32_t gps_baudrate = 9600;

  然后为TinyGPSPlus类声明对象。此外,为SoftwareSerial类定义对象,将引脚作为前面声明的参数。

  TinyGPSPlus 全球定位系统;

  软件串口软(RXPin,TXPin);

  在setup() 里面,声明所有的输入管脚和输出管脚。然后,初始化硬件串行和软件串行功能,在我们的例子中提供默认波特率 9600。

  无效设置()

  {

  pinMode(12,输入);// 从射频模块输入

  pinMode(4,输出);// 蜂鸣器的输出

  序列号。开始(19200);

  soft.begin(gps_baudrate);

  }

  在循环()内部,引脚 12 的数字输入状态被读取并存储在一个变量中。当此状态为 HIGH 时,表示发射器侧的开关被按下,因此 Arduino 打开蜂鸣器并调用函数sendms(),用于发送有关位置数据的 SMS。

  无效循环()

  {

  int key = digitalRead(12);

  如果(键==1)

  {

  数字写入(4,高);// 打开蜂鸣器

  发简讯();

  数字写入(4,低);//关闭蜂鸣器

  }

  别的;

  为了接收 GPS 坐标,编写的代码不断检查串行终端是否有来自 GPS 模块的传入数据。当找到具有 GPS 坐标的有效数据时,将其存储在两个单独的变量中,即纬度和经度。

  而 (soft.available() 》 0)

  {

  gps.encode(soft.read());

  如果 (gps.location.isUpdated())

  {

  纬度 = gps.location.lat();

  Lon = gps.location.lng();

  }

  别的;

  }

  }

  最后写了一个函数,就是向注册的号码发送短信。此处 SIM900 GSM 调制解调器使用AT + CMGF命令设置为 SMS 文本模式。然后使用显示的格式定义接收者的号码。您可以将其替换为您的手机号码。然后通过串行终端发送带有附加位置变量的消息。

  无效发送消息()

  {

  Serial.print(“AT+CMGF=1\r”);

  延迟(100);

  Serial.println(“AT+CMGS =\”+9194XXXXXXX\“”);

  延迟(100);

  Serial.println(“我需要帮助!!!Location:” + String(“Lat:”) +String(Lat) + “”+String(“Lon:”) + String(Lon));

  延迟(100);

  序列号.println((char)26);

  延迟(100);

  序列号.println();

  延迟(5000);

  }

  使用 Arduino 的具有 GPS 跟踪和警报的女性安全设备

  当按下 SOS 按钮时,蜂鸣器开始发出哔哔声,并且一条短信将发送到授权号码,其中包含受害者所在位置的纬度和经度。输出的屏幕截图如下所示:

Arduino

#include
#include
#include
静态常量 int RXPin = 2,TXPin = 3;
静态常数 uint32_t gps_baudrate = 9600;
TinyGPSPlus 全球定位系统;
软件串口软(RXPin,TXPin);
字符串文本消息;
浮动纬度,经度;
无效设置()
{
soft.begin(gps_baudrate);
序列号.开始(19200);
pinMode(12,输入);
pinMode(4,输出);
}
无效循环()
{
int key = digitalRead(12);
而 (soft.available() > 0)
{
gps.encode(soft.read());
如果 (gps.location.isUpdated())
{
纬度 = gps.location.lat();
Lon = gps.location.lng();
}
别的;
}
如果(键==1)
{
数字写入(4,高);
发简讯();
数字写入(4,低);
}
}
无效发送消息()
{
Serial.print("AT+CMGF=1\r");
延迟(100);
Serial.println("AT+CMGS =\"+9194XXXXXX\"");
延迟(100);
Serial.println("我需要帮助!!!Location:" + String("Lat: ") +String(Lat) + " "+String("Lon: ") + String(Lon));
延迟(100);
序列号.println((char)26);
延迟(100);
序列号.println();
延迟(5000);
}

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

全部0条评论

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

×
20
完善资料,
赚取积分