手势控制锁
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
*APDS-9960 传感器不适用于 Arduino Nano 或 Mega 2560(在我的测试中)。
这个项目很容易制作和使用。随意在这个项目中使用任何类型的伺服或锁定机制。这旨在成为基于手势的锁定的起始平台。上楼!
材料
我的大部分零件来自 Amazon.com,APDS-9960 传感器来自 Sparkfun。到目前为止,您只能使用 Arduino Uno 或 Micro 3.3v,因为任何其他板都因某些奇怪的原因而无法工作。
组装
如图所示安装 LCD。如果您没有 10k 电位器,请使用从对比度到 GND 的 1k 电阻器。如果使用 Arduino Uno,APDS-9960 传感器将需要移动,所以我所做的是将 SCL 和 SDA 连接到 4.7k 电阻器,然后通过将 4.7k 电阻器连接到 3.3v 将它们拉高。然后将它们相应地连接到 A4 和 A5(参见示意图)。 Arduino 可以使用带有直流电源桶的 9v 电池供电。
外壳
我使用了一个简单的纸板箱,并在上面切孔以匹配组件所在的位置。您可以将所有这些都焊接到一块穿孔板上,但我只是将其留在面包板上并将跳线连接到组件上。做完之后就是这个样子。
代码
- Arduino 代码
Arduino 代码C/C++
/* 硬件连接:重要:APDS-9960 只能接受 3.3V! Arduino Pin APDS-9960 Board Function 3.3V VCC Power GND GND Ground A4 SDA I2C Data A5 SCL I2C Clock 2 INT InterruptResources:Include Wire.h and SparkFun_APDS-9960.h*/#include#include #include #include #define PINSIZE 6 #define SERVOPIN 9//你的密码是多少个手势// Pins#define APDS9960_INT 2 // 需要是中断 pinLiquidCrystal lcd( 12,11,6,5,4,3);伺服舵机;uint8_tproximity_data =0;int red_led =A1;int green_led =A2;int pageNum =0; //LCD "page"String secret[PINSIZE] ={"UP","DOWN","UP","UP","RIGHT","LEFT"}; //密码在这里。必须是大写的。可以是“UP”、“DOWN”、“LEFT”或“RIGHT”String currentGesture ="";int numRight =0;SparkFun_APDS9960 apds =SparkFun_APDS9960(); //Init APDS-9960 libraryint isr_flag =0;void setup() { // 设置中断引脚为输入 pinMode(APDS9960_INT, INPUT);lcd.begin(16,2);servo.attach(SERVOPIN);servo.write( 0);伺服.分离(); // 初始化串口Serial.begin(9600); Serial.print("您的密码是"); Serial.print(PINSIZE); Serial.println("手势长。"); Serial.println(); Serial.println(F("----------------")); Serial.println(F("APDS-9960 锁")); Serial.println(F("----------------")); // 初始化中断服务程序 attachInterrupt(0, interruptRoutine, FALLING); // 初始化 APDS-9960(配置 I2C 和初始值) if ( apds.init() ) { Serial.println(F("APDS-9960 初始化完成")); } else { Serial.println(F("APDS-9960 初始化期间出现问题!")); } if ( !apds.setProximityGain(PGAIN_1X) ) { Serial.println(F("尝试设置 PGAIN 出错")); } if ( apds.enableProximitySensor(false) ) { Serial.println(F("Proximity sensor is now running")); } else { Serial.println(F("传感器初始化过程中出现问题!")); } // 开始运行 APDS-9960 手势传感器引擎 if ( apds.enableGestureSensor(true) ) { Serial.println(F("Gesture sensor is now running")); } else { Serial.println(F("手势传感器初始化过程中出现问题!")); } }void loop() { if(pageNum==0){ if (!apds.readProximity(proximity_data)) { Serial.println("读取邻近值时出错"); } else { Serial.println(proximity_data); if((proximity_data>=40) &&(pageNum==0)){ pageNum=1;延迟(2000); } } } switch(pageNum){ case 0:LCDClear(); lcd.print("锁定-获取"); lcd.setCursor(0,1); lcd.print("3 英寸远。");闪烁红色(); LCD清除();休息;情况 1:numRight =0; lcd.print("请输入密码..."); lcd.setCursor(0,0); for(int x=0; x 0;x--){ LCDClear(); lcd.print("结束:"); lcd.setCursor(0,1);液晶。打印(x); lcd.setCursor(1,1); lcd.print("秒..."); delay(1000);}LCDClear();lcd.print("Closing");}
示意图
制造工艺