会走迷宫的机器人需要的材料:主控制器,地面灰度检测传感器模块4块,红外避障传感器1个,黑色胶带1卷

2026/3/11 10:53:25 1168 
 

要用黑胶带制作一幅迷宫地图,如图10-3所示。在迷宫的出口处 用一个障碍物当作“宝藏”。然后,我们机器人的任务就是顺利通过迷宫并且停在“宝藏” 前面。这里先来处理一个简化的问题,假设迷宫的地图是已知的,也就是说,机器人知道应该向什么方向,转几次弯才能走出迷宫。

实 验 器 材

· 已经组装好的机器人;

· 计算机及软件编程环境;

·USB 下载线;

· 主控制器;

· 地面灰度检测传感器模块4块;

· 红外避障传感器1个;

· 黑色胶带1卷;

· 作为宝箱的浅色立方体1个。

实验步骤

1.连接机器人

先将机器人、扩展板和地面灰度检测传感器模块连接好。其中,地面灰度检测传感 器连接到A0~A3 端口。红外避障传感器连接到D3 端口。

2.调试灰度阈值

同样,像以前一样通过实验确定机器人所采用的灰度阈值。因为4个传感器的电路 和安装上可能会出现微小的差别,所以这里比较稳妥的处理方式是不要嫌麻烦,为它们每 个都测量一个灰度阈值。

3.编写程序

假设在已知的地图中,机器人只要在碰到路口时先进行两次左转弯,再进行一次右转 弯,就能走出迷宫了。用我们刚刚学习过的函数知识,这个程序可以写成下面示例中的样 子。同样,这个示例中与上节课示例程序有很多重合的地方,用省略号将之略去。

函数如何封装的问题,是没有一个固定答案的,示例程序中给出的可能也不是Z好的解决方案。总之,良好的函数封装可以让你的程序变得更简洁、更可读以及更容易维护和 修改,同学们在慢慢积累编程经验的过程中就会摸索出如何封装函数的窍门了。

const int InfraPort=3;

int counter=0;

//函数声明

void turn_left();

void turn_right();

void stop();

void go_straight();

void setup(){

pinMode(InfraPort,INPUT);


} void loop(){

if(digitalRead(InfraPort)==HIGH){ stop();

while(1);


//避障传感器连接D3 端口

//用于计数通过路口数目的变量

//找到宝藏,停下来

}

if(leftValueThreshold&&leftValuego_straight();

}else if(leftValue>Threshold II rightValue>Threshold){ //遇到路口

if(counter<2){

turn_left();

}else if(counter==2){

turn_right(); }else{

stop();

while(1); }

counter++;

)else if(leftMiddleValue>Threshold){

analogWrite(LeftSpeedPort,TurnHighSpeed);

analogWrite(RightSpeedPort,TurnLowSpeed); )elsef

analogWrite(LeftSpeedPort,TurnLowSpeed);

analogWrite(RightSpeedPort,TurnHighSpeed); }

delay(100);

//前两次遇到路口左转

//第3次遇到路口右转

//再遇到路口就停止,有可能地图出错了

//向右转弯

//向左转弯

//左转90°的函数实现

void turn_left(){

digitalWrite(LeftDirPort,LOW);

analogWrite(LeftSpeedPort,Forwardspeed);

analogWrite(RightspeedPort,ForwardSpeed);

delay(DelayTime);

digitalWrite(LeftDirPort,HIGH);

}

//右转90°的函数实现

void turn_right(){

digitalWrite(RightDirPort,LOW);

analogWrite(RightSpeedPort,ForwardSpeed);

analogWrite(LeftSpeedPort,Forwardspeed);

delay(DelayTime);

digitalWrite(RightDirPort,HIGH); }

//直行函数

void go_straight(){

analogWrite(LeftSpeedPort,ForwardSpeed);

analogWrite(RightSpeedPort,ForwardSpeed); }

//停止函数

void stop(){

analogWrite(LeftSpeedPort,0);

analogWrite(RightSpeedPort,0);



 
上一篇   下一篇
 
返回顶部
  技术支持
  关于创泽
  隐私条款
咨询热线
 
销售咨询
4006-935-088 / 4006-937-088
 
客服热线
4008-128-728

版权所有 @ 创泽智能机器人集团股份有限公司
运营中心 / 北京市·清华科技园九号楼5层
生产中心 / 山东省日照市开发区太原路71