宝箱强盗被关在山洞里了,更可怕的是火山马上就要爆发了,小朋友快快救救他吧,用你的智慧把宝箱强盗救出来!!!
有趣的宝箱强盗被救出来了,火山也爆发了!!!
制作拯救宝箱强盗的计划,需要什么材料呢?先来一个全家福!
材料清单
- MICRO:BIT和扩展模块 X1
- Arduino和扩展模块 X2
- FrieBeetle ESP32 X3
- FrieBeetle 三色墨水屏 X4
- 录音模块 X5
- 舵机3个 X6
- IR kit红外遥控套件 X7
- 黑色假山一座 X8
- 宝箱强盗一个 X9
- 小苏打若干 X10
- 柠檬酸若干 X11
- 色素若干 X12
- 烧杯及底座一套 X13
- 洗洁精若干 X14
步骤1 火山制作
取一只烧杯依次加入清水,柠檬精,洗洁精,色素与支架一起放入靠近黑色假山口部的地方,宝箱强盗放入假山内,假山顶上架好一只舵机,舵机伸出一个斗,装入小苏打,确保舵机旋转,小苏打倒入火山口的烧杯里。
步骤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程序如下:
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);
}
}
评论