Serrure à commande gestuelle
Composants et fournitures
| | × | 1 | |
| | × | 1 | |
| Cathode commune diffuse RVB | | × | 1 | |
| Adafruit Standard LCD - 16x2 Blanc sur Bleu | | × | 1 | |
| | × | 2 | |
| Câbles de raccordement (générique) | | × | 1 | |
| | × | 1 | |
Applications et services en ligne
À propos de ce projet
*Le capteur APDS-9960 ne fonctionne pas avec l'Arduino Nano ou Mega 2560 (dans mes tests).
Ce projet est facile à réaliser et à utiliser. N'hésitez pas à utiliser n'importe quel type de servo ou de mécanisme de verrouillage avec ce projet. Ceci est censé être une plate-forme de départ pour un verrou basé sur les gestes. En construction !
Matériaux
J'ai obtenu la plupart de mes pièces sur Amazon.com et le capteur APDS-9960 de Sparkfun. Jusqu'à présent, vous ne pouvez utiliser qu'un Arduino Uno ou un Micro 3.3v, car toute autre carte ne fonctionnera pas pour une raison étrange.
Assemblage
Fixez l'écran LCD comme indiqué. Si vous n'avez pas de potentiomètre 10k, utilisez une résistance 1k allant du contraste à GND. Le capteur APDS-9960 devra être déplacé si vous utilisez l'Arduino Uno, donc ce que j'ai fait est de prendre le SCL et le SDA et de les connecter à une résistance de 4,7k, puis de les tirer haut en prenant la résistance de 4,7k à 3,3v. Ensuite, connectez-les à A4 et A5, en conséquence (voir schéma). L'Arduino peut fonctionner avec une batterie 9v avec un baril d'alimentation CC attaché.
Enceinte
J'ai utilisé une simple boîte en carton et j'ai découpé des trous pour correspondre à l'emplacement des composants. Vous pouvez souder tout cela à un morceau de panneau perforé, mais je l'ai juste laissé dans la planche à pain et j'ai connecté des câbles de connexion aux composants. Après avoir terminé, cela ressemblait à ceci.
Code
Code ArduinoC/C++
/* Connexions matérielles :IMPORTANT : l'APDS-9960 ne peut accepter que 3,3 V ! Arduino Pin APDS-9960 Fonction de la carte 3.3V VCC Alimentation GND GND Masse A4 SDA I2C Données A5 SCL I2C Horloge 2 INT InterruptResources:Inclure Wire.h et SparkFun_APDS-9960.h*/#include #include #include #include #include #define PINSIZE 6 #define SERVOPIN 9//Combien de gestes dure votre mot de passe// Pins#define APDS9960_INT 2 // Doit être une pin d'interruptionLiquidCrystal lcd( 12,11,6,5,4,3);Servo servo;uint8_t near_data =0;int red_led =A1;int green_led =A2;int pageNum =0; //L'écran LCD "page" String secret[PINSIZE] ={"UP","DOWN","UP","UP","RIGHT","LEFT"} ; // Le mot de passe va ici. Doit être en CAPS. Peut être "UP", "DOWN", "LEFT" ou "RIGHT" String currentGesture ="";int numRight =0;SparkFun_APDS9960 apds =SparkFun_APDS9960(); //Init APDS-9960 libraryint isr_flag =0;void setup() { // Définir la broche d'interruption comme entrée pinMode(APDS9960_INT, INPUT);lcd.begin(16,2);servo.attach(SERVOPIN);servo.write( 0);servo.detach(); // Initialiser le port série Serial.begin(9600); Serial.print("Votre mot de passe est "); Serial.print(PINSIZE); Serial.println(" gestes longs."); Serial.println(); Serial.println(F("----------------")); Serial.println(F("APDS-9960 Lock")); Serial.println(F("----------------")); // Initialiser la routine de service d'interruption attachInterrupt(0, interruptRoutine, FALLING); // Initialiser APDS-9960 (configurer I2C et les valeurs initiales) if ( apds.init() ) { Serial.println(F("APDS-9960 initialisation terminée")); } else { Serial.println(F("Une erreur s'est produite lors de l'initialisation APDS-9960 !")); } if ( !apds.setProximityGain(PGAIN_1X) ) { Serial.println(F("Une erreur s'est produite en essayant de définir PGAIN")); } if ( apds.enableProximitySensor(false) ) { Serial.println(F("Le capteur de proximité est en cours d'exécution")); } else { Serial.println(F("Une erreur s'est produite lors de l'initialisation du capteur !")); } // Lancer l'exécution du moteur de capteur de mouvements APDS-9960 if ( apds.enableGestureSensor(true) ) { Serial.println(F("Le capteur de mouvements est en cours d'exécution")); } else { Serial.println(F("Une erreur s'est produite lors de l'initialisation du capteur de mouvements !")); } }void loop() { if(pageNum==0){ if ( !apds.readProximity(proximity_data) ) { Serial.println("Erreur de lecture de la valeur de proximité"); } else { Serial.println(proximity_data); if((proximity_data>=40) &&(pageNum==0)){ pageNum=1; retard (2000); } } } switch(pageNum){ case 0 :LCDClear(); lcd.print("Locked-get"); lcd.setCursor(0,1) ; lcd.print("3 pouces de distance."); clignoteRed(); LCDClear(); Pause; cas 1 :numDroite =0 ; lcd.print("Entrez le code..."); lcd.setCursor(0,0); for(int x=0; x0;x--){ LCDClear(); lcd.print("Fermeture :"); lcd.setCursor(0,1) ; lcd.print(x); lcd.setCursor(1,1) ; lcd.print(" secondes..."); delay(1000);}LCDClear();lcd.print("Closing");} Schémas