Bloqueo controlado por gestos
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
|
Acerca de este proyecto
* El sensor APDS-9960 no funciona con Arduino Nano o Mega 2560 (en mis pruebas).
Este proyecto es fácil de hacer y usar. Siéntase libre de usar cualquier tipo de servo o mecanismo de cierre con este proyecto. Esto está destinado a ser una plataforma de partida para un bloqueo basado en gestos. ¡Al edificio!
Materiales
Obtuve la mayoría de mis piezas de Amazon.com y el sensor APDS-9960 de Sparkfun. Solo puede usar un Arduino Uno o Micro 3.3v hasta ahora, ya que cualquier otra placa no funcionará por alguna extraña razón.
Ensamblaje
Conecte la pantalla LCD como se muestra. Si no tiene un potenciómetro de 10k, use una resistencia de 1k que vaya de contraste a GND. El sensor APDS-9960 deberá cambiarse si utilizo el Arduino Uno, así que lo que hice fue tomar el SCL y SDA y conectarlos a una resistencia de 4.7k, luego dibujarlos en alto llevando la resistencia de 4.7k a 3.3v. Luego, conéctelos a A4 y A5, según corresponda (consulte el esquema). El Arduino puede funcionar con una batería de 9v con un barril de alimentación de CC adjunto.
Recinto
Usé una caja de cartón simple y corté agujeros para que coincidieran con el lugar donde irían los componentes. Podrías soldar todo esto a una pieza de perfboard, pero lo dejé en la placa de pruebas y conecté cables de puente a los componentes. Una vez que terminé, se veía así.
Código
- Código Arduino
Código Arduino C / C ++
/ * Conexiones de hardware:IMPORTANTE:¡El APDS-9960 solo puede aceptar 3.3V! Pin de Arduino APDS-9960 Función de placa 3.3V VCC Energía GND GND Tierra A4 SDA I2C Datos A5 SCL I2C Reloj 2 INT Interrupción Recursos:Incluya Wire.hy SparkFun_APDS-9960.h * / # include#include #include #include #define PINSIZE 6 #define SERVOPIN 9 // Cuántos gestos tiene tu contraseña // Pines # define APDS9960_INT 2 // Necesita ser un pin de interrupciónLiquidCrystal lcd ( 12,11,6,5,4,3); Servo servo; uint8_t proximidad_datos =0; int red_led =A1; int green_led =A2; int pageNum =0; // La "página" del LCD String secret [PINSIZE] ={"ARRIBA", "ABAJO", "ARRIBA", "ARRIBA", "DERECHA", "IZQUIERDA"}; // La contraseña va aquí. Debe estar en MAYÚSCULAS. Puede ser "ARRIBA", "ABAJO", "IZQUIERDA" o "DERECHA" String currentGesture =""; int numRight =0; SparkFun_APDS9960 apds =SparkFun_APDS9960 (); // Iniciar APDS-9960 libraryint isr_flag =0; void setup () {// Establecer el pin de interrupción como pinMode de entrada (APDS9960_INT, INPUT); lcd.begin (16,2); servo.attach (SERVOPIN); servo.write ( 0); servo.detach (); // Inicializar el puerto serie Serial.begin (9600); Serial.print ("Su contraseña es"); Serial.print (PINSIZE); Serial.println ("gestos largos"); Serial.println (); Serial.println (F ("----------------")); Serial.println (F ("Bloqueo APDS-9960")); Serial.println (F ("----------------")); // Inicializar la rutina del servicio de interrupción attachInterrupt (0, interruptRoutine, FALLING); // Inicializar APDS-9960 (configurar I2C y los valores iniciales) if (apds.init ()) {Serial.println (F ("APDS-9960 inicialización completa")); } else {Serial.println (F ("¡Algo salió mal durante la inicialización de APDS-9960!")); } if (! apds.setProximityGain (PGAIN_1X)) {Serial.println (F ("Algo salió mal al intentar configurar PGAIN")); } if (apds.enableProximitySensor (false)) {Serial.println (F ("El sensor de proximidad se está ejecutando ahora")); } else {Serial.println (F ("¡Algo salió mal durante la inicialización del sensor!")); } // Inicie la ejecución del motor del sensor de gestos APDS-9960 if (apds.enableGestureSensor (true)) {Serial.println (F ("El sensor de gestos ahora se está ejecutando")); } else {Serial.println (F ("¡Algo salió mal durante la inicialización del sensor de gestos!")); }} bucle vacío () {if (pageNum ==0) {if (! apds.readProximity (datos_proximidad)) {Serial.println ("Error al leer el valor de proximidad"); } else {Serial.println (datos_proximidad); if ((datos_de_proximidad> =40) &&(pageNum ==0)) {pageNum =1; retraso (2000); }}} cambiar (pageNum) {caso 0:LCDClear (); lcd.print ("Locked-get"); lcd.setCursor (0,1); lcd.print ("3 pulgadas de distancia"); blinkRed (); LCDClear (); descanso; caso 1:numRight =0; lcd.print ("Ingresar código ..."); lcd.setCursor (0,0); para (int x =0; x 0; x -) {LCDClear (); lcd.print ("Cerrando en:"); lcd.setCursor (0,1); lcd.print (x); lcd.setCursor (1,1); lcd.print ("segundos ..."); delay (1000);} LCDClear (); lcd.print ("Cierre");}
Esquemas
Proceso de manufactura