Bloqueio controlado por gestos
Componentes e suprimentos
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| Adafruit LCD padrão - 16x2 branco em azul | | × | 1 | |
| | × | 2 | |
| Fios de jumpers (genérico) | | × | 1 | |
| | × | 1 | |
Aplicativos e serviços online
Sobre este projeto
* O sensor APDS-9960 não funciona com o Arduino Nano ou Mega 2560 (em meus testes).
Este projeto é fácil de fazer e usar. Sinta-se à vontade para usar qualquer tipo de servo ou mecanismo de travamento com este projeto. Isso deve ser uma plataforma inicial para um bloqueio baseado em gestos. Em construção!
Materiais
Peguei a maioria das minhas peças na Amazon.com e o sensor APDS-9960 da Sparkfun. Você só pode usar um Arduino Uno ou Micro 3.3v até agora, pois qualquer outra placa não funcionará por algum motivo estranho.
Montagem
Conecte o LCD conforme mostrado. Se você não tiver um potenciômetro de 10k, use um resistor de 1k indo do contraste ao GND. O sensor APDS-9960 precisará ser deslocado se estiver usando o Arduino Uno, então o que eu fiz foi pegar o SCL e o SDA e conectá-los a um resistor de 4,7k, em seguida, aumentá-los levando o resistor de 4,7k a 3,3v. Em seguida, conecte-os a A4 e A5, de acordo (consulte o esquema). O Arduino pode funcionar com uma bateria de 9 V com um barril de alimentação DC conectado.
Gabinete
Usei uma caixa de papelão simples e cortei buracos para combinar onde os componentes iriam. Você poderia soldar tudo isso em um pedaço de perfboard, mas eu apenas deixei na placa de ensaio e conectei os fios do jumper aos componentes. Depois que eu terminei, ficou assim.
Código
Código Arduino C / C ++
/ * Conexões de hardware:IMPORTANTE:O APDS-9960 só pode aceitar 3,3 V! Arduino Pin APDS-9960 Função da placa 3.3V VCC Power GND GND Ground A4 SDA I2C Dados A5 SCL I2C Clock 2 INT InterruptResources:Inclui Wire.h e SparkFun_APDS-9960.h * / # include #include #include #include #define PINSIZE 6 #define SERVOPIN 9 // Quantos gestos tem a sua senha // Pins # define APDS9960_INT 2 // Precisa ser uma interrupção pinLiquidCrystal lcd ( 12,11,6,5,4,3); Servo servo; uint8_t dados_de_proximidade =0; int red_led =A1; int green_led =A2; int pageNum =0; // A "página" do LCD String secreto [PINSIZE] ={"UP", "DOWN", "UP", "UP", "RIGHT", "LEFT"}; // A senha vai aqui. Deve estar em CAPS. Pode ser "UP", "DOWN", "LEFT" ou "RIGHT" String currentGesture =""; int numRight =0; SparkFun_APDS9960 apds =SparkFun_APDS9960 (); // Init APDS-9960 libraryint isr_flag =0; void setup () {// Define o pino de interrupção como entrada pinMode (APDS9960_INT, INPUT); lcd.begin (16,2); servo.attach (SERVOPIN); servo.write ( 0); servo.detach (); // Inicializa a porta serial Serial.begin (9600); Serial.print ("Sua senha é"); Serial.print (PINSIZE); Serial.println ("gestos longos."); Serial.println (); Serial.println (F ("----------------")); Serial.println (F ("APDS-9960 Lock")); Serial.println (F ("----------------")); // Inicializa a rotina de serviço de interrupção attachInterrupt (0, interruptRoutine, FALLING); // Inicializar o APDS-9960 (configurar I2C e os valores iniciais) if (apds.init ()) {Serial.println (F ("inicialização do APDS-9960 concluída")); } else {Serial.println (F ("Algo deu errado durante a inicialização do APDS-9960!")); } if (! apds.setProximityGain (PGAIN_1X)) {Serial.println (F ("Algo deu errado ao tentar definir PGAIN")); } if (apds.enableProximitySensor (false)) {Serial.println (F ("O sensor de proximidade agora está em execução")); } else {Serial.println (F ("Algo deu errado durante a inicialização do sensor!")); } // Comece a executar o mecanismo de sensor de gestos APDS-9960 if (apds.enableGestureSensor (true)) {Serial.println (F ("Sensor de gestos em execução")); } else {Serial.println (F ("Algo deu errado durante a inicialização do sensor de gesto!")); }} void loop () {if (pageNum ==0) {if (! apds.readProximity (proximidade_data)) {Serial.println ("Erro ao ler valor de proximidade"); } else {Serial.println (proximidade_dados); if ((proximidade_dados> =40) &&(pageNum ==0)) {pageNum =1; atraso (2000); }}} switch (pageNum) {case 0:LCDClear (); lcd.print ("Locked- get"); lcd.setCursor (0,1); lcd.print ("3 polegadas de distância."); blinkRed (); LCDClear (); pausa; caso 1:numRight =0; lcd.print ("Insira o código ..."); lcd.setCursor (0,0); para (int x =0; x 0; x -) {LCDClear (); lcd.print ("Fechamento em:"); lcd.setCursor (0,1); lcd.print (x); lcd.setCursor (1,1); lcd.print ("segundos ..."); delay (1000);} LCDClear (); lcd.print ("Fechando");}
Esquemas