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

熊出没之森林大拯救 简单

头像 2019.06.20 965 0
project-image

【介绍】

宁静祥和的东北原始森林,空气清新,万物复苏,熊大和熊二两兄弟在林间追逐奔跑,非常快乐,正在此时,来了一名伐木工——光头强,于是森林的宁静被打破了,美丽的大森林面临前所未有的危机,为了保护家园,熊大、熊二和光头强之间发生的保护森林和盗砍盗伐的环保大战。动画片里的熊大和熊二赤手空拳与光头强展开大战,为了更好的保护森林,我们为它们配备了一辆“麦昆战车”。这不,光头强又来砍伐树木了,于是熊大和熊二就驾着“麦昆战车”穿过树林、越过草丛、驶过跷跷板、跨过桥梁,移开大树,最后把光头强给抓住并送大大牢,保护了美丽的大森林。


材料清单

  • 麦昆机器人 X1 链接
  • 麦昆CR123A锂电池电源管理模组 X1 链接
  • 舵机 X2 链接
  • 硬纸板 X1
  • 雪糕棒 X1
  • 积木 X1
  • 塑料管 X1
  • 电工胶带 X1
  • 回形针 X1
  • 胶枪 X1
  • 铜柱 X1
  • 木板 X1
  • micrbit X1 链接
  • Mind+ X1


【制作过程】


步骤1 改装麦昆战车

1、把麦昆CR123A锂电池电源管理模组安装在麦昆小车上。

project-image

2、把两个舵机如下图所示分别用热熔胶固定在木板上。

project-image


3、用铜柱把木板平台与麦昆小车连接起来。并把木板下面的舵机接在P1针脚上,把木板上面的舵机接下P2针脚上。

project-image


4、把下图的连接件插在木板下面的舵机上,这个部分在执行任务时主要有两个作用:

一是从上往下旋转可以把跷跷板压下来以方便麦昆战车通过(下面的关卡 3)。

二是从下往上旋转可以把挡在路中间的大树翻开让麦昆战车通过(下面的关卡 5) 。

project-image
project-image


5、做好下图的部件并把它插到木板上面的舵机上,这个部件的主要作用是达到终点时,前面部分穿过光头强的帽子,再转动舵机把光头强给提起来,并显示“乱伐树林 抓走坐牢”的标语,提醒人们不能乱伐树林,要保护树林(下面的关卡 6)。

project-image
project-image

6、最后打印熊大和熊二的图片并把它们固定在麦昆战车上,如下图:

project-image



步骤2 设计制作赛道

从出发到抓住光头强的过程中共设计6个关卡,其中有简单的也有难的,赛道全图如下:


project-image

1、第一关:穿过树林

这一关与第二关穿插在一起的,主要是让麦昆战车在树林间沿着S形的路线行走。

project-image


2、第二关:越过草丛

这一关穿插在第一关的中间,在S形的路线上有一草丛挡在路中间,这个草丛会由麦昆战车推着转动,直到麦昆战车驶离草丛。

project-image

3、第三关:驶过跷跷板

来到第三关的地方,由跷跷板高的一头面向麦昆战车,麦昆战车无法经过,所以麦昆战车就让前面的舵机转动一定的角度,把跷跷板压下来,这样麦昆战车就能顺利通过。

project-image

4、第四关:跨过桥梁

这一关原来的想法是:桥面无法承受麦昆战车的重量,如果不采取措施,麦昆战车就会掉下去,于是就设计在桥上有一条钢缆,在麦昆战车经过桥面中间前,让顶部的舵机伸出挂杆,挂在桥上的钢缆以减轻桥面受到的重量,让麦昆战车顺利通过,通过后再收回挂杆。在实际的调试过程中,很难实现,所以就取消了这个设计,最后只是让麦昆战车能驶过桥梁就行了。

project-image

5、第五关:移开障碍物大树

在麦昆战车前进的过程中,一棵大树挡住了去路,怎么办?我有武器,继续转动麦昆战车前面的舵机,把大树翻到路边,继续前进。

project-image
project-image


6、第六关:抓住光头强,送入大牢

通过种种障碍,麦昆战车终于到达光头强砍树地点,抓住光头强,并把他关进了大牢,使美丽的大森林免受破坏。

project-image
project-image

步骤3 编写程序

