車輛測(cè)速裝置有機(jī)械式和電子式兩種,本項(xiàng)目利用GPS模塊、Arduino和OLED顯示屏測(cè)量并顯示車輛的即時(shí)速度,屬于智能儀表類別。
項(xiàng)目的核心是GPS接收器。目前最流行的GPS模塊是ublox NEO-6M,這里我們采用了Quectel L86 GPS模塊,因?yàn)槠浜?jiǎn)單且天線非常小巧,只要與Arduino、0.96″ OLED顯示屏連接,與速度相關(guān)參數(shù)就顯示在OLED屏幕上。項(xiàng)目BOM清單如下:
Arduino Nano板 x1
L80/L86 GPS模塊 x1
OLED顯示屏 x1
杜邦線 x20
面包板 x1
Quectel L86/L80 GPS模塊
Quectel L86采用聯(lián)發(fā)科技GNSS MT3333芯片,是一款集成16mm×16mm×4.0mm貼片天線的超緊湊型GNSS模塊,使客戶能靈活地從GPS切換到GNSS。L86采用LCC封裝,內(nèi)置貼片天線使其擁有超強(qiáng)的捕獲和追蹤能力。
通過先進(jìn)的AGPS(EASY)軌道預(yù)測(cè)技術(shù)和省電模式(AlwaysLocate技術(shù)),L86模塊能自動(dòng)計(jì)算和預(yù)測(cè)長達(dá)三天的軌道信息,并將這些信息存儲(chǔ)到內(nèi)部RAM存儲(chǔ)器中,即使在室內(nèi)弱信號(hào)情況下也能實(shí)現(xiàn)低功耗快速定位。AlwaysLocate技術(shù)的運(yùn)用,使得L86可以根據(jù)不同的環(huán)境狀況和運(yùn)行模式,自動(dòng)調(diào)節(jié)定位時(shí)間,在確保定位精度的同時(shí)大大降低了模塊功耗。
憑借超小尺寸,超高精度和靈敏度,L86幾乎能滿足M2M客戶所有應(yīng)用需求,尤其適用于車載、個(gè)人追蹤、工業(yè)級(jí)PDA及其他相關(guān)手持設(shè)備等領(lǐng)域,特別適合于GPS接收機(jī)和OBD應(yīng)用。主要優(yōu)勢(shì)包括:
支持多重衛(wèi)星系統(tǒng):GPS、GLONASS、QZSS
內(nèi)嵌貼片天線:16mm×16mm×4.0mm
超緊湊型封裝:18.4mm×18.4mm×6.45mm
支持內(nèi)外置天線自動(dòng)切換
支持短路保護(hù)和天線偵測(cè)
內(nèi)置低噪聲放大器,提高接收高靈敏度
支持自輔助AGPS(EASY技術(shù),無需外部存儲(chǔ)器)
極低的電流消耗:26mA@追蹤模式
多種省電模式:待機(jī)模式、備份模式、周期模式、AlwaysLocate模式
LOCUS技術(shù),支持日志信息自動(dòng)記錄保存
高靈敏度:-167dBm@追蹤模式,-149dBm@捕獲模式
99個(gè)捕獲信道,33個(gè)追蹤信道
支持Balloon模式,定位高度高達(dá)80km
支持DGPS和SBAS(WAAS/EGNOS/MSAS/GAGAN)
多頻主動(dòng)干擾消除技術(shù)增強(qiáng)抗干擾能力
授時(shí)服務(wù)支持PPS與NMEA同步功能
支持移遠(yuǎn)通信自主研發(fā)的SDK命令
UART接口:波特率范圍4800~115200bps,默認(rèn)波特率9600bps
更新速率:1Hz(默認(rèn)),最高10Hz
輸入/輸出電壓:2.7~2.9V
協(xié)議:NMEA 0183/PMTK
作為一個(gè)SMD形式的工業(yè)級(jí)模塊,項(xiàng)目制作時(shí)需要插入2.54間距排針,并焊接在底部PCB上。焊上所有12個(gè)針腳后,L86模塊就變得十分友好,可輕易插接在面包板上。
連接Arduino GPS測(cè)速儀
Arduino GPS測(cè)速儀電路非常簡(jiǎn)潔,只要將三個(gè)組件按照電路圖連接起來即可。
Quectel L86 GPS模塊有12個(gè)引腳,本項(xiàng)目只用其中的5個(gè)。將VCC、GND連接到Arduino開發(fā)板的3.3V、GND引腳;V_BCKP引腳也要連接到3.3V,如果不連接的話模塊就不能工作。L86模塊的Rx、Tx引腳要分別連接到Arduino開發(fā)板的數(shù)字引腳2、3上。
OLED顯示屏是I2C總線,其VCC、GND引腳要連接到Arduino開發(fā)板的3.3V、GND引腳。同樣,SDA、SCL引腳則連接到Arduino板子的A4、A5引腳上。
編寫代碼
L80 GPS模塊支持Tiny GPS++ Library,下載庫文件并上傳到Arduino庫文件夾。除了Tiny GPS++ Library,代碼還需要稱作Adafruit SSD1306的SSD1306 Library文件。
以下是完整代碼,拷貝并上傳到Arduino Nano Board即可。
#include
#include
#include
#include
#define rxPin 2
#define txPin 3
SoftwareSerial mygps(rxPin, txPin);
#define SCREEN_WIDTH 128?????? // OLED display width, in pixels
#define SCREEN_HEIGHT 64?????? // OLED display height, in pixels
#define OLED_RESET -1??????????//Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C????//See datasheet for Address
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
TinyGPSPlus gps;
void setup()
{
Serial.begin(115200);
mygps.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
{
Serial.println(F("SSD1306 allocation failed"));
????for (;;); // Don't proceed, loop forever
}
display.clearDisplay();
display.display();
delay(2000);
}
void loop()
{
boolean newData = false;
for (unsigned long start = millis(); millis() - start < 1000;)
{
while (mygps.available())
{
if (gps.encode(mygps.read()))
{
newData = true;
}
}
}
//If newData is true
if (newData == true)
{
newData = false;
display.setTextColor(SSD1306_WHITE);
if (gps.location.isValid() == 1)
{
//String gps_speed = String(gps.speed.kmph());
display.setCursor(0, 0);
display.setTextSize(3);
display.print(gps.speed.kmph());
display.setCursor(75, 20);
display.setTextSize(2);
display.print("km/h");
display.setTextSize(1);
display.setCursor(0, 50);
display.print("SAT:");
display.setCursor(25, 50);
display.print(gps.satellites.value());
display.setTextSize(1);
display.setCursor(70, 50);
display.print("ALT:");
display.setCursor(95, 50);
display.print(gps.altitude.meters(), 0);
display.display();
delay(1500);
display.clearDisplay();
}
}
else
{
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.setTextSize(3);
display.print("No Data");
display.display();
delay(1500);
display.clearDisplay();
}
}
Arduino GPS測(cè)速儀調(diào)試
把上述代碼上傳到Arduino Nano Board后,OLED顯示屏起初并不顯示數(shù)據(jù),因?yàn)長86 GPS接收器還沒有與衛(wèi)星系統(tǒng)同步。
稍微等一下,GPS就開始接收來自最近衛(wèi)星系統(tǒng)的數(shù)據(jù),信號(hào)的接收與同步情況設(shè)備駐地的內(nèi)外環(huán)境有關(guān)。與衛(wèi)星系統(tǒng)同步妥當(dāng)后,OLED顯示屏開始以每小時(shí)公里(kmph)為單位顯示速度。當(dāng)然,現(xiàn)在顯示的是0kmph,因?yàn)榘遄臃旁陟o止的桌上。
如果將GPS測(cè)速儀放在運(yùn)動(dòng)的車輛上,就會(huì)顯示以kmph為單位的車速,連接的衛(wèi)星數(shù)量,以及以米為單位的海拔高度。
可見。這個(gè)測(cè)速儀不但簡(jiǎn)單,功能還真不少,只要帶在身上你就能夠獲得汽車、自動(dòng)車、公交車、火車和飛機(jī)的速度和所在的海拔高度,以及比賽和訓(xùn)練時(shí)的運(yùn)動(dòng)速度,還可帶它取戶外一起融入大自然。
審核編輯:湯梓紅
-
gps
+關(guān)注
關(guān)注
22文章
2881瀏覽量
165938 -
Arduino
+關(guān)注
關(guān)注
187文章
6461瀏覽量
186524 -
測(cè)速儀
+關(guān)注
關(guān)注
0文章
22瀏覽量
4028
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論