在這里,我們再次構建相同的項目,但這次將使用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瀏覽量
229200 -
振動傳感器
+關注
關注
2文章
321瀏覽量
19787 -
GPS模塊
+關注
關注
0文章
87瀏覽量
16426 -
警報系統
+關注
關注
0文章
54瀏覽量
4876
發布評論請先 登錄
相關推薦
評論