在麦昆战车巡线的基础上增加了一些功能,通过线路的断点来判断执行相应的排障功能。完成程序如下:

project-image
代码
#include <DFRobot_Servo.h>
#include <Maqueen_Motor.h>
#include <Microbit_Sound.h>

double df_N;

Servo myservo1;
Maqueen_Motor motor;
Servo myservo2;
void _8DF7_8DF7_677F();
void _5DE1_7EBF();
void _8B66_62A5();
void _6293_5149_5934_5F3A();
void _79FB_6811();
void _7A7F_8D8A_4E1B_6797();

void _8DF7_8DF7_677F()
{
	if ((df_N == 0)) {
		myservo1.angle(abs(15));
		delay(1000);
		myservo1.angle(abs(170));
		delay(2000);
		motor.motorRun(motor.LEFT,motor.CW,80);
		motor.motorRun(motor.RIGHT,motor.CW,80);
		delay(1000);
		myservo1.angle(abs(15));
		df_N = df_N + 1;
		while ((!((String("1") + String("1")) == (String(digitalRead(13)) + String(digitalRead(14)))))) {
			_5DE1_7EBF();
		}
	}
}

void _5DE1_7EBF()
{
	if (((String("0") + String("0")) == (String(digitalRead(13)) + String(digitalRead(14))))) {
		motor.motorRun(motor.LEFT,motor.CW,80);
		motor.motorRun(motor.RIGHT,motor.CW,80);
	}
	else {
		if (((String("1") + String("0")) == (String(digitalRead(13)) + String(digitalRead(14))))) {
			motor.motorRun(motor.LEFT,motor.CW,80);
			motor.motorRun(motor.RIGHT,motor.CW,0);
		}
		else {
			if (((String("0") + String("1")) == (String(digitalRead(13)) + String(digitalRead(14))))) {
				motor.motorRun(motor.LEFT,motor.CW,0);
				motor.motorRun(motor.RIGHT,motor.CW,80);
			}
			else {
				motor.motorStop(motor.LEFT);
				motor.motorStop(motor.RIGHT);
			}
		}
	}
}

void _8B66_62A5()
{
	for (int count = 0; count < 3; count++) {
		MSound.playTone(0, 262, BEAT_1);
		MSound.playTone(0, 392, BEAT_1);
	}
}

void _6293_5149_5934_5F3A()
{
	if ((df_N == 2)) {
		delay(1000);
		myservo2.angle(abs(60));
		delay(1000);
		motor.motorRun(motor.LEFT,motor.CW,80);
		motor.motorRun(motor.RIGHT,motor.CW,80);
		delay(200);
		motor.motorStop(motor.LEFT);
		motor.motorStop(motor.RIGHT);
		delay(2000);
		myservo2.angle(abs(110));
		df_N = df_N + 1;
		_8B66_62A5();
	}
}

void _79FB_6811()
{
	if ((df_N == 1)) {
		delay(1000);
		myservo1.angle(abs(170));
		delay(2000);
		myservo1.angle(abs(15));
		motor.motorRun(motor.LEFT,motor.CW,80);
		motor.motorRun(motor.RIGHT,motor.CW,80);
		delay(1500);
		df_N = df_N + 1;
		while ((!((String("1") + String("1")) == (String(digitalRead(13)) + String(digitalRead(14)))))) {
			_5DE1_7EBF();
		}
	}
}

void _7A7F_8D8A_4E1B_6797()
{
	if ((df_N == 0)) {
		while ((!((String("1") + String("1")) == (String(digitalRead(13)) + String(digitalRead(14)))))) {
			_5DE1_7EBF();
		}
		_6293_5149_5934_5F3A();
	}
}

void buttonACallback()
{
	df_N = 0;
	delay(5000);
	_8B66_62A5();
	_7A7F_8D8A_4E1B_6797();
	_6293_5149_5934_5F3A();
	_8DF7_8DF7_677F();
	_79FB_6811();
	_6293_5149_5934_5F3A();
}


void setup() {
	myservo1.attach(1);
	myservo2.attach(2);
	myservo1.angle(abs(170));
	myservo2.angle(abs(170));
	onEvent(ID_BUTTON_A, PRESS, buttonACallback);
}

void loop() {

}


【视频演示】





评论

user-avatar