论文部分内容阅读
摘 要:本装置利用图像识别、颜色识别技术检测乘员是否佩戴安全带,并通过限制油门深度,限制车速的方式对司机进行提醒,消除了传统安全带提醒装置防欺骗能力弱,提醒方式有效性、强制性不足的问题,限制车速的提醒方式更可以主动避免危险发生。不仅可以在私家车上应用此装置保障安全,还可以应用于公交车、出租车、网约车等职业领域,更有效地监督、提醒司机及乘客佩戴安全带,保障安全运营。
关键词:图像识别;颜色识别;安全带提醒装置;交通安全
中图分类号:U463.99 文献标识码:A 文章编号:1004-7344(2019)03-0214-03
引 言
安全带插口处的开关检测安全带是否插入,座椅下的压力传感器检测是否有人坐在座椅上。当安全带未插入并有人在座椅上时警报开启。当系统检测到乘员未系安全带时提示音响起,一般还会结合车速提醒,当车速未达到预设车速时即使未系安全带也不会有提示音响起,提示音常与警示灯配合工作。但部分车型的提示音在响了一段时间后会自动消失。
1 安全带提醒装置的研究目的分析
在了解相关背景和现状后,我們认为我们的改进应主要向两个方面进行:①采用充分条件作为系统判断乘员是否佩戴安全带的依据,经过分析论证,我们认为最佳方案是检测安全带是否绕过乘员身体前方;②采用更有效的提醒方式,并在提醒未被注意到时系统能主动采取措施避免危险而不依赖乘员自身行为。总体方案包括两部分:①通过图像识别检测安全带是否绕过身体前方,比传统检测方式更准确可靠,提高装置防欺骗能力;②通过限制油门深度,同时限制车速的方式提醒,提高提醒的有效性、强制性,若未系安全带,即使提醒被忽视,车速也将被限定在安全范围内,能主动保护乘员安全。
2 安全带提醒装置描述
装置分为两大板块:①检测板块,主要是电子结构;②提醒板块,主要是机械结构。检测板块负责检测乘员是否佩戴安全带;提醒部分负责限制油门深度,提醒司机佩戴安全带。检测板块通过主控板控制提醒板块。
2.1 主控板概述
我们使用的是DFROBOT上购买的ROMEOBLE控制器,属于arduino开源硬件。
因为我们在电路板制作和程序开发方面的知识水平十分有限,基础薄弱。由于时间、条件均有限,无法在课题研究期间对相关知识进行系统性学习,而arduinoIDE基于processingIDE开发,对初学者来说极易掌握,同时有足够灵活性。Arduino语言基于wiring语言开发,是对avr-gcc库的二次封装,不需要太多的单片机基础、编程基础。所以我们选择了较为基础,适合学生使用的开源硬件ROMEOBLE控制器。
控制器就像一个微型电脑,向控制器上上传一个程序,控制器就能以此对输入的数据进行分析处理并输出相应数据,从而实现传感器对其他电子元件的控制。
我们在检测板块第一阶段中,利用红外线传感器向控制器输入信号,控制器根据信号判断乘员是否佩戴安全带并向舵机发出相应动作指令;在检测板块第二阶段中,我们用pixy摄像头向控制器输入信号,控制器根据信号判断乘员是否佩戴安全带并向舵机发出相应动作指令。在检测板块第一阶段,红外线传感器使用模拟输入管脚A0输入信号,控制器通过数字口9号向舵机发出信号。在检测板块第二阶段,摄像头通过ICSP下载程序接口与控制器通信,控制器通过数字口9号向舵机发出信号。
2.2 红外线传感器检测方案
总体设计思路:红外线传感器检测方案原理图,接收到红外线信号判断为已佩戴安全带,未接收到红外线信号判断为未佩戴安全带。
2.2.1 红外线传感器概述
红外线传感器由红外线发射管、红外线接收管、比较器电路、指示灯、VCC、GND、D0管脚组成。发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理后,绿色指示灯亮起,同时信号输出接口(D0)输出数字信号(一个低电平信号),若接收管未接收到红外线,则输出高电平信号。
2.2.2 程序设计
使用的编程软件mixly(米思齐):
Mixly采用了Blockly图形化编程引擎,使用图形化的积木块代替了复杂的文本操作,适合初学者的使用和学习。Mixly在功能的设计上力求和ArduinoIDE的文本编程保持一致,目前最新发布的Mixly0.96版已经实现了Arduino的所有官方功能(包括中断处理),并加入了大量的第三方扩展库功能,如红外遥控、超声波等,可以保证课程开设和各类创客比赛的双重需求。Mixly在设计上考虑了绝对的普适性:①对Arduino官方支持的所有开发板,Mixly都提供了完美的支持:Mixly会根据开发板的类型自动改变模块中的管脚号、中断号、模拟输出管脚等;②对Arduino支持的第三方开发板,用户只要把相应开发板的定义复制到Mixly中,依然可以得到支持。如国内大量的ESP8266开发板、各类用户修改后的开发板等,从而保证了用户在开发板选择上的最大自由度。
2.2.3 实验与测试
首先要确定反光条的位置,反光条的位置需要满足以下条件:①能保证随安全带一起抽出,在乘员身体前方当安全带未按正确方式使用时(例如绕在乘员身后)无法反射红外线信号;②当安全带正常使用时反光条不会被乘员正常身体活动遮挡安全带在此处的扭转角度较小,测试时不同区域安全带在下列常见情况下被遮挡的情况,将遮挡时间除以总时间作为该区域在做某事的情况下被遮挡的概率,使用手机加权0.4,吃东西加权0.15,睡觉加权0.4,看报纸加权0.05,粗略估算出乘客的安全带不同区域被遮挡的概率;方向盘从最左到最右加权0.1,不遮挡加权0.9,粗略估算出司机安全带不同区域被遮挡概率: 根据以上条件,并结合生活经验和实际检验,我们初步确定将反光条设置在安全带正常使用时经过人锁骨处的一段。若正确使用安全带,安全带在该区域会拉的比较平整,而且在一般情况下该区域很少被遮挡。确定红外线传感器的位置,若将反光条设置在此处,红外线传感器固定位置应满足的条件,红外线信号不能被杂物遮挡,与反光条的距离不能过远,与反光条的连线大致垂直于反光条平面,根据以上条件,传感器的位置可以设置在A柱上或是挡风玻璃与车顶交界处,二者与反光条的距离均在40cm左右。
测试验证系统是否能满足以上条件并正常运行实验结果:
反光条对红外线的反射能力显著高于其他物体表面,检测距离与允许的偏转角度均能满足要求。可以利用反光条与其他材质反射能力的差异让系统从其他物体中区分出安全带而不会与其他物体混淆。主要存在以下问题:①安全带宽度不大,红外线传感器与反光条之间不易对准容易造成误判。②反光条易于复制,不能排除乘员使用其他反光条代替安全带上的反光条欺骗系统的情况,防欺骗能力达不到预期。③红外线传感器易被阳光干扰。
2.3 图像识别/颜色识别检测方案(第二阶段)
2.3.1 1pixy摄像头概述
Pixy是一个开源的图像识别传感器,支持多物体,多色彩的颜色识别,最高支持7种颜色。你可以告訴它你想要的颜色,教它找东西。Pixy支持多种通信方式,如SPI,I2C等,可以直插在Arduino控制板上面。它搭载的图像传感器配合强大的硬件,可以配合PC跟踪、分析多色的数据。Pixy是由Charmed实验室联合卡内基梅隆大学共同推出的一款图像传感器。其强大的处理器上搭载着一个图像传感器,它会选择性的处理有用的信息,因为它采用以颜色为中心的办法——使该产品只是将特定颜色的物体的视觉数据发送给相互配合的微型控制器,而不是输出所有视觉数据以进行图像处理。所以你的Arduino板或其它微控制器很容易跟它交流,并滕出许多CPU来执行其他事件。利用该摄像头,我们先教它一段特定的颜色组合,再将该颜色组合印在安全带上,这样,颜色组合相当于一段密码,可以增强系统防欺骗能力,摄像头自带的图像跟踪功能还解决了了安全带在使用过程中移动而造成误判的问题。该摄像头与arduino兼容,便于程序设计。
2.3.2 程序设计
依据之前对摄像头的学习,我们进行了初步的程序流程图设计,查找示例程序,因为我们都是arduino初学者,对编程的很多方面还未能有深入了解,运用也远未达到熟练,而该摄像头的部分代码米思齐无法满足,所以我们采取“逆向开发”的策略,因为arduino是开源电子原型平台,网上有丰富的资源可以利用,所以我们先找到了一段和我们类似的程序,再进行部分改编,避免了很多初学者可能面临的困难,减少了一些不必要的麻烦,降低了工作量。
以下代码来源于:吴家豪robot.有趣的CMUcam5_Pixy机器人[OL]. [2014-7-25].https://www.arduino.cn/thread-6582-1-1.html
#include <Servo.h>
#include <SPI.h> //Pixy库函数
#include <Pixy.h>
Pixy pixy;
Servo myservo_1; //定义舵机
Servo myservo_2;
Servo myservo_3;
int upsize=50;
int downsize=150;
int center=90;
void setup()
{
Serial.begin(9600);
Serial.print("Starting...\n");
myservo_1.attach(9); //定义舵机的引脚
myservo_2.attach(8);
myservo_1.write(90);
myservo_2.write(90);
myservo_3.attach(7);
myservo_3.write(center);
pixy.init();
}
void advance() //前进
{
myservo_1.write(0);
myservo_2.write(180);
}
void back() //后退
{
myservo_1.write(160);
myservo_2.write(20);
}
void left() //左转
{
myservo_1.write(0);
myservo_2.write(90);
}
void right() //右转 {
myservo_1.write(90);
myservo_2.write(180);
}
void Stop() //停止
{
myservo_1.write(90);
myservo_2.write(90);
}
void loop()
{
static int i =0;
int j;
uint16_tblocks;
char buf[32];
blocks =pixy.getBlocks(); //读取数值
Serial.print(pixy.blocks[0].width);
Serial.print(" ");
Serial.print(pixy.blocks[0].height);
Serial.print(" ");
Serial.print(pixy.blocks[0].x);
Serial.print(" ");
Serial.println(pixy.blocks[0].width * pixy.blocks[0].height);
//通過物块面积追踪
if(blocks)
{
if(pixy.blocks[0].x<200&&pixy.blocks[0].x>100)
{
if(pixy.blocks[0].width * pixy.blocks[0].height<55000)
advance();
elseif(pixy.blocks[0].width * pixy.blocks[0].height>55000)
back();
}
if(pixy.blocks[0].x>200)
{
right();
}
if(pixy.blocks[0].x<100)
{
left();
}
if(pixy.blocks[0].width * pixy.blocks[0].height>500)
{
if (pixy.blocks[0].y < 90 &¢er> upsize)
{
center-=2;
delay(2);
}
if(pixy.blocks[0].y>120 && center<downsize)
{
center+= 2;
delay(2);
}
}
}
myservo_3.write(center);
}
以上代码实现的功能为通过物块面积追踪控制多个舵机,我们需要将其改编为通过检测物块有无控制单个舵机。
程序改编与简单说明
#include <SPI.h>
#include <Pixy.h> //库函数
#include <Servo.h>
Pixy pixy;
Servo myservo_1;
int upsize=50; //定义舵机
int downsize=150;
int center=90;
void setup()
{
Serial.begin(9600);
Serial.print("Starting...\n"); //定义舵机引脚
myservo_1.attach(9);
myservo_1.write(45);
}
void loop()
{
static int i = 0;
int j; //读取数值
uint16_t blocks;
char buf[32];
blocks = pixy.getBlocks();
Serial.print(blocks); //串行打印
if(blocks)
{
myservo_1.write(45); //当识别到物体时舵机转动45°,否则转动60°
delay(20); }
else
{
myservo_1.write(60);
delay(20);
}
}
2.3.3实验测试
与红外线传感器相比,该摄像头检测能力有了大幅度提升,检测范围范围更广,准确率更高,解决了红外线传感器方案检测范围狭窄,失误率高的问题;每秒50帧的传输速率以及自带的图像跟踪功能更适合于追踪位置、角度会不断变化的安全带;而使用颜色组合的方法则大大提高了装置的防欺骗能力,同时存在夜间难以使用的问题。
3 安全带提醒装置优势
与传统装置相比,由于以安全带绕过乘员身体前方这一充分条件作为判断依据,并结合了图像识别颜色组合的方式,安全带提醒装置防欺骗能力显著提升。采用限制油门深度、限制车速的方式作为提醒方式,提醒有效性、强制性明显改善,同时,提醒是否能够保障安全不再取决于乘员自身行为,限制车速本身就能够主动、直接避免危险发生,安全性更高。这种提醒方式尤其适合于在出租车、公交车、网约车等场合下提醒司机或乘客系上安全带,避免了因口头提醒可能出现的尴尬,保障从业者与消费者的生命财产安全。装置结构原理简单,具有很大灵活性,适用于多种不同场合。
4 安全带提醒装置改进空间分析
①摄像头在夜间无法使用,而红外线可以在夜间使用,两者可以结合,例如模仿红外线扫描条形码的技术,打印一段黑白色块组成的条形码,利用黑色与白色对红外线反射的区别识别条形码,或是利用红外线反射/吸收涂层对标记进行隐形处理。我们采用颜色识别方案之前就对此方案进行过研究,但因相关资料匮乏,实施难度大,扫描模塊与arduino不能兼容等问题放弃了此方案。②如今汽车电子化程度非常高,几乎每一辆车都配备有ECU(电子控制单元)控制车辆运行,而油门则普遍采用了电子油门,司机踩动电子油门,电子油门就会向ECU输入特定的电压信号,ECU对信号进行分析处理后控制电子节气门,以此控制发动机工作。所以可以对电子油门输出信号的特性曲线与ECU的控制程序进行改动,使之在乘员未系安全带时限制节气门打开程度以限制车速,并以此方式提醒司机。此提醒方式不需要加装机械结构,更简洁,而且,ECU的电子限速方式比机械式的油门限制方式更能精确控制车速。
5 结束语
与传统装置相比,由于以安全带绕过乘员身体前方这一充分条件作为判断依据,并结合了图像识别颜色组合的方式,安全带提醒装置防欺骗能力显著提升,提醒有效性、强制性明显改善,保障从业者与消费者的生命财产安全。
参考文献
[1]Python极客团队.机器人Python极客编程入门与实战,电子工业出版社,2017,9.
[2]机械制图基础.北京航空航天大学出版社,2009,6.
收稿日期:2018-12-12
关键词:图像识别;颜色识别;安全带提醒装置;交通安全
中图分类号:U463.99 文献标识码:A 文章编号:1004-7344(2019)03-0214-03
引 言
安全带插口处的开关检测安全带是否插入,座椅下的压力传感器检测是否有人坐在座椅上。当安全带未插入并有人在座椅上时警报开启。当系统检测到乘员未系安全带时提示音响起,一般还会结合车速提醒,当车速未达到预设车速时即使未系安全带也不会有提示音响起,提示音常与警示灯配合工作。但部分车型的提示音在响了一段时间后会自动消失。
1 安全带提醒装置的研究目的分析
在了解相关背景和现状后,我們认为我们的改进应主要向两个方面进行:①采用充分条件作为系统判断乘员是否佩戴安全带的依据,经过分析论证,我们认为最佳方案是检测安全带是否绕过乘员身体前方;②采用更有效的提醒方式,并在提醒未被注意到时系统能主动采取措施避免危险而不依赖乘员自身行为。总体方案包括两部分:①通过图像识别检测安全带是否绕过身体前方,比传统检测方式更准确可靠,提高装置防欺骗能力;②通过限制油门深度,同时限制车速的方式提醒,提高提醒的有效性、强制性,若未系安全带,即使提醒被忽视,车速也将被限定在安全范围内,能主动保护乘员安全。
2 安全带提醒装置描述
装置分为两大板块:①检测板块,主要是电子结构;②提醒板块,主要是机械结构。检测板块负责检测乘员是否佩戴安全带;提醒部分负责限制油门深度,提醒司机佩戴安全带。检测板块通过主控板控制提醒板块。
2.1 主控板概述
我们使用的是DFROBOT上购买的ROMEOBLE控制器,属于arduino开源硬件。
因为我们在电路板制作和程序开发方面的知识水平十分有限,基础薄弱。由于时间、条件均有限,无法在课题研究期间对相关知识进行系统性学习,而arduinoIDE基于processingIDE开发,对初学者来说极易掌握,同时有足够灵活性。Arduino语言基于wiring语言开发,是对avr-gcc库的二次封装,不需要太多的单片机基础、编程基础。所以我们选择了较为基础,适合学生使用的开源硬件ROMEOBLE控制器。
控制器就像一个微型电脑,向控制器上上传一个程序,控制器就能以此对输入的数据进行分析处理并输出相应数据,从而实现传感器对其他电子元件的控制。
我们在检测板块第一阶段中,利用红外线传感器向控制器输入信号,控制器根据信号判断乘员是否佩戴安全带并向舵机发出相应动作指令;在检测板块第二阶段中,我们用pixy摄像头向控制器输入信号,控制器根据信号判断乘员是否佩戴安全带并向舵机发出相应动作指令。在检测板块第一阶段,红外线传感器使用模拟输入管脚A0输入信号,控制器通过数字口9号向舵机发出信号。在检测板块第二阶段,摄像头通过ICSP下载程序接口与控制器通信,控制器通过数字口9号向舵机发出信号。
2.2 红外线传感器检测方案
总体设计思路:红外线传感器检测方案原理图,接收到红外线信号判断为已佩戴安全带,未接收到红外线信号判断为未佩戴安全带。
2.2.1 红外线传感器概述
红外线传感器由红外线发射管、红外线接收管、比较器电路、指示灯、VCC、GND、D0管脚组成。发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理后,绿色指示灯亮起,同时信号输出接口(D0)输出数字信号(一个低电平信号),若接收管未接收到红外线,则输出高电平信号。
2.2.2 程序设计
使用的编程软件mixly(米思齐):
Mixly采用了Blockly图形化编程引擎,使用图形化的积木块代替了复杂的文本操作,适合初学者的使用和学习。Mixly在功能的设计上力求和ArduinoIDE的文本编程保持一致,目前最新发布的Mixly0.96版已经实现了Arduino的所有官方功能(包括中断处理),并加入了大量的第三方扩展库功能,如红外遥控、超声波等,可以保证课程开设和各类创客比赛的双重需求。Mixly在设计上考虑了绝对的普适性:①对Arduino官方支持的所有开发板,Mixly都提供了完美的支持:Mixly会根据开发板的类型自动改变模块中的管脚号、中断号、模拟输出管脚等;②对Arduino支持的第三方开发板,用户只要把相应开发板的定义复制到Mixly中,依然可以得到支持。如国内大量的ESP8266开发板、各类用户修改后的开发板等,从而保证了用户在开发板选择上的最大自由度。
2.2.3 实验与测试
首先要确定反光条的位置,反光条的位置需要满足以下条件:①能保证随安全带一起抽出,在乘员身体前方当安全带未按正确方式使用时(例如绕在乘员身后)无法反射红外线信号;②当安全带正常使用时反光条不会被乘员正常身体活动遮挡安全带在此处的扭转角度较小,测试时不同区域安全带在下列常见情况下被遮挡的情况,将遮挡时间除以总时间作为该区域在做某事的情况下被遮挡的概率,使用手机加权0.4,吃东西加权0.15,睡觉加权0.4,看报纸加权0.05,粗略估算出乘客的安全带不同区域被遮挡的概率;方向盘从最左到最右加权0.1,不遮挡加权0.9,粗略估算出司机安全带不同区域被遮挡概率: 根据以上条件,并结合生活经验和实际检验,我们初步确定将反光条设置在安全带正常使用时经过人锁骨处的一段。若正确使用安全带,安全带在该区域会拉的比较平整,而且在一般情况下该区域很少被遮挡。确定红外线传感器的位置,若将反光条设置在此处,红外线传感器固定位置应满足的条件,红外线信号不能被杂物遮挡,与反光条的距离不能过远,与反光条的连线大致垂直于反光条平面,根据以上条件,传感器的位置可以设置在A柱上或是挡风玻璃与车顶交界处,二者与反光条的距离均在40cm左右。
测试验证系统是否能满足以上条件并正常运行实验结果:
反光条对红外线的反射能力显著高于其他物体表面,检测距离与允许的偏转角度均能满足要求。可以利用反光条与其他材质反射能力的差异让系统从其他物体中区分出安全带而不会与其他物体混淆。主要存在以下问题:①安全带宽度不大,红外线传感器与反光条之间不易对准容易造成误判。②反光条易于复制,不能排除乘员使用其他反光条代替安全带上的反光条欺骗系统的情况,防欺骗能力达不到预期。③红外线传感器易被阳光干扰。
2.3 图像识别/颜色识别检测方案(第二阶段)
2.3.1 1pixy摄像头概述
Pixy是一个开源的图像识别传感器,支持多物体,多色彩的颜色识别,最高支持7种颜色。你可以告訴它你想要的颜色,教它找东西。Pixy支持多种通信方式,如SPI,I2C等,可以直插在Arduino控制板上面。它搭载的图像传感器配合强大的硬件,可以配合PC跟踪、分析多色的数据。Pixy是由Charmed实验室联合卡内基梅隆大学共同推出的一款图像传感器。其强大的处理器上搭载着一个图像传感器,它会选择性的处理有用的信息,因为它采用以颜色为中心的办法——使该产品只是将特定颜色的物体的视觉数据发送给相互配合的微型控制器,而不是输出所有视觉数据以进行图像处理。所以你的Arduino板或其它微控制器很容易跟它交流,并滕出许多CPU来执行其他事件。利用该摄像头,我们先教它一段特定的颜色组合,再将该颜色组合印在安全带上,这样,颜色组合相当于一段密码,可以增强系统防欺骗能力,摄像头自带的图像跟踪功能还解决了了安全带在使用过程中移动而造成误判的问题。该摄像头与arduino兼容,便于程序设计。
2.3.2 程序设计
依据之前对摄像头的学习,我们进行了初步的程序流程图设计,查找示例程序,因为我们都是arduino初学者,对编程的很多方面还未能有深入了解,运用也远未达到熟练,而该摄像头的部分代码米思齐无法满足,所以我们采取“逆向开发”的策略,因为arduino是开源电子原型平台,网上有丰富的资源可以利用,所以我们先找到了一段和我们类似的程序,再进行部分改编,避免了很多初学者可能面临的困难,减少了一些不必要的麻烦,降低了工作量。
以下代码来源于:吴家豪robot.有趣的CMUcam5_Pixy机器人[OL]. [2014-7-25].https://www.arduino.cn/thread-6582-1-1.html
#include <Servo.h>
#include <SPI.h> //Pixy库函数
#include <Pixy.h>
Pixy pixy;
Servo myservo_1; //定义舵机
Servo myservo_2;
Servo myservo_3;
int upsize=50;
int downsize=150;
int center=90;
void setup()
{
Serial.begin(9600);
Serial.print("Starting...\n");
myservo_1.attach(9); //定义舵机的引脚
myservo_2.attach(8);
myservo_1.write(90);
myservo_2.write(90);
myservo_3.attach(7);
myservo_3.write(center);
pixy.init();
}
void advance() //前进
{
myservo_1.write(0);
myservo_2.write(180);
}
void back() //后退
{
myservo_1.write(160);
myservo_2.write(20);
}
void left() //左转
{
myservo_1.write(0);
myservo_2.write(90);
}
void right() //右转 {
myservo_1.write(90);
myservo_2.write(180);
}
void Stop() //停止
{
myservo_1.write(90);
myservo_2.write(90);
}
void loop()
{
static int i =0;
int j;
uint16_tblocks;
char buf[32];
blocks =pixy.getBlocks(); //读取数值
Serial.print(pixy.blocks[0].width);
Serial.print(" ");
Serial.print(pixy.blocks[0].height);
Serial.print(" ");
Serial.print(pixy.blocks[0].x);
Serial.print(" ");
Serial.println(pixy.blocks[0].width * pixy.blocks[0].height);
//通過物块面积追踪
if(blocks)
{
if(pixy.blocks[0].x<200&&pixy.blocks[0].x>100)
{
if(pixy.blocks[0].width * pixy.blocks[0].height<55000)
advance();
elseif(pixy.blocks[0].width * pixy.blocks[0].height>55000)
back();
}
if(pixy.blocks[0].x>200)
{
right();
}
if(pixy.blocks[0].x<100)
{
left();
}
if(pixy.blocks[0].width * pixy.blocks[0].height>500)
{
if (pixy.blocks[0].y < 90 &¢er> upsize)
{
center-=2;
delay(2);
}
if(pixy.blocks[0].y>120 && center<downsize)
{
center+= 2;
delay(2);
}
}
}
myservo_3.write(center);
}
以上代码实现的功能为通过物块面积追踪控制多个舵机,我们需要将其改编为通过检测物块有无控制单个舵机。
程序改编与简单说明
#include <SPI.h>
#include <Pixy.h> //库函数
#include <Servo.h>
Pixy pixy;
Servo myservo_1;
int upsize=50; //定义舵机
int downsize=150;
int center=90;
void setup()
{
Serial.begin(9600);
Serial.print("Starting...\n"); //定义舵机引脚
myservo_1.attach(9);
myservo_1.write(45);
}
void loop()
{
static int i = 0;
int j; //读取数值
uint16_t blocks;
char buf[32];
blocks = pixy.getBlocks();
Serial.print(blocks); //串行打印
if(blocks)
{
myservo_1.write(45); //当识别到物体时舵机转动45°,否则转动60°
delay(20); }
else
{
myservo_1.write(60);
delay(20);
}
}
2.3.3实验测试
与红外线传感器相比,该摄像头检测能力有了大幅度提升,检测范围范围更广,准确率更高,解决了红外线传感器方案检测范围狭窄,失误率高的问题;每秒50帧的传输速率以及自带的图像跟踪功能更适合于追踪位置、角度会不断变化的安全带;而使用颜色组合的方法则大大提高了装置的防欺骗能力,同时存在夜间难以使用的问题。
3 安全带提醒装置优势
与传统装置相比,由于以安全带绕过乘员身体前方这一充分条件作为判断依据,并结合了图像识别颜色组合的方式,安全带提醒装置防欺骗能力显著提升。采用限制油门深度、限制车速的方式作为提醒方式,提醒有效性、强制性明显改善,同时,提醒是否能够保障安全不再取决于乘员自身行为,限制车速本身就能够主动、直接避免危险发生,安全性更高。这种提醒方式尤其适合于在出租车、公交车、网约车等场合下提醒司机或乘客系上安全带,避免了因口头提醒可能出现的尴尬,保障从业者与消费者的生命财产安全。装置结构原理简单,具有很大灵活性,适用于多种不同场合。
4 安全带提醒装置改进空间分析
①摄像头在夜间无法使用,而红外线可以在夜间使用,两者可以结合,例如模仿红外线扫描条形码的技术,打印一段黑白色块组成的条形码,利用黑色与白色对红外线反射的区别识别条形码,或是利用红外线反射/吸收涂层对标记进行隐形处理。我们采用颜色识别方案之前就对此方案进行过研究,但因相关资料匮乏,实施难度大,扫描模塊与arduino不能兼容等问题放弃了此方案。②如今汽车电子化程度非常高,几乎每一辆车都配备有ECU(电子控制单元)控制车辆运行,而油门则普遍采用了电子油门,司机踩动电子油门,电子油门就会向ECU输入特定的电压信号,ECU对信号进行分析处理后控制电子节气门,以此控制发动机工作。所以可以对电子油门输出信号的特性曲线与ECU的控制程序进行改动,使之在乘员未系安全带时限制节气门打开程度以限制车速,并以此方式提醒司机。此提醒方式不需要加装机械结构,更简洁,而且,ECU的电子限速方式比机械式的油门限制方式更能精确控制车速。
5 结束语
与传统装置相比,由于以安全带绕过乘员身体前方这一充分条件作为判断依据,并结合了图像识别颜色组合的方式,安全带提醒装置防欺骗能力显著提升,提醒有效性、强制性明显改善,保障从业者与消费者的生命财产安全。
参考文献
[1]Python极客团队.机器人Python极客编程入门与实战,电子工业出版社,2017,9.
[2]机械制图基础.北京航空航天大学出版社,2009,6.
收稿日期:2018-12-12