步骤1:简要概述-运行原理
交通有刺激我们最好的人的能力。如果可以通过英特尔edison进行更改,该怎么办?该项目本质上是一种保存在汽车中的设备,可与存储交通信号定时的在线服务器进行通信,并提示驾驶员加快或减速,以便在绿色时获取每个信号。该instructable仍在开发中,因为需要进行一些工作才能与当前基础架构完全集成,但是,这是该概念及其对未来的承诺的有力证明。
通过定时信号和gps位置之间的仔细协调来实现此目的。信号的位置和定时信息将下载到此设备上,然后使用其gps位置来确定车辆驶向哪个信号以及保持速度,以便在绿色时捕获该信号。 led将亮起,以告知驾驶员加速,减速或保持当前速度。该程序是用javascript编写的,尽管它也很容易适应其他语言。存储信息的数据库在google app engine上运行,并运行python脚本来处理数据请求。如果将这种设备安装在道路上的每辆车上,我们可以期望看到更高的燃油经济性,更少的污染和总体上更少的交通。
步骤2:所需零件
首先,免责声明:此设备仅用于实验目的;如果您决定在路上使用,我将不承担任何责任。
零件列表:
具有arduino breakout的英特尔edison
任何nmea-基于gps的gps(我正在使用parallax#28506)
3g加密狗(我正在使用huawei e303
一些led通知驾驶员
步骤3:装配
如果还没有,则需要使用intel xdk来设置您的主板。设置非常简单,并且数百本教程正围绕着如何做的方式在网络上巡回演出。我建议您看一下以下内容与设置有关的链接,因为它包括从硬件到ide设置所需的所有知识:
https://software.intel.com/zh-cn/get-started-edison-windows
组装电路板的硬件非常简单,gps必须使用电路板上标有的5v引脚供电,接地也同样重要,原始nmea数据必须馈入uart。接收点rt,位于最靠近edison的arduino屏蔽接头针上(参见图片)。 3g加密狗将插入侧面的usb-a端口;我决定使用usb扩展,因为加密狗的宽度太大,无法插入电源插头。确保usb模式选择器开关处于如图所示的位置(朝向大usb端口)。
第4步:编程
该程序将是一个不断发展的项目。如果您想访问更新的版本,建议在以下链接中从github存储库中分叉代码:
https://github.com/theinventorman/intelligenttraff 。..
不过,为方便起见,我粘贴了以下代码,尽管这仅适用于将保留在车辆中的本地设备。服务器文件都位于存储库中。
对于感兴趣的人,以下是该程序使用的算法的基本概述:
gps接收位置,速度,航向和时间
设备通过3g加密狗向服务器请求数据
服务器以数据流进行响应,类似于nmea语句(但是,一种简单的协议)
将数据流解析并排列成二维数组,其中包含信号的位置,时序,偏移量等。
使用此信息,设备可以确定
确定绿灯窗口,并根据当前速度对其进行测量
设备会提示驾驶员加快,降低速度或保持速度以赶上信号的绿色窗口。
将来,它可能会扩展为包括非定时信号(在道路下方带有感应线圈的信号),以及信号的“安全缓冲区”。车辆*裸露时约3秒ly *使其超越信号。这样,驾驶员将永远不会跑出任何黄灯(危险)。
import mraa;
import math;
//端口初始化
var gps = mraa.uart(0 ); var 3g = mraa.usb(0);//暂时无法使用,将在其位置实现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;//以度为单位的弧度
函数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; }}}}函数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];//交通信号灯时序数组,10个最近的信号灯,每个7个参数。纬度,经度,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”));//灯光信息规范遵循gps方案,其中“ $$”表示句子的开头。 lightlist = nmeadata.strip()。split(“,”);对于(i = 0; i
函数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公式计算大圆距}
函数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); }
}
美国卫星电视公司Dish计划到2023年建设一个覆盖70%人口的5G网络
搭载了神经的人造皮肤,能为我们做些什么?
NEC拟2.35亿美元出售所持联想全部股份
基于PLC的Modbus协议的实现
美国宇航局NASA成功将超音速飞机冲击波相互作用的过程进行了可视化
物联网智能交通管理设备的制作
采用软件检测和控制实现内外频标自适应式时钟源的设计
夏普将退市 日企神话是否走向终结?
AMD财报预测:深度分析全球半导体龙头公司AMD第二季度财报
LasterTech表示公司已获得大量LED汽车照明模新订单 将成为未来几年主要增长动力
如何维持风阀驱动器的优良运行状态
晨控智能RFID技术在军工行业的应用
集成化芯片在相控阵beam—forming中的应用
关于一些电池历史事件的简单介绍
2020年纯晶圆代工市场可望提高19%
全球首个智能驾驶车险指数模型问世,将带来四大变革
谷景科普直插色环电感在测试中噪音大的原因分析
典型零件的加工方案介绍
信息安全不容忽视 国家网络安全战略发布 明确9方面战略任务
动力电池:扩产与加班同步