回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

技走迷宫、勇闯"悬崖" 简单

头像 许培享 2019.06.19 1971 3

迷宫原型:

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


project-image

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

走迷宫基本策略:

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

project-image

观察后再思考:

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

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

被否定方案一:

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

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

project-image

被否定方案二:

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

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

project-image

采纳方案:

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

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

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

project-image

迷宫全图:

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

project-image
project-image
project-image

视频简介:

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

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

走迷宫Mind+积木块代码:

project-image

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

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

project-image
project-image
project-image
project-image
project-image
project-image
project-image

勇闯“悬崖”:

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

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

走“悬崖”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);
}
////////////////////////////////////////////

材料清单

  • micro:bit X2 链接
  • 麦昆: micro:bit教育机器人 V3.0 X1 链接
  • micro:bit 电机驱动扩展板 X1 链接
  • 3.7V电池 X1 链接
  • SHARP GP2Y0A41SKOF 红外距离传感器 (4-30cm) X2 链接
  • HC-SRO4超声波传感器 X1
  • 长直尺 X1
  • 美工刀 X1
  • KT板若干 X10
project-image
project-image
project-image
project-image
project-image
project-image

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

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

评论

user-avatar
  • 许培享

    许培享2021.02.01

    吴博士的留言很暖

    0
    • edumaker

      edumaker2020.07.25

      我看到了一个幸福的家庭和一颗有趣的心灵

      1
      • 许培享

        许培享2021.02.01

        谢谢博士先生!