首页/作品列表/手势密码防盗门
主要内容
作品名称:手势密码防盗门

一、作品简介
使用场景:防盗门

设计理念:硬件与软件结合,将技术融于生活,提供便利和安全。

意义和价值:提高居家防盗安全性,改变传统的开门方式,实现安全信息的实时传递。

功能:用于核验手势密码,控制门的打开,通过Wi-Fi传递警报或通行的信息给主人。
二、设计过程

1.讨论明确方向目标为手势密码操控防盗门
2.进行框架编程,初步实现核验手势密码和控制舵机开门的功能
3.引入点阵屏显示密码正确和错误的信息和Wi-Fi实时通信功能
4.加入语言功能,使提醒功能更加有效
5.连接硬件设备,进行多次试验,确保作品功能稳定

三、团队介绍
成员:吴书玲 吴紫玉 成瑶琪 组长:成瑶琪

想法组建:成瑶琪、吴紫玉、吴书玲
初步编程:吴紫玉、吴书玲
程序检查:成瑶琪
硬件组装:吴紫玉、成瑶琪
实验优化:吴紫玉、吴书玲
资料整理:成瑶琪、吴书玲

四、成果展示
(包括最终成品多角度的图片、使用过程的动图或视频)
// includes start
#include <Arduino.h>
#include <Microduino_ColorLED.h>
#include <ESP8266.h>
#if defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega128RFA1__)
	#define EspSerial Serial1
	#define UARTSPEED  115200
	#define RESTORE 1
#endif
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega328P__)
	#include <SoftwareSerial.h>
	SoftwareSerial mySerial(2, 3);
	#define EspSerial mySerial
	#define UARTSPEED  9600
	#define RESTORE 0
#endif
ESP8266 wifi(&EspSerial);
#include <Microduino_Matrix.h>
#include <Servo.h>
#include <Microduino_Gesture.h>
// includes end
// definition start
bool wifimCottonbegin(const char* ssid, const char* pass, const char* id, const char* token);
void servo_move(Servo &servo, uint8_t anglebegin, uint8_t angleend, int _duration);
String uploadData(char* _st, int _data);
String uploadData(char* _st, char* _data);
bool gestureSta(uint8_t _gestureState);
void gggg();

// definition end

