步驟1:簡要概述-運行原理
交通有刺激我們最好的人的能力。如果可以通過英特爾Edison進行更改,該怎么辦?該項目本質上是一種保存在汽車中的設備,可與存儲交通信號定時的在線服務器進行通信,并提示駕駛員加快或減速,以便在綠色時獲取每個信號。該Instructable仍在開發(fā)中,因為需要進行一些工作才能與當前基礎架構完全集成,但是,這是該概念及其對未來的承諾的有力證明。
通過定時信號和GPS位置之間的仔細協(xié)調來實現(xiàn)此目的。信號的位置和定時信息將下載到此設備上,然后使用其GPS位置來確定車輛駛向哪個信號以及保持速度,以便在綠色時捕獲該信號。 LED將亮起,以告知駕駛員加速,減速或保持當前速度。該程序是用JavaScript編寫的,盡管它也很容易適應其他語言。存儲信息的數(shù)據(jù)庫在Google App Engine上運行,并運行Python腳本來處理數(shù)據(jù)請求。如果將這種設備安裝在道路上的每輛車上,我們可以期望看到更高的燃油經濟性,更少的污染和總體上更少的交通。
步驟2:所需零件
首先,免責聲明:此設備僅用于實驗目的;如果您決定在路上使用,我將不承擔任何責任。
零件列表:
具有Arduino Breakout的英特爾Edison
任何NMEA-基于GPS的GPS(我正在使用Parallax#28506)
3G加密狗(我正在使用Huawei E303
一些LED通知駕駛員
步驟3:裝配
如果還沒有,則需要使用Intel XDK來設置您的主板。設置非常簡單,并且數(shù)百本教程正圍繞著如何做的方式在網(wǎng)絡上巡回演出。我建議您看一下以下內容與設置有關的鏈接,因為它包括從硬件到IDE設置所需的所有知識:
https://software.intel.com/zh-cn/get-started-edison-windows
組裝電路板的硬件非常簡單,GPS必須使用電路板上標有的5V引腳供電,接地也同樣重要,原始NMEA數(shù)據(jù)必須饋入UART。接收點rt,位于最靠近Edison的Arduino屏蔽接頭針上(參見圖片)。 3G加密狗將插入側面的USB-A端口;我決定使用USB擴展,因為加密狗的寬度太大,無法插入電源插頭。確保USB模式選擇器開關處于如圖所示的位置(朝向大USB端口)。
第4步:編程
該程序將是一個不斷發(fā)展的項目。如果您想訪問更新的版本,建議在以下鏈接中從GitHub存儲庫中分叉代碼:
https://github.com/TheInventorMan/IntelligentTraff 。..
不過,為方便起見,我粘貼了以下代碼,盡管這僅適用于將保留在車輛中的本地設備。服務器文件都位于存儲庫中。
對于感興趣的人,以下是該程序使用的算法的基本概述:
GPS接收位置,速度,航向和時間
設備通過3G加密狗向服務器請求數(shù)據(jù)
服務器以數(shù)據(jù)流進行響應,類似于NMEA語句(但是,一種簡單的協(xié)議)
將數(shù)據(jù)流解析并排列成二維數(shù)組,其中包含信號的位置,時序,偏移量等。
使用此信息,設備可以確定
確定綠燈窗口,并根據(jù)當前速度對其進行測量
設備會提示駕駛員加快,降低速度或保持速度以趕上信號的綠色窗口。
將來,它可能會擴展為包括非定時信號(在道路下方帶有感應線圈的信號),以及信號的“安全緩沖區(qū)”。車輛*裸露時約3秒ly *使其超越信號。這樣,駕駛員將永遠不會跑出任何黃燈(危險)。
import mraa;
import Math;
//端口初始化
var GPS = mraa.Uart(0 ); var 3G = mraa.Usb(0);//暫時無法使用,將在其位置實現(xiàn)USB主機端口驅動程序var gain = mraa.gpio(2); var maintenance = mraa.gpio(3); var reduction = mraa.gpio(4); GPS.setBaudRate(9600);
//常量
var earthRadius = 6371000;//以米為單位的地球半徑var degToRad = 0.01745329251;//每度弧度var radToDeg = 57.2957795131;//以度為單位的弧度
函數(shù)getLocation(){//使用$ GPGGA消息確定當前位置var GPSLocation = [0,0,0,0]; while(1){if(GPS.dataAvailable()){var buffer = GPS.readStr(512);如果(buffer.find(“ GPGGA”)!= -1){var rawNmea = buffer.substring(buffer.search(“ GPGGA”),buffer.search(“ n”)); var nmeaList = rawNmea.strip()。split(“,”); var time = nmeaList [1]; var latraw = nmeaList [2]; var latdir = nmeaList [3]; var lonraw = nmeaList [4]; var londir = nmeaList [5]; var lat =(latraw.substring(0,2))+(latraw.substring(2))/60; var lon =(lonraw.substring(0,3))+(lonraw.substring(3,0))/60; if(londir ==“ W”){lon = lon * -1; } if(latdir ==“ S”){lat = lat * -1; } var alt = nmeaList [9]; GPSLocation = [lat,lon,alt,time];返回GPSLocation; }}}}函數(shù)getVelocity(){//使用$ GPVTG消息來確定速度和方向var GPSVel = [0,0]; while(1){if(GPS.dataAvailable()){var buffer = GPS.readStr(512);如果(buffer.find(“ GPVTG”)!= -1){var nmeaData = buffer.substring(buffer.search(“ GPVTG”),buffer.search(“ n”)); var nmeaList = nmeaData.strip()。split(“,”); var hdg = nmeaList [1]; var rawVel = nmeaList [7]; var vel = rawVel/3.6; GPSVel = [hdg,vel];返回GPSVel; }}}}
function getLights(){var Lights = [7] [10];//交通信號燈時序數(shù)組,10個最近的信號燈,每個7個參數(shù)。緯度,經度,NTime,Etime,TimeOffset,Heading,Distance//requestData(); if(3G.dataAvailable()){var buffer = 3G.readStr(512);如果(buffer.find(“ $$”)!= -1){lightData = buffer.substring(buffer.search(“ $$”),buffer.search(“ n”));//燈光信息規(guī)范遵循GPS方案,其中“ $$”表示句子的開頭。 lightList = nmeaData.strip()。split(“,”);對于(i = 0; i
函數(shù)computeDistance(Latdeg1,Londeg1,Latdeg2,Londeg2){var Lat1 = Latdeg1 * degToRad; var Lat2 = Latdeg2 * degToRad; var Lon1 = Londeg1 * degToRad; var Lon2 = Londeg2 * degToRad;變距= 2 * earthRadius * Math.asin(sqrt((Math.sin(Lat2-Lat1/2))^ 2 +(Math.cos(Lat1)* Math.cos(Lat2)*(Math。 sin(Lon2-Lon1/2))^ 2))));//使用Haversine公式計算大圓距}
函數(shù)computeHeading(Latdeg1,Londeg1,Latdeg2,Londeg2){var Lat1 = Latdeg1 * degToRad; var Lat2 = Latdeg2 * degToRad; var Lon1 = Londeg1 * degToRad; var Lon2 = Londeg2 * degToRad; var y = Math.sin(Lon2-Lon1)* Math.cos(Lat2); var x = Math.cos(Lat1) )* Math.sin(Lat2)-Math.sin(Lat1)* Math.cos(Lat2)* Math.cos(Lon2-Lon1); var heading = Math.atan2(y,x).toDegrees();返回標題;}
//主序列while(1){var temp [4]; var currLat; var currLon; var currHdg; var currSpd; var Lights; var time; var Dir; var currSignal; var t1 ,t2; temp = getLocation(); currLat = temp [0]; currLon = t EMP [1];時間= temp [3]; temp = getVelocity(); currHdg = temp [0]; currSpd = temp [1];燈= getLights(); for(i = 0; i 180){Lights [5] [i] = 180-computeHeading(currLat,currLon,Lights [0] [i],Lights [1] [i]); } else {Lights [5] [i] = computeHeading(currLat,currLon,Lights [0] [i],Lights [1] [i]); } Lights [6] [i] = computeDistance(currLat,currLon,Lights [0] [i],Lights [1] [i]); if(Lights [6] [i] 315 || 135 Lights [6] [currSignal]){\提高速度提高。write(1); maintain.write(0); decrease.write(0); } else if(t1 == Lights [6] [currSignal]){\保持速度增加。write(0); maintain.write(1); decrease.write(0); } else {\降低速度提高.write(0); maintain.write(0); decrease.write(1); }
}
責任編輯:wv
-
物聯(lián)網(wǎng)
+關注
關注
2914文章
45058瀏覽量
378462 -
Arduino
+關注
關注
188文章
6478瀏覽量
188273
發(fā)布評論請先 登錄
相關推薦
物聯(lián)網(wǎng)就業(yè)有哪些高薪崗位?
負壓除塵設備物聯(lián)網(wǎng)智能管理系統(tǒng)方案
物聯(lián)網(wǎng)在城市管理中的應用
【星閃派物聯(lián)網(wǎng)開發(fā)套件體驗連載】智能交通燈
物聯(lián)網(wǎng)助力智慧交通:優(yōu)勢與前景
基于物聯(lián)網(wǎng)的設備管理

評論