在这里,我们再次构建相同的项目,但这次将使用MSP430 发射台和振动传感器来检测车辆事故。因此,该项目还将介绍振动传感器与 MSP430 启动板的接口。
此处振动传感器模块检测车辆的振动并向 MSP430 Launchpad 发送信号。然后 MSP430 从 GPS 模块获取数据并使用 GSM 模块通过 SMS 将其发送到用户手机。一个 LED 也会作为事故警报信号发光,这个 LED 可以用一些警报代替。事故位置以Google Map 链接的形式发送,来自 GPS 模块的纬度和经度。
所需组件
MSP430 启动板
SIM900 GSM 模块
Ublox NEO-6M GPS 模块
振动传感器模块
16x2 液晶
连接电线
10 K-POT
面包板或PCB
电源 12v 1amp
3.3v电源
5v电源
在进入项目之前,我们将讨论 GPS、GSM 和振动传感器。
GPS模块及其工作:
GPS代表全球定位系统 ,用于检测地球上任何位置的纬度和经度,具有精确的UTC时间(协调世界时)。GPS模块用于跟踪我们项目中的事故位置。该设备每秒接收来自卫星的坐标,包括时间和日期。我们之前 在Vehicle Tracking System中提取了 $GPGGA 字符串 来查找纬度和经度坐标。
GPS模块 实时发送与跟踪位置相关的数据,它以NMEA格式发送大量数据(见下面的截图)。NMEA 格式由几个句子组成,其中我们只需要一个句子。这句话从 $GPGGA开始 ,包含坐标、时间和其他有用的信息。此 GPGGA 称为 全球定位系统修复数据。
我们可以通过计算字符串中的逗号来从 $GPGGA 字符串中提取坐标。假设你找到 $GPGGA 字符串并将其存储在一个数组中,那么在两个逗号后可以找到纬度,在四个逗号后可以找到经度。现在,这个纬度和经度可以放在其他数组中。
下面是$GPGGA字符串及其描述:
$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47
$GPGGA,HHMMSS.SSS,纬度,N,经度,E,FQ,NOS,HDP ,高度,M,高度,M,,校验和数据
GSM模块
SIM900 是一个完整的四频 GSM/GPRS 模块,可以被客户或爱好者轻松嵌入使用。SIM900 GSM 模块提供行业标准接口。SIM900 以低功耗提供 GSM/GPRS 850/900/1800/1900MHz 的语音、SMS、数据性能。它在市场上很容易买到。
SIM900采用集成AMR926EJ-S内核的单片机处理器设计
小尺寸的四频 GSM/GPRS 模块。
启用 GPRS
AT 命令
AT 表示注意。该命令用于控制 GSM 模块。为了测试 GSM 模块,我们使用了 AT 命令。接收到 AT 命令后,GSM 模块回复 OK。这意味着 GSM 模块工作正常。下面是 我们在这个项目中使用的一些 AT 命令:
ATE0 用于关闭回声
AT+CNMI=2,2,0,0,0 《ENTER》 自动打开消息接收。(无需打开消息)
ATD《手机号码》;《ENTER》 拨打电话 (ATD+919610126059;\r\n)
AT+CMGF=1 《ENTER》 选择文本模式
AT+CMGS=”Mobile Number” 《ENTER》 分配收款人的手机号码
》》现在我们可以写我们的信息了
》》写完留言后
Ctrl+Z 发送消息命令(十进制的 26)。
ENTER=0x0d 十六进制
振动传感器模块
在这个MSP430 事故警报系统项目中,我们使用了一个振动传感器模块来检测振动或突然的调制。振动传感器模块根据模块提供数字输出高/低逻辑。在我们的案例中,我们使用了一个有源 HIGH 逻辑振动传感器模块。这意味着每当振动传感器检测到振动时,它都会为微控制器提供高逻辑。
电路说明
该车辆事故警报系统项目的电路连接 很简单。这里GPS 模块的Tx 引脚 直接连接到 MSP430 Launchpad(硬件串行)的数字引脚号 P1_1,5v 用于为 GPS 模块供电。通过这里使用 软件串行库 ,我们允许引脚 P_6 和 P1_7 上的串行通信,并分别使它们成为 Rx 和 Tx 并连接到GSM 模块。12 伏电源用于为 GSM 模块供电。振动传感器连接在 P1_3 。LED 也用于指示事故检测。其余连接显示在电路图中。
编程说明
除了 GPS 部分外,该项目的编程很容易。完整的代码在项目结束时给出。为了在 MSP430 中编写或编译代码,我们使用了与 Arduino 兼容的 Energia IDE。大多数 Arduino IDE 功能都可以直接在这个 Energia IDE 中使用。所以首先我们已经包含了一个必需的库和声明的引脚和变量。
#include
SoftwareSerial GSM(P1_6, P1_7); // 接收,发送
浮动纬度=0;
浮动对数=0;
#define led P1_0
const intvibrationSensor=PUSH2;
诠释我=0;
给定函数用于读取振动传感器信号。此功能还将过滤小振动或虚假振动。
#define count_max 25
char SensorRead(int pin) // 读sw with debounce
{
char count_low=0,count_high = 0;
做
{
延迟(1);
if (digitalRead(pin) == HIGH)
{
count_high++;
计数低 = 0;
}
否则
{
count_high = 0;
计数低++;
}
}while(count_low< count_max && count_high < count_max);
如果(count_low >= count_max)
返回低;
否则
返回高;
}
下面的函数检测振动并调用gpsEvent()函数获取 GPS 坐标,最后调用Send()函数发送短信。
无效循环()
{
如果(传感器读取(振动传感器)==高)
{
数字写入(领导,高);
全球定位系统事件();
发送();
数字写入(领导,低);
延迟(2000);
}
}
Given Function 负责从 GPS 模块中获取 GPS 字符串,从中提取坐标并将其转换为度数十进制格式。
无效 gpsEvent()
{
字符 gpsString[55];
字符测试[]="RMC";
我=0;
while(1)
{
while (Serial.available()) //来自 GPS 的串行传入数据
{
char inChar = (char)Serial.read();
gpsString[i]=inChar; //将来自 GPS 的传入数据存储到临时字符串 str[]
i++;
if (i < 4)
{
if(gpsString[i-1] != test[i-1]) //检查正确的字符串
i=0;
}
国际度=0;
度=gpsString[16]-48;
度*=10;
度+=gpsString[17]-48;
int minut_int=0;
minut_int=gpsString[18]-48;
minut_int*=10;
minut_int+=gpsString[19]-48;
int minut_dec=0;
minut_dec+= (gpsString[21]-48)*10000;
minut_dec+= (gpsString[22]-48)*1000;
minut_dec+= (gpsString[23]-48)*100;
minut_dec+= (gpsString[24]-48)*10;
minut_dec+= (gpsString[25]-48);
float minut= ((float)minut_int + ((float)minut_dec/100000.0))/60.0;
纬度=((浮点)度+分钟);
最后,Send()函数用于将 SMS 发送到插入在这部分代码中的用户号码。
无效发送()
{
GSM.print("AT+CMGS=");
GSM.print('"');
GSM.print("961****059"); // 输入你的手机号码
GSM.println('"');
延迟(500);
// GSM.print("纬度:");
// GSM.println(纬度);
GSM.println("事故发生");
延迟(500);
// GSM.print("经度:");
// GSM.println(logitude);
GSM.println("点击链接查看位置");
GSM.print("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q=");
GSM.print(纬度,6);
GSM.print("+");
GSM.print(logitude,6);
GSM.write(26);
延迟(4000);
}
-
msp430
+关注
关注
180文章
2393浏览量
229181 -
振动传感器
+关注
关注
2文章
321浏览量
19784 -
GPS模块
+关注
关注
0文章
87浏览量
16418 -
警报系统
+关注
关注
0文章
54浏览量
4875
发布评论请先 登录
相关推荐
评论