在這里,我們?cè)俅螛?gòu)建相同的項(xiàng)目,但這次將使用MSP430 發(fā)射臺(tái)和振動(dòng)傳感器來檢測(cè)車輛事故。因此,該項(xiàng)目還將介紹振動(dòng)傳感器與 MSP430 啟動(dòng)板的接口。
此處振動(dòng)傳感器模塊檢測(cè)車輛的振動(dòng)并向 MSP430 Launchpad 發(fā)送信號(hào)。然后 MSP430 從 GPS 模塊獲取數(shù)據(jù)并使用 GSM 模塊通過 SMS 將其發(fā)送到用戶手機(jī)。一個(gè) LED 也會(huì)作為事故警報(bào)信號(hào)發(fā)光,這個(gè) LED 可以用一些警報(bào)代替。事故位置以Google Map 鏈接的形式發(fā)送,來自 GPS 模塊的緯度和經(jīng)度。
所需組件
MSP430 啟動(dòng)板
SIM900 GSM 模塊
Ublox NEO-6M GPS 模塊
振動(dòng)傳感器模塊
16x2 液晶
連接電線
10 K-POT
面包板或PCB
電源 12v 1amp
3.3v電源
5v電源
在進(jìn)入項(xiàng)目之前,我們將討論 GPS、GSM 和振動(dòng)傳感器。
GPS模塊及其工作:
GPS代表全球定位系統(tǒng) ,用于檢測(cè)地球上任何位置的緯度和經(jīng)度,具有精確的UTC時(shí)間(協(xié)調(diào)世界時(shí))。GPS模塊用于跟蹤我們項(xiàng)目中的事故位置。該設(shè)備每秒接收來自衛(wèi)星的坐標(biāo),包括時(shí)間和日期。我們之前 在Vehicle Tracking System中提取了 $GPGGA 字符串 來查找緯度和經(jīng)度坐標(biāo)。
GPS模塊 實(shí)時(shí)發(fā)送與跟蹤位置相關(guān)的數(shù)據(jù),它以NMEA格式發(fā)送大量數(shù)據(jù)(見下面的截圖)。NMEA 格式由幾個(gè)句子組成,其中我們只需要一個(gè)句子。這句話從 $GPGGA開始 ,包含坐標(biāo)、時(shí)間和其他有用的信息。此 GPGGA 稱為 全球定位系統(tǒng)修復(fù)數(shù)據(jù)。
我們可以通過計(jì)算字符串中的逗號(hào)來從 $GPGGA 字符串中提取坐標(biāo)。假設(shè)你找到 $GPGGA 字符串并將其存儲(chǔ)在一個(gè)數(shù)組中,那么在兩個(gè)逗號(hào)后可以找到緯度,在四個(gè)逗號(hào)后可以找到經(jīng)度。現(xiàn)在,這個(gè)緯度和經(jīng)度可以放在其他數(shù)組中。
下面是$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,經(jīng)度,E,F(xiàn)Q,NOS,HDP ,高度,M,高度,M,,校驗(yàn)和數(shù)據(jù)
GSM模塊
SIM900 是一個(gè)完整的四頻 GSM/GPRS 模塊,可以被客戶或愛好者輕松嵌入使用。SIM900 GSM 模塊提供行業(yè)標(biāo)準(zhǔn)接口。SIM900 以低功耗提供 GSM/GPRS 850/900/1800/1900MHz 的語音、SMS、數(shù)據(jù)性能。它在市場(chǎng)上很容易買到。
SIM900采用集成AMR926EJ-S內(nèi)核的單片機(jī)處理器設(shè)計(jì)
小尺寸的四頻 GSM/GPRS 模塊。
啟用 GPRS
AT 命令
AT 表示注意。該命令用于控制 GSM 模塊。為了測(cè)試 GSM 模塊,我們使用了 AT 命令。接收到 AT 命令后,GSM 模塊回復(fù) OK。這意味著 GSM 模塊工作正常。下面是 我們?cè)谶@個(gè)項(xiàng)目中使用的一些 AT 命令:
ATE0 用于關(guān)閉回聲
AT+CNMI=2,2,0,0,0 《ENTER》 自動(dòng)打開消息接收。(無需打開消息)
ATD《手機(jī)號(hào)碼》;《ENTER》 撥打電話 (ATD+919610126059;\r\n)
AT+CMGF=1 《ENTER》 選擇文本模式
AT+CMGS=”Mobile Number” 《ENTER》 分配收款人的手機(jī)號(hào)碼
》》現(xiàn)在我們可以寫我們的信息了
》》寫完留言后
Ctrl+Z 發(fā)送消息命令(十進(jìn)制的 26)。
ENTER=0x0d 十六進(jìn)制
振動(dòng)傳感器模塊
在這個(gè)MSP430 事故警報(bào)系統(tǒng)項(xiàng)目中,我們使用了一個(gè)振動(dòng)傳感器模塊來檢測(cè)振動(dòng)或突然的調(diào)制。振動(dòng)傳感器模塊根據(jù)模塊提供數(shù)字輸出高/低邏輯。在我們的案例中,我們使用了一個(gè)有源 HIGH 邏輯振動(dòng)傳感器模塊。這意味著每當(dāng)振動(dòng)傳感器檢測(cè)到振動(dòng)時(shí),它都會(huì)為微控制器提供高邏輯。
電路說明
該車輛事故警報(bào)系統(tǒng)項(xiàng)目的電路連接 很簡單。這里GPS 模塊的Tx 引腳 直接連接到 MSP430 Launchpad(硬件串行)的數(shù)字引腳號(hào) P1_1,5v 用于為 GPS 模塊供電。通過這里使用 軟件串行庫 ,我們?cè)试S引腳 P_6 和 P1_7 上的串行通信,并分別使它們成為 Rx 和 Tx 并連接到GSM 模塊。12 伏電源用于為 GSM 模塊供電。振動(dòng)傳感器連接在 P1_3 。LED 也用于指示事故檢測(cè)。其余連接顯示在電路圖中。
編程說明
除了 GPS 部分外,該項(xiàng)目的編程很容易。完整的代碼在項(xiàng)目結(jié)??束時(shí)給出。為了在 MSP430 中編寫或編譯代碼,我們使用了與 Arduino 兼容的 Energia IDE。大多數(shù) Arduino IDE 功能都可以直接在這個(gè) Energia IDE 中使用。所以首先我們已經(jīng)包含了一個(gè)必需的庫和聲明的引腳和變量。
#include
SoftwareSerial GSM(P1_6, P1_7); // 接收,發(fā)送
浮動(dòng)緯度=0;
浮動(dòng)對(duì)數(shù)=0;
#define led P1_0
const intvibrationSensor=PUSH2;
詮釋我=0;
給定函數(shù)用于讀取振動(dòng)傳感器信號(hào)。此功能還將過濾小振動(dòng)或虛假振動(dòng)。
#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++;
計(jì)數(shù)低 = 0;
}
否則
{
count_high = 0;
計(jì)數(shù)低++;
}
}while(count_low< count_max && count_high < count_max);
如果(count_low >= count_max)
返回低;
否則
返回高;
}
下面的函數(shù)檢測(cè)振動(dòng)并調(diào)用gpsEvent()函數(shù)獲取 GPS 坐標(biāo),最后調(diào)用Send()函數(shù)發(fā)送短信。
無效循環(huán)()
{
如果(傳感器讀?。ㄕ駝?dòng)傳感器)==高)
{
數(shù)字寫入(領(lǐng)導(dǎo),高);
全球定位系統(tǒng)事件();
發(fā)送();
數(shù)字寫入(領(lǐng)導(dǎo),低);
延遲(2000);
}
}
Given Function 負(fù)責(zé)從 GPS 模塊中獲取 GPS 字符串,從中提取坐標(biāo)并將其轉(zhuǎn)換為度數(shù)十進(jìn)制格式。
無效 gpsEvent()
{
字符 gpsString[55];
字符測(cè)試[]="RMC";
我=0;
while(1)
{
while (Serial.available()) //來自 GPS 的串行傳入數(shù)據(jù)
{
char inChar = (char)Serial.read();
gpsString[i]=inChar; //將來自 GPS 的傳入數(shù)據(jù)存儲(chǔ)到臨時(shí)字符串 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;
緯度=((浮點(diǎn))度+分鐘);
最后,Send()函數(shù)用于將 SMS 發(fā)送到插入在這部分代碼中的用戶號(hào)碼。
無效發(fā)送()
{
GSM.print("AT+CMGS=");
GSM.print('"');
GSM.print("961****059"); // 輸入你的手機(jī)號(hào)碼
GSM.println('"');
延遲(500);
// GSM.print("緯度:");
// GSM.println(緯度);
GSM.println("事故發(fā)生");
延遲(500);
// GSM.print("經(jīng)度:");
// GSM.println(logitude);
GSM.println("點(diǎn)擊鏈接查看位置");
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
+關(guān)注
關(guān)注
180文章
2403瀏覽量
229325 -
振動(dòng)傳感器
+關(guān)注
關(guān)注
2文章
323瀏覽量
19814 -
GPS模塊
+關(guān)注
關(guān)注
0文章
87瀏覽量
16438 -
警報(bào)系統(tǒng)
+關(guān)注
關(guān)注
0文章
54瀏覽量
4884
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論