【介绍】
宁静祥和的东北原始森林,空气清新,万物复苏,熊大和熊二两兄弟在林间追逐奔跑,非常快乐,正在此时,来了一名伐木工——光头强,于是森林的宁静被打破了,美丽的大森林面临前所未有的危机,为了保护家园,熊大、熊二和光头强之间发生的保护森林和盗砍盗伐的环保大战。动画片里的熊大和熊二赤手空拳与光头强展开大战,为了更好的保护森林,我们为它们配备了一辆“麦昆战车”。这不,光头强又来砍伐树木了,于是熊大和熊二就驾着“麦昆战车”穿过树林、越过草丛、驶过跷跷板、跨过桥梁,移开大树,最后把光头强给抓住并送大大牢,保护了美丽的大森林。
【制作过程】
步骤1 改装麦昆战车
1、把麦昆CR123A锂电池电源管理模组安装在麦昆小车上。
2、把两个舵机如下图所示分别用热熔胶固定在木板上。
3、用铜柱把木板平台与麦昆小车连接起来。并把木板下面的舵机接在P1针脚上,把木板上面的舵机接下P2针脚上。
4、把下图的连接件插在木板下面的舵机上,这个部分在执行任务时主要有两个作用:
一是从上往下旋转可以把跷跷板压下来以方便麦昆战车通过(下面的关卡 3)。
二是从下往上旋转可以把挡在路中间的大树翻开让麦昆战车通过(下面的关卡 5) 。
5、做好下图的部件并把它插到木板上面的舵机上,这个部件的主要作用是达到终点时,前面部分穿过光头强的帽子,再转动舵机把光头强给提起来,并显示“乱伐树林 抓走坐牢”的标语,提醒人们不能乱伐树林,要保护树林(下面的关卡 6)。
6、最后打印熊大和熊二的图片并把它们固定在麦昆战车上,如下图:
步骤2 设计制作赛道
从出发到抓住光头强的过程中共设计6个关卡,其中有简单的也有难的,赛道全图如下:
1、第一关:穿过树林
这一关与第二关穿插在一起的,主要是让麦昆战车在树林间沿着S形的路线行走。
2、第二关:越过草丛
这一关穿插在第一关的中间,在S形的路线上有一草丛挡在路中间,这个草丛会由麦昆战车推着转动,直到麦昆战车驶离草丛。
3、第三关:驶过跷跷板
来到第三关的地方,由跷跷板高的一头面向麦昆战车,麦昆战车无法经过,所以麦昆战车就让前面的舵机转动一定的角度,把跷跷板压下来,这样麦昆战车就能顺利通过。
4、第四关:跨过桥梁
这一关原来的想法是:桥面无法承受麦昆战车的重量,如果不采取措施,麦昆战车就会掉下去,于是就设计在桥上有一条钢缆,在麦昆战车经过桥面中间前,让顶部的舵机伸出挂杆,挂在桥上的钢缆以减轻桥面受到的重量,让麦昆战车顺利通过,通过后再收回挂杆。在实际的调试过程中,很难实现,所以就取消了这个设计,最后只是让麦昆战车能驶过桥梁就行了。
5、第五关:移开障碍物大树
在麦昆战车前进的过程中,一棵大树挡住了去路,怎么办?我有武器,继续转动麦昆战车前面的舵机,把大树翻到路边,继续前进。
6、第六关:抓住光头强,送入大牢
通过种种障碍,麦昆战车终于到达光头强砍树地点,抓住光头强,并把他关进了大牢,使美丽的大森林免受破坏。
步骤3 编写程序
在麦昆战车巡线的基础上增加了一些功能,通过线路的断点来判断执行相应的排障功能。完成程序如下:
#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() {
}
评论