本帖最后由 money0010 于 2013-8-21 16:16 编辑
Openjumper避障小车 一. 概述 简介
在完成寻线小车的制作后,使用红外避障传感器改装小车就变得十分简单了。 基本原理 控制流程:小车的红外传感器检测到障碍物后发送给控制器,控制器判断应该如何行走,再通过电机驱动控制电机转速来改变小车的行驶方向。
二.需要的材料 1. 车体:Openjumper小车车体套件×1 2. 控制器:Arduino uno×1 3. 电机驱动:openjumperL298电机驱动板×1 4. 扩展板:UNO配套的传感器扩展板×1 5. 传感器模块:红外避障传感器×3 6. 尼龙柱,螺丝螺帽,杜邦线,传感器3p杜邦线若干。 三.硬件的组装试调
1.车体组装和板卡安装详见小车车体组装教程和循迹小车组装教程。 2.安装传感器避障传感器的安装比较简单,可以像循迹传感器一样装在下层,也可以装在上层。 先将5mm长的短尼龙柱用螺丝固定在传感器上,再将尼龙柱有螺纹的一段穿过车体板上的孔后用螺母固定即可。
四.规格
五.引脚定义
六.示例代码
[mw_shl_code=cpp,true]int SNUM[3] ;//定义3个传感器,从SNUM[0]-SNUM[2]为从左到右3个红外避障传感器
int INA = 4; //电机A正反转控制端
int PWMA = 5; //电机A调速端
int INB = 7; //电机B正反转控制端
int PWMB = 6; //电机B调速端
void motospd(int sp1,int sp2) //电机速度控制函数。括号内分别为左右电机速度值,
{ //范围-255~+255,正值为正转,负值为反转。
if(sp1>0)
digitalWrite(INA, HIGH);
else
digitalWrite(INA, LOW);
if(sp2>0)
digitalWrite(INB, HIGH);
else
digitalWrite(INB, LOW);
analogWrite(PWMA,abs (sp1));
analogWrite(PWMB,abs (sp2));
}
void setup(){
pinMode(11, INPUT); //配置左传感器IO口为输入
pinMode(12, INPUT); //配置中传感器IO口为输入
pinMode(13, INPUT); //配置右传感器IO口为输入
Serial.begin(9600); //打开串口,初始化
pinMode(INA,OUTPUT);
pinMode(INB,OUTPUT); //配置电机驱动IO口为输出
}
void loop(){
SNUM[0] = digitalRead(11);//左传感器赋值
SNUM[1] = digitalRead(12); //中传感器赋值
SNUM[2] = digitalRead(13); //右传感器赋值
for (int i=0;i<3;i++)
{
Serial.print(SNUM);//串口输出每个传感器的值,打开串口可显示传感器检测结果
}
Serial.println(SNUM[2]);
if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==1))//所有传感器都没有检测到障碍
motospd(100,100); //直行
if ((SNUM[0]==0)&&(SNUM[1]==1)&&(SNUM[2]==1)) //左传感器检测到障碍物
motospd(100,50); //右转
if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==0)) //右传感器检测到障碍物
motospd(50,100); //左转
if ((SNUM[0]==1)&&(SNUM[1]==0)&&(SNUM[2]==1)) //中传感器检测到障碍物
motospd(-100,-100); //后退
delay(50);
}[/mw_shl_code]
七.改进思路本例程中的避障小车利用三个红外传感器实现了简单的避障功能。下面也给大家一些改进加强的提示,给喜欢自己摸索和DIY的朋友们一些方向。 1. 增减传感器数量:3个传感器最多只能检测前-左-右三个方向的障碍物,增加多个传感器并改进控制程序可以让小车变得更加智能。 2. 使用超声波传感器:超声波传感器可以通过返回的超声波信号计算出前方障碍物的具体距离,其范围为2-450cm。超声波传感器配合舵机加装在小车上,效果比红外传感器好很多哦。 |