所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
创客大侦探之拯救宝箱强盗
ninan ninan 2019-09-09 22:36:59
0
0
简单

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

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

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

projectImage
材料清单 材料清单
1x
MICRO:BIT和扩展模块
2x
Arduino和扩展模块
3x
FrieBeetle ESP32
4x
FrieBeetle 三色墨水屏
5x
录音模块
6x
舵机3个
7x
IR kit红外遥控套件
8x
黑色假山一座
9x
宝箱强盗一个
10x
小苏打若干
11x
柠檬酸若干
12x
色素若干
13x
烧杯及底座一套
14x
洗洁精若干
步骤1 步骤1
火山制作
projectImage

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

projectImage
步骤2 步骤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 步骤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程序如下:

projectImage

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);
	}
}

	                    				
Makelog作者原创文章,未经授权禁止转载。
0
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]