本小节主要讲解智能家居机器人如何通过避障传感器进行导航,基本思路为在机器人上面安装3个红外避障模块,即正前方、左侧方、右侧方,如果前方有障碍物(即正前方有障碍物),那么机器人后退一段距离,然后往一侧运行;如果左侧方有障碍物,左侧传感器会感应到,机器人后退一段距离,往右侧运行;如果右侧有障碍物,则右侧传感器可以感应到,机器人也会后退一段距离,往左侧运行。其具体流程如图3.4.14所示。
图3.4.14 家居机器人导航流程
智能家居机器人导航程序范例如下:
int SNUM[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)
digital Write(INA, HIGH);
else
digital Write(INA, LOW);
if(sp2〉0)
digital Write(INB, HIGH);
else
digital Write(INB, LOW);
analog Write(PWMA,abs (sp1));
analog Write(PWMB,abs (sp2));
}
void setup(){
pin Mode(8, INPUT); //配置左传感器 IO 口为输入
pin Mode(14, INPUT); //配置中传感器 IO 口为输入
pin Mode(15, INPUT); //配置右传感器 IO 口为输入
pin Mode(INA,OUTPUT);
pin Mode(INB,OUTPUT); //配置电机驱动 IO 口为输出
}
void loop(){
SNUM[0] = digital Read(8);//左传感器赋值
SNUM[1] = digital Read(14); //中传感器赋值
SNUM[2] = digital Read(15); //右传感器赋值
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,-100); //后退
delay(50);
motospd(100,50); //右转
}
if ((SNUM[0]==1)&&(SNUM[1]==1)&&(SNUM[2]==0)) //右传感器检测到障碍物
{
motospd(-100,-100); //后退
delay(50);
motospd(50,100); //左转
}
if ((SNUM[0]==0)&&(SNUM[1]==0)&&(SNUM[2]==0)) //中传感器检测到障碍物
{
motospd(-100,-100); //后退
delay(50);
motospd(50,100); //左转
}
delay(50);
}
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。