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

创客大侦探之拯救宝箱强盗 简单

头像 ninan 2019.09.09 640 0

宝箱强盗被关在山洞里了,更可怕的是火山马上就要爆发了,小朋友快快救救他吧,用你的智慧把宝箱强盗救出来!!!

有趣的宝箱强盗被救出来了,火山也爆发了!!!

制作拯救宝箱强盗的计划,需要什么材料呢?先来一个全家福!

project-image

材料清单

  • MICRO:BIT和扩展模块 X1
  • Arduino和扩展模块 X2
  • FrieBeetle ESP32 X3
  • FrieBeetle 三色墨水屏 X4
  • 录音模块 X5
  • 舵机3个 X6
  • IR kit红外遥控套件 X7
  • 黑色假山一座 X8
  • 宝箱强盗一个 X9
  • 小苏打若干 X10
  • 柠檬酸若干 X11
  • 色素若干 X12
  • 烧杯及底座一套 X13
  • 洗洁精若干 X14

步骤1 火山制作

project-image

取一只烧杯依次加入清水,柠檬精,洗洁精,色素与支架一起放入靠近黑色假山口部的地方,宝箱强盗放入假山内,假山顶上架好一只舵机,舵机伸出一个斗,装入小苏打,确保舵机旋转,小苏打倒入火山口的烧杯里。

project-image

步骤2 连线

Microbit出了一些小问题不能使用Mind+,但需要它显示倒计时,而Mind+使用起来确实方便,所以主控制器使用了Arduino,firebeetle在其中主要是用于控制墨水屏显示。正常给Microbit,Arduino,和firebeetle加上电源,进行连接。

Aruino 2----------------Microbit P0

Aruino 3----------------红外接收器

Aruino 4----------------Microbit P1

Aruino 5----------------Firebeetle D2

Aruino 6----------------录音模块

Aruino 7----------------苏打粉舵机

Aruino 8----------------左门舵机

Aruino 9----------------右门舵机

步骤3 编程

编程的思路是Firebeetle显示先导语,按下Microbit的A按钮,Microbit开始显示100秒的倒计时,并将P0输出高电平,Arduino接收到高电平后给Firebeetle D2数字口信号,显示第一题,“蜘蛛有几条腿”。使用红外遥控器输入8,驱动第二题录音模块放出事先录好的声音,“谁言寸草心,报的三春晖”,使用红外遥控器输入3,舵机门开,小朋友救出宝箱强盗。100秒后,Microbit的P1端输出高电平,Arduino收到信号后,驱动苏打粉舵机旋转,几种材料在烧杯中反应,从火山口中冒出火山泡沫。

Firebeetle程序如下:

代码
#include "Arduino.h"
#include "DFRobot_IL0376F_SPI.h"
DFRobot_IL0376F_SPI eink;

#define EINK_CS  D3
#define Font_CS  D6
#define EINK_DC  D8
#define BUSY     D7

void setup(void)
{
    Serial.begin(115200);
    //Select the corresponding pins
    eink.begin(EINK_CS, Font_CS, EINK_DC, BUSY);

    //Clear the screen and display white
    //digitalRead(2)连接bitP1端,需要持续给高电平,不用连正负
    eink.fillScreen(WHITE);
    //Displays a string, red font
    eink.disString(12,12,1,"亲爱的小朋友,宝箱强盗被关在山洞里了,用你的智慧去救他吧,90S内救不出,火山就要爆发了,请按下A按钮开始:",BLACK);
    
    eink.flush();
    delay(8000);
}
void loop(void)
{
             if (digitalRead(2)) { 
    eink.fillScreen(WHITE);
      eink.disString(12,12,1,"第一关    蜘蛛有几条腿?",RED);
     eink.flush();
  delay(800000);}
  
}

Microbit程序如下:

project-image

Arduino程序如下:

代码
#include <DFRobot_Servo.h>
#include <DFRobot_IRremote.h>

double mind_n_DaoJiShi;
double mind_n_DiYiTi;
double mind_n_DiErTi;
String mind_s__2;
String mind_s__1;

Servo myservo8;
Servo myservo9;
DFROBOT_IRremote_Receive remoteReceive_3(3);
Servo servo360_10;

void setServo360(Servo *servo, int pin, int speed) {
	servo->attach(pin);
	int _speed = 90 + (int)((speed/100.0)*90);
   _speed = constrain(_speed+1,0,180);
  	servo->angle(_speed);
}


void setup() {
	mind_n_DaoJiShi = 0;
	mind_n_DiYiTi = 0;
	mind_n_DiErTi = 0;
	mind_s__2 = "hello";
	mind_s__1 = "hello";
	myservo8.attach(8);
	myservo8.angle(abs(15));
	myservo9.attach(9);
	myservo9.angle(abs(15));
	remoteReceive_3.begin();
}

void loop() {
	if (digitalRead(2)) {
		mind_n_DiYiTi = 1;
	}
	if ((mind_n_DiYiTi == 1)) {
		digitalWrite(5, HIGH);
		mind_s__1 = (remoteReceive_3.getIrCommand());
	}
	if ((mind_s__1 == "FD9867")) {
		digitalWrite(6, HIGH);
		delay(5000);
		digitalWrite(6, LOW);
		mind_n_DiYiTi = 0;
		mind_n_DiErTi = 1;
		mind_s__1 = "0";
	}
	if ((mind_n_DiErTi == 1)) {
		mind_s__2 = (remoteReceive_3.getIrCommand());
	}
	if ((mind_s__2 == "FD48B7")) {
		myservo8.angle(abs(150));
		myservo9.angle(abs(150));
		delay(5000);
		mind_n_DiErTi = 0;
		mind_s__2 = "0";
	}
	if (digitalRead(4)) {
		setServo360(&servo360_10, 10, -50);
	}
}

评论

user-avatar