虚拟与现实 当我的世界遇上你的世界-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4505|回复: 2

[项目] 虚拟与现实 当我的世界遇上你的世界

[复制链接]
发表于 2019-3-22 12:05 | 显示全部楼层 |阅读模式
本帖最后由 hongzailalala 于 2019-4-30 19:18 编辑

我的世界智能家居系统!

在最后我还是决定搞一个有特色的东西~

这是一款基于Arduino UNO R3开发板的我的世界智能家居控制器,在传统的搭建上,我们需要购买零件,还有在搭建中的各种危险,比如(触电,被电烙铁烧到,短路,甚至爆炸!像这样)
在功能上,我们通过指纹模块打开我们的Arduino大门,通过433M无线模块,远程打开我的世界窗口,电灯!

10586038198644533598.jpg

所以我把测试智能家居的部分放到了游戏里面,这样就可以扩展更多的东西!你们也知道我的世界里啥都有的对吧:lol


接下来介绍一下游戏端

大厅(电路部分是暗线噢~)

建筑水平有限了啦,毕竟是打代码的,审美不行:(

QQ截图20190419124021.png

房间

QQ截图20190419124042.png

还没有埋的暗线(也能说是一张电路图!)

QQ截图20190419123934.png

然后我们封装我们的电路,简化系统,引出七条线(大门,窗户,房间灯,客厅灯,墙壁装饰灯,雨雪传感器,阳光传感器)

QQ截图20190420010518.png

进行与Arduino的接入,通过我们的UART协议进行通讯!

QQ截图20190430141732.png

封顶完成!就和普通的房子一般!功能却大大滴!

QQ截图20190430142022.png
到我们的Arduino代码,主要是指纹模块的处理,还有433M的获取,和我的世界通讯也有关键字,也可以说是通讯协议吧

[pre][pre]#include <Adafruit_Fingerprint.h>
#include <TimerOne.h>

SoftwareSerial mySerial(10, 11);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

int key1 = 6;
int key2 = 7;
int key3 = 8;
int key4 = 9;//433M模块

int a = 0;//定时器用

void timerIsr()//定时器
{
   a++;
}

void setup()  
{
  Timer1.initialize(1000000); // set a timer of length 100000 microseconds (or 1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
  Timer1.attachInterrupt( timerIsr ); // attach the service routine here
  pinMode(key1,INPUT_PULLUP);
  pinMode(key2,INPUT_PULLUP);
  pinMode(key3,INPUT_PULLUP);
  pinMode(key4,INPUT_PULLUP);
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit finger detect test");

  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { delay(1); }
  }

  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");
}

void control()//控制函数
{
  if(digitalRead(key1) == HIGH)//有按下
  {
    Serial.println("redstone 15 7");//让我的世界串口红石块激活
    Serial.println("redstone 0 8");//关闭二号红石块
    }
  if(digitalRead(key2) == HIGH)//有按下
  {
    Serial.println("redstone 15 8");//让我的世界串口红石块激活
    Serial.println("redstone 0 7");//关闭二号红石块
    }
  if(digitalRead(key3) == HIGH)//有按下
  {
    Serial.println("redstone 15 9");//让我的世界串口红石块激活
    Serial.println("redstone 0 10");//关闭二号红石块
    }
  if(digitalRead(key4) == HIGH)//有按下
  {
    Serial.println("redstone 15 10");//让我的世界串口红石块激活
    Serial.println("redstone 0 9");//关闭二号红石块
    }
  }
  
void ZW()//指纹模块
{
  int dat = getFingerprintIDez();
  if (dat != -1) //读取到指纹
  {
    Serial.println("redstone 15 1");//让我的世界串口红石块激活
    Serial.println("redstone 0 2");//关闭二号红石块
    a = 0;
  }else
  {
    if(a > 5)//时间大于五秒
    {
    Serial.println("redstone 15 2");//让我的世界串口红石块激活
    Serial.println("redstone 0 1");//关1号红石块
    }
    }
}

void loop()                     // run over and over again
{
  ZW();//指纹模块
  control();//控制函数
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converted");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image too messy");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Could not find fingerprint features");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Could not find fingerprint features");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }
  
  // OK converted!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);

  return finger.fingerID;
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID;
}[/pre][/pre]

最后我们就可以根据游戏世界里面的设计开始设计电路,看看能否是实现自己喜欢的功能~

效果视频

发表于 2019-11-29 19:29 | 显示全部楼层
mod是什么 求链接
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 01:07 , Processed in 0.096730 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表