• 沒有找到結果。

碰撞传感器

在文檔中 目 录 第 1 章 (頁 23-27)

第 3 章 传感器、微处理器与驱动器

3.2. 能力风暴的传感器及其处理电路

3.2.1. 碰撞传感器

碰撞传感器是使能力风暴智能机器人有感知碰撞环上的碰撞信息能力的传感器。在能力 风暴智能机器人的左前、右前、左后、右后设置有四个碰撞开关(常开),它们与碰撞环共 同构成了碰撞传感器(见图 3.2)。碰撞环与底盘柔性连接,在受力后与底盘产生相对位移,

触发固连在底盘上相应的碰撞开关,使之闭合。我们把来自四周的碰撞分为八个方向(见图 3.3)。

图 3.2 碰撞开关及碰撞环

图 3.3 碰撞传感器方位 应用

我们在 VJC 环境中,编写一个碰撞检测程序,来理解如何在程序中使用碰撞开关。VJC 图形编辑界面参见图 1-4:

1 进入 VJC 的图形化编程界面,将“控制模块库“中的“永远循环”模块拖入到流程图生 成区并与“主程序”相连;

2 将“传感器模块”库中 模块连接到循环内部,见图 3-6;

3 将“执行器模块”中的“显示模块”连接到程序中;

4 设置“显示”模块(见图 3-5),在“显示”模块上点击右键,在弹出“设置显示模块”

对话框选中“引用变量”,会出现“变量百宝箱”对话框,点击“碰撞检测”图标,在碰 撞变量引用中点击“碰撞变量一”,按确定键;

5 在“显示”模块正下方,连接“任务结束”模块,完成碰撞检测程序的编写。

图 3-5 VJC 碰撞显示变量设置图

图 3-6 碰撞检测程序流程

下载并运行此程序,观察 LCD 上的显示:

bmp_1=0 (表示此时没有碰撞)

若前碰撞受到碰撞,LCD 上显示:

bmp_1=4 (表示左后方受到碰撞)

在其它方向施加碰撞,LCD 显示的值将不同,四个方向发生碰撞时返回值的意义为: 1=>

左前方受碰,2=>右前方受碰,4=>左后方受碰,8=〉右后方受碰。

上面我们使用的是 VJC 的图形编程方式编的程序,我们再用 JC 语言编写下面的程序来 理解碰撞传感器是如何工作的。

在 JC 语言中,碰撞传感器的库函数是 bumper(),在程序运行过程中此库函数仅在被调 用到时执行一次,即采集数据一次。因此要连续查询碰撞传感器的状态就要在 VJC 交互式调 试窗口一行编辑框中输入如下程序块:

{while(1) {printf("bump=%d\n",bumper());wait(0.1);}}

按回车,JC 能立即编译这一段程序并下载运行,LCD 上显示:

bump=0 (表示此时没有碰撞)

(VJC 的这种交互式能力特别便于调试、测试和学习)

按左前碰撞环,LCD 上显示:bump=5。在其他方向施加碰撞,显示的值将不同。各个方 向发生碰撞时返回值对应关系如下:

无 0,左前 1,右前 2,左后 4,右后 8

安装 以下是碰撞传感器的接线图

左后 右后 左前 右前

图 3.4 碰撞传感器的接线图

用户在使用时只需将碰撞开关的组合插针以正确的方向插入相应的位置即可。

图 3.5 碰撞传感器的插针位置图 原理

到此,碰撞传感器已经能够被用户直接使用。但是,对应于每一个方向的碰撞,用户 是怎样得到一个二进制数值的呢?

在能力风暴智能机器人里,四个碰撞开关接在一个电阻网络里,通过采集模拟口 PE3 上电压值的变化,来识别出哪个或哪些碰撞开关闭合,从而判断出哪个方向有碰撞。同样,

在 VJC 交互信息窗口上方一行编辑框中输入如下程序块:

{while(1) {printf("pe3=%d\n",analogport(3));wait(0.1);}}

按回车,JC 能立即编译这一段程序并下载运行,LCD 上显示:

pe3=1 (表示此时无碰撞)

在各个方向上按压碰撞环,pe3 返回值各不相同,这些值是 pe3 上电压值通过模数转换

(模拟量转化为数字量)得到的结果。它们不直观,也不方便记忆。对此在库函数中进行了 变换,将模拟口上采得的电压值变为直观表示各个方位的四位二进制数(参看

VJC10\robots\AS-UII\libs\lib_AS_MII.jc 中的子函数 int bumper(),这样就得到了在应 用中的对应关系、计算方式和调用方法。

图 3.6 碰撞传感器的电路图 碰撞开关

1K

1K

2K

3.9K

范例 void main() {

int bumpvalue; /* 定义整形变量*/

while(1) {

bumpvalue=bumper(); /* bumper()将返回碰撞检测值*/

printf("bump=%b\n",bumpvalue);

/*以二进制形式打印出碰撞传感器的检测值*/

wait(0.5); /*等待0.5秒*/

} }

运行以上程序,前后左右按碰撞环,可直接从显示屏上读出显示值。

在文檔中 目 录 第 1 章 (頁 23-27)