本帖最后由 hongzailalala 于 2019-4-30 19:18 编辑
我的世界智能家居系统!
在最后我还是决定搞一个有特色的东西~
这是一款基于Arduino UNO R3开发板的我的世界智能家居控制器,在传统的搭建上,我们需要购买零件,还有在搭建中的各种危险,比如(触电,被电烙铁烧到,短路,甚至爆炸!像这样) 在功能上,我们通过指纹模块打开我们的Arduino大门,通过433M无线模块,远程打开我的世界窗口,电灯!
所以我把测试智能家居的部分放到了游戏里面,这样就可以扩展更多的东西!你们也知道我的世界里啥都有的对吧:lol
接下来介绍一下游戏端
大厅(电路部分是暗线噢~)
建筑水平有限了啦,毕竟是打代码的,审美不行:(
房间
还没有埋的暗线(也能说是一张电路图!)
然后我们封装我们的电路,简化系统,引出七条线(大门,窗户,房间灯,客厅灯,墙壁装饰灯,雨雪传感器,阳光传感器)
进行与Arduino的接入,通过我们的UART协议进行通讯!
封顶完成!就和普通的房子一般!功能却大大滴!
到我们的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]
最后我们就可以根据游戏世界里面的设计开始设计电路,看看能否是实现自己喜欢的功能~
效果视频
|