所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

技走迷宫、勇闯"悬崖"

安卓机器人 安卓机器人 2019-06-19 12:54:29

迷宫原型:      

        国内App Inventor 推广先驱、“老巫婆”~金从军创办的人人可编程的网站:https://www.17coding.net/其中的块语言编程游戏对于初学者很有吸引力。麦昆赛道的构思就是从其中的“迷宫第10关”获得的。


projectImage

        我相信第1~9关很多人能一次性过关,但是第10关却不一定。就连真正的程序员首次遇到这个问题也不是立即就能够解决。这么具有挑战性的关口,建议不要查答案,自己摸索及陪着小孩子一起想办法是件很有意思的事情哟。

走迷宫基本策略:

        下图即是迷宫第10关。根据网站提示,可以选择如图所示蓝色路线到达目标。简单地说:假想你就是左下的那个小小机器人,闭上眼睛,在迷宫中自始至终用左手摸着左边的迷宫内墙壁向前走,就一定能够到达目标!

projectImage

观察后再思考:

1、如果我们把机器人放在迷宫内的任何位置,它都能够准确地到达目标点吗?(无论机器人自身所处方向如何)

2、如果机器人沿着右手侧走又怎么样呢?

被否定方案一:        

        通过观察虚拟机器人的运动方式,我们可以让麦昆仿照它检测左方及前方是否有路,从而决定转向。看着虚拟机器人轻轻松松转向调头,可是到真正的现实中的麦昆却一点也不顺利。开始选择的检测左方及前方是否有路的传感器~SHARP红外测距传感器,用巡线辅助在迷宫内走直(目的为了不撞墙)反复调试四天时间终于能够左转向,但是最终又发现红外抗干扰不强,偶有测不准而突然转向,直接撞墙!

        下图即是麦昆左侧及正前方SHARP红外测距传感器。

projectImage

被否定方案二:

      后来想了想,麦昆可以像人一样贴着墙走,直接在两侧加上碰撞传感器不就容易解决了吗?!

      下图安装了两个碰撞传感器,但是实际中我用的KT板实在太轻了,让小小麦昆能够感觉到贴着墙,板子也快弯拆了。

projectImage

采纳方案:

        采用两个超声波,一个位于麦昆车身左侧检测左方距离,一个位于麦昆正前方检测前方距离,就是迷宫里的虚拟机器人一样。而且发现超声波抗干扰很强,测距准确。

(为什么开始不用这种方案,主要是因为麦昆的一个超声波就占用两个接口,而红外传感器两个占用两个接口)

       现在加入mirco:bit扩展板,立即解决问题,只是需要上方MICRO:BIT把所接超声波传感器测得的距离及时无线发送给麦昆使用就好了。

projectImage

迷宫全图:

       根据迷宫10基本地形使用KT板,制作麦昆游我湖北随州曾侯乙墓地宫迷宫。(如下)

projectImage
projectImage
projectImage

视频简介:

1、湖北省博物馆馆长简介编钟

2、跟随麦昆一起聆听2400多年前的编钟所奏国乐——“风一样的勇士”片段

走迷宫Mind+积木块代码:

projectImage

进一步了解整个先秦中国的民乐器:

欢迎到随州,可随意敲一敲仿制编钟的:

projectImage
projectImage
projectImage
projectImage
projectImage
projectImage
projectImage

勇闯“悬崖”:

        自从麦昆勇敢成功地走了一圈曾侯乙墓“地宫”,同时身临其境地聆听了震惊世界的编钟之声~"风一样的勇士",越发士气高涨,准备挑战走“悬崖”!

       虽然视频中没有跌落,实际中,你知道的,反反复复修改观察近百次,仍在不断完善中...

走“悬崖”Mind+代码:

备注:由于Mind+里传感器暂不支持SHARP0A41SK,但是支持SHARP0A21,因此通过学习SHARP0A21的代码来调整暂不存在的传感器SHARP0A41,并经过测试正确无误,所以这里只能给出纯代码,而无有效积木块代码。

代码 代码
	                    					#include <Maqueen_Motor.h>

Maqueen_Motor motor;
uint16_t get_gp2y41cm(uint8_t pin);
///////////////////////////////////////////
uint16_t get_gp2y41cm(uint8_t pin)
{
  uint16_t value = analogRead(pin);
#if defined(NRF5)
  value = value * 3.3 / 5.0;
#endif
  value = value < 16? 16:value;  // Modified 
  return 2076.0 / (value - 11.0); // Modified
}
///////////////////////////////////////////
void setup() {
	delay(3000);
	//Serial.begin(9600);
}
///////////////////////////////////////////
void loop() {
	motor.motorRun(motor.LEFT,motor.CW,70);
	motor.motorRun(motor.RIGHT,motor.CW,70);
	
	if ((get_gp2y41cm(2) > 6)&&(get_gp2y41cm(1) <= 5)) {
		motor.motorRun(motor.LEFT,motor.CW,70);
		motor.motorRun(motor.RIGHT,motor.CW,0);
    delay(300);
	}

	if ((get_gp2y41cm(2) <= 5)&&(get_gp2y41cm(1) > 6)) {
		motor.motorRun(motor.LEFT,motor.CW,0);
		motor.motorRun(motor.RIGHT,motor.CW,70);
    delay(300);
	}

	if((get_gp2y41cm(1) > 6) && (get_gp2y41cm(2) > 6)){
		motor.motorRun(motor.LEFT,motor.CCW,70);
		motor.motorRun(motor.RIGHT,motor.CCW,70);
		delay(500);
		if(random(0, 2)==0){
  		motor.motorRun(motor.LEFT,motor.CW,0);
  		motor.motorRun(motor.RIGHT,motor.CW,70);
  		delay(300);
  		}else{
  		motor.motorRun(motor.LEFT,motor.CW,70);
  		motor.motorRun(motor.RIGHT,motor.CW,0);
  		delay(300);
    }
	}
	
	//Serial.println(get_gp2y41cm(1));
	//delay(700);
}
////////////////////////////////////////////
	                    				
材料清单 材料清单
2x
micro:bit
1x
麦昆: micro:bit教育机器人 V3.0
1x
micro:bit 电机驱动扩展板
1x
3.7V电池
2x
SHARP GP2Y0A41SKOF 红外距离传感器 (4-30cm)
1x
HC-SRO4超声波传感器
1x
长直尺
1x
美工刀
10x
KT板若干
projectImage
projectImage
projectImage
projectImage
projectImage
projectImage

走迷宫Mind+代码及走"悬崖"文本源码:

https://gitee.com/vividxpx/MaiKunSaiDao/attach_files

Makelog作者原创文章,未经授权禁止转载。
0
3
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]