ColorLED strip_A0 = ColorLED(16, A0);
uint8_t Addr64[MatrixPix_X][MatrixPix_Y] = {{64}};
Matrix display64 = Matrix(Addr64, TYPE_COLOR);
uint8_t rgbArray_64_522240_6[8][8][3] = {{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,255,0}},{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,255,0},{0,0,0}},{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,255,0},{0,0,0},{0,0,0}},{{0,255,0},{0,0,0},{0,0,0},{0,0,0},{0,255,0},{0,0,0},{0,0,0},{0,0,0}},{{0,0,0},{0,255,0},{0,0,0},{0,255,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},{{0,0,0},{0,0,0},{0,255,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}},{{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}};
Servo servo_6;
uint8_t rgbArray_64_267386880_9[8][8][3] = {{{255,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{255,0,0}},{{0,0,0},{255,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{255,0,0},{0,0,0}},{{0,0,0},{0,0,0},{255,0,0},{0,0,0},{0,0,0},{255,0,0},{0,0,0},{0,0,0}},{{0,0,0},{0,0,0},{0,0,0},{255,0,0},{255,0,0},{0,0,0},{0,0,0},{0,0,0}},{{0,0,0},{0,0,0},{0,0,0},{255,0,0},{255,0,0},{0,0,0},{0,0,0},{0,0,0}},{{0,0,0},{0,0,0},{255,0,0},{0,0,0},{0,0,0},{255,0,0},{0,0,0},{0,0,0}},{{0,0,0},{255,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{255,0,0},{0,0,0}},{{255,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{255,0,0}}};
Gesture gestureSensor;
uint8_t gestureState;
int gi;
int time;
bool wifimCottonbegin(const char* ssid, const char* pass, const char* id, const char* token) {
	WifiInit(EspSerial, UARTSPEED);
	if (RESTORE) {
		wifi.restore();
		delay(2000);
	}
	Serial.print(F("Start Connection mCotton...Waiting for 5S..."));
	while (!wifi.setOprToStation());
	while (!wifi.joinAP(ssid, pass));
	wifi.setWiFiconnected(true);
	while (!wifi.mqttSetServer("mCotton.microduino.cn", (1883)));
	while (!wifi.mqttConnect(id, id, token));
	wifi.setMqttConnected(true);
	while (!wifi.mqttSetDiveceIDToken(id, token));
	char SUBSCRIBTOPICA[30] = "";
	strcat(SUBSCRIBTOPICA, "ca/");
	strcat(SUBSCRIBTOPICA, id);
	while (!wifi.mqttSetSubscrib(SUBSCRIBTOPICA));
	char SUBSCRIBTOPICP[30] = "";
	strcat(SUBSCRIBTOPICP, "cp/");
	strcat(SUBSCRIBTOPICP, id);
	while (!wifi.mqttSetSubscrib(SUBSCRIBTOPICP));
	return true;
}
void servo_move(Servo &servo, uint8_t anglebegin, uint8_t angleend, int _duration) {
	if (angleend > anglebegin) {
		for (uint8_t a = 0; a < angleend - anglebegin; a++) {
			servo.write(anglebegin + a);
			delay(_duration / (angleend - anglebegin));
		}
	} else if (angleend < anglebegin) {
		for (uint8_t a = 0; a < anglebegin - angleend; a++) {
			servo.write(anglebegin - a);
			delay(_duration / (anglebegin - angleend));
		}
	}
}
String uploadData(char* _st, int _data) {
	String send_data = "";
	send_data = "{\"";
	send_data += _st;
	send_data += "\":\"";
	send_data += _data;
	send_data += "\"}";
	return send_data;
}
String uploadData(char* _st, char* _data) {
	String send_data = "";
	send_data = "{\"";
	send_data += _st;
	send_data += "\":\"";
	send_data += _data;
	send_data += "\"}";
	return send_data;
}
bool gestureSta(uint8_t _gestureState) {
	if (gestureSensor.isGestureAvailable() ) {
		gestureState = gestureSensor.readGesture();
	}
	if (gestureState == _gestureState) {
		gestureState = 0;
		return true;
	} else {
		return false;
	}
}
void gggg(){
	while(!((!(((gi) == 0))) && (!(((gi) == ""))))) {
		if(gestureSta(DIR_UP)) {
			gi = 1;
			Serial.println("up");
		} else {
			if(gestureSta(DIR_DOWN)) {
				gi = 2;
				Serial.println("down");
			} else {
				if(gestureSta(DIR_LEFT)) {
					gi = 3;
					Serial.println("left");
				} else {
					if(gestureSta(DIR_RIGHT)) {
						gi = 4;
						Serial.println("right");
					} else {
						gi = 0;
					}
				}
			}
		}
	}
}


void setup() {
	// setup define start
	strip_A0.begin();
	Wire.begin();
	servo_6.attach(6);
	gestureSensor.begin();
	gestureSensor.setGestureGain(GGAIN_1X);
	gestureSensor.enableGestureSensor(true);
	// setup define end
	Serial.begin(57600);
	strip_A0.setPixelColor(0, 0x7a0606);
	strip_A0.show();
	if(wifimCottonbegin("microduino", "microduino", "5d5bac2b364ace0016335184", "7VR0JFzJCm6R")) {
		strip_A0.setPixelColor(0, 0x2c99f1);
		strip_A0.show();
		Serial.println("hello mCookie!");
	}
	time = 3;
}

void loop() {
	gi = 0;
	gggg();
	if(((gi) == 1)) {
		Serial.println("1");
		gi = 0;
		gggg();
		if(((gi) == 2)) {
			Serial.println("2");
			gi = 0;
			gggg();
			if(((gi) == 3)) {
				Serial.println("3");
				gi = 0;
				gggg();
				if(((gi) == 4)) {
					Serial.println("bingo");
					for (int y = 0; y < 8; y++) {
						for (int x = 0; x < 8; x++) {
							display64.setLedColor(x, y, rgbArray_64_522240_6[y][x][0], rgbArray_64_522240_6[y][x][1], rgbArray_64_522240_6[y][x][2]);
						}
					}
					servo_move(servo_6, 90, 180, 0.5 * 1000);
				}
			}
		}
	} else {
		for (int y = 0; y < 8; y++) {
			for (int x = 0; x < 8; x++) {
				display64.setLedColor(x, y, rgbArray_64_267386880_9[y][x][0], rgbArray_64_267386880_9[y][x][1], rgbArray_64_267386880_9[y][x][2]);
			}
		}
		time = (time)-1;
		Serial.print("TIME:");
		Serial.println(time);
		if(((time) == 0)) {
			wifi.mqttPublishM(uploadData("control_C1", "warning"));
			delay(1 * 1000);
			time = 3;
		}
	}
}





代码展示

1. 手势密码防盗门

编程语言: C/C++(Arduino)

软件工具:Arduino IDE 1.8.4


附件下载
  • 资料展示
  • 小组作品.zip
  • 小组作业资料.zip
0
大牛,别默默的看了,快登录帮我点评一下吧!

立即注册