Abrepuertas sin contacto con gesto manual © GPL3+

¡Abre una puerta de garaje usando solo gestos con las manos!

 

Componentes y suministros

Captura de pantalla 2019 06 14 15 28 58 udl6wzcwho
Arduino Nano cada uno
× 1
Descargas2ftmp2f1dacbb1a 53c0 4950 85d8 9090aad8c3302fss 430 fen0llzf1i
KEMET Electronics Corporation Sensor de proximidad – Módulo de sensor infrarrojo piroeléctrico
× 2
Módulo Bluetooth de bajo consumo HM-10
× 1
mando a distancia para puerta de garaje
× 1
Pantalla LCD de 16×2
× 1
Fairchild semiconductor fqu13n06ltu 75px imagen
MOSFET de potencia de canal N
× 1
Mfr 25frf52 10k sml
resistencia de 10k ohmios
× 1
4415447 jg5sklyzsj
resistencia de 220 ohmios
330 ohmios también funcionarán. Es para retroiluminación LCD.
× 1
resistencia de 2k ohmios
× 1
Mfr 25frf52 1k sml
resistencia de 1k ohmios
× 1
09939 01
Potenciómetro giratorio (genérico)
× 1
cabeceras femeninas
× 1
terminal de tornillo de 3 pines
× 2
terminal de tornillo de 2 pines
× 1
Cable JST de 5 pines (paso de 1 mm)
× 2

Herramientas y máquinas necesarias.

09507 01
Soldador (genérico)
3 arrastrar
impresora 3D (genérica)
Pistola de pegamento Hy
Pistola de pegamento caliente (genérica)

Aplicaciones y servicios en línea

idea web
IDE de Arduino
Cualquier aplicación de terminal serie BLE

Acerca de este proyecto

La descripcion

El abridor de puerta con gesto manual permite a los usuarios abrir la puerta de un garaje utilizando solo señales manuales sin tocar nada físicamente. Es como un bloqueo de teclado que reemplaza presionar botones con gestos sin contacto. Esto es especialmente importante ahora durante la pandemia de coronavirus COVID-19 cuando se desaconseja tocar objetos.

Además de ser una alternativa sin contacto a los bloqueos de teclado, tiene otras aplicaciones. Por ejemplo, funciona bien en situaciones en las que el usuario se encierra sin llave ni teléfono, necesita dejar entrar a muchas personas y, en general, es una forma confiable y fácil de ingresar a una casa.

También es extremadamente fácil de instalar. El usuario solo tiene que pegarlo detrás de una ventana cerca del garaje y enchufarlo. Dado que el dispositivo está completamente en el interior, el usuario tampoco tiene que preocuparse por la manipulación o falla del dispositivo debido a las condiciones climáticas, como el calor extremo. , frío o humedad. Esto es posible gracias a la capacidad del sensor infrarrojo piroeléctrico para ver a través del vidrio.

Elegimos usar un abridor de puerta de garaje aquí porque no requiere modificaciones importantes en el hogar. Sin embargo, se puede instalar fácilmente en otras cerraduras de puertas.

Cómo usar

Los gestos con las manos son bastante simples. Lo primero que debe hacer el usuario es activar el dispositivo moviendo la mano frente al sensor correcto. Después de eso, pueden hacer señales con la mano para abrir la puerta del garaje. Un deslizamiento es un «1», mientras que una sola mano en el sensor izquierdo es un «0». Si el código binario ingresado coincide con el código almacenado en el dispositivo, el dispositivo abrirá la puerta.

Si el dispositivo no se utiliza durante un tiempo, entrará en modo de suspensión. En el modo de suspensión, apagará la pantalla LCD, restablecerá los valores ingresados ​​​​y permitirá que el usuario cambie el código para abrir la puerta a través de Bluetooth.

Cambiar este código para abrir la puerta es sencillo y el procedimiento se encuentra en el paso 10 del manual. Este código de puerta se guarda en la EEPROM de Arduino, por lo que el dispositivo conservará el mismo código de puerta incluso en caso de un corte de energía.

Vídeos

CorreManifestación:

Un breve extracto del video completo.

CompletoVideo:

Video que muestra el dispositivo

Instrucciones de construcción

Las instrucciones para este proyecto involucran un PCB. Sin embargo, el esquema de la placa de prueba que usamos para el prototipo se puede encontrar en la sección Esquemas si desea usar una placa de prueba en su lugar.

1. Imprima en 3D la carcasa que se encuentra en la sección Piezas y carcasas personalizadas.

2. Imprima la PCB utilizando el archivo Gerber PCB que se encuentra en la sección Esquemas.

3. Suelde las resistencias, los terminales de tornillo, los enchufes, el potenciómetro y el MOSFET.

Para resistencias, R1 es 10k ohm, R2 es 220 ohm, R3 es 1k ohm y R4 es 2k ohm.

El encabezado de la pantalla LCD debe soldarse a la parte posterior de la PCB (el lado con las resistencias).

4. Conecte este dispositivo a una puerta. Elegimos un control remoto de puerta de garaje: desmonte un control remoto de puerta de garaje hasta que solo tenga la placa de circuito. Suelde dos cables detrás del botón que abre la puerta. Atornille estos cables en el terminal de tornillo de 2 pines.

El dispositivo actuará como un botón y cerrará el circuito cuando se ingrese el código de acceso correcto.

5. Conecte los dos sensores infrarrojos piroeléctricos a los dos terminales de tornillo de 3 pines. El voltaje es el pin más a la derecha, la señal es el pin del medio y la tierra es el pin más a la izquierda.

6. Enchufe el Arduino, el módulo Bluetooth y la pantalla LCD en los encabezados.

Por ahora, así es como debería verse:

7. Primero pegue con pegamento caliente los sensores piroeléctricos en la carcasa. A continuación, aplique pegamento caliente a la pantalla LCD y baje todo dentro de la caja asegurándose de que la pantalla LCD se alinee con el orificio de la pantalla LCD.

8. Asegúrese de que todo encaje en el estuche y atornille la tapa.

9. Descarga el código que se encuentra en la sección Código del dispositivo. Asegúrese de cambiar la contraseña de bluetooth en la línea 2 antes de cargar el código.

10. Configure el código para abrir la puerta. Utilice cualquier aplicación serie Bluetooth Low Energy para conectarse al dispositivo e ingrese la contraseña que configuró en la línea 2 del boceto. Luego ingrese el nuevo código para abrir la puerta. Así es como debería verse:

TuContraseñaAquí

Introduzca el nuevo código de puerta:

1100111

Nuevo código de puerta registrado

codificado

codificadoarduino
//This is the password to grant you access to change the doorCode
const String bluetoothPassword = "YourPasswordHere";

#include <EEPROM.h>
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>

SoftwareSerial softSerial =  SoftwareSerial(6, 7); //setup software serial (rxPin(in), txPin(out))
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //setup LCD
const int inputSensor = A0; //input sensor analog pin 0
const int enterSensor = A1; //enter sensor analog pin 1
const int doorPin = 8; //garage remote pin 8
const int backlightPin = 9; //LCD back light pin 9

unsigned long timeout = 0;
bool stabilized = false;

int doorCodeDecimal = 0; //code in decimal form as it is stored in the Arduino's EEPROM


void setup() {
  lcd.begin(16, 2);
  pinMode(inputSensor,INPUT); //input sensor connected to A0
  pinMode(enterSensor, INPUT); //enter sensor connected to A1
  pinMode(doorPin, OUTPUT); //Setup door pin
  pinMode(backlightPin, OUTPUT); //setup LED backlight pin

  softSerial.begin(9600); //setup serial with Bluetooth
  doorCodeDecimal = EEPROM.read(0); //read password saved in device

  //allow time for device to warm up
  digitalWrite(backlightPin, HIGH);
  lcd.setCursor(0, 0);
  lcd.print("Warming up...");
  delay(30000);
}

void loop() {

  sleepMode(); //sleep when not in use, while allowing interactions through Bluetooth

  //The sensor detects a hand

  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Current:");

  String userInput = "";
  int signalsRead = 0; //how many signals have been read
  bool correctPassword = false;
  while (signalsRead < 8 && !correctPassword) {
  //read signals till code is right or tell the user at the end of 8 readings that the password was wrong

    //wait for enter signal
    lcd.setCursor(0, 0);
    lcd.print("Ready!        ");
    timeout = millis() + 10000;
    while (digitalRead(enterSensor) < 1 && millis() < timeout) { }
    if (millis() >= timeout) { break; }

    //******if there is no signal for 2 secs, the input is 0; 1 otherwise
    lcd.setCursor(0, 0);
    lcd.print("Reading...      ");
    timeout = millis() + 500;
    while (millis() < timeout) {
      if (digitalRead(inputSensor) > 0) {
        userInput += "1";
        break;
      }
    }
    if (userInput.length() == signalsRead) { userInput += "0"; }
    signalsRead++; //record that a new signal is recorded
    //******------------------------------------------------------------

    //display input
    lcd.setCursor(8, 1);
    lcd.print(userInput);

    if (binaryToDecimal(userInput) == doorCodeDecimal) {
      correctPassword = true; //compare user input and actual password. If they equal, terminate and tell user the result
    }

    stabilized = false; //wait for the input sensor to stabilize (read all 0 for 1 second straight)
    lcd.setCursor(0, 0);
    lcd.print("Remove hand...  ");
    while (!stabilized) {
      stabilized = stabilize(inputSensor);
    }
  }

  lcd.clear();
  lcd.setCursor(0, 0);
  if (correctPassword) {
    lcd.print("Correct Password!");
    lcd.setCursor(0, 1);
    lcd.print("Opening Door...");
    digitalWrite(doorPin, HIGH);
    delay(5000); //give garage door time to open
    digitalWrite(doorPin,LOW);
    lcd.setCursor(0, 1);
    lcd.print("Door Opened!   ");
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Have a Good Day!");
    delay(1000);
  } else {
    lcd.print("Wrong Password!");
    lcd.setCursor(0, 1);
    lcd.print("Maybe Try Again!");
    delay(1000);
  }
}


void sleepMode() { //wait for enter signal while reading inputs from Bluetooth terminal
  digitalWrite(backlightPin, HIGH);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Sleeping..."); delay(1000);
  digitalWrite(backlightPin, LOW);
  lcd.clear();
  while (digitalRead(enterSensor) < 1) { //while the user hasn't hit ENTER
    if (softSerial.available()) { //check to see if user wants to change the door code
      String input = softSerial.readString();
      input = input.substring(0, input.length() - 2); //take off the \n from input
      
      if (input.equals(bluetoothPassword)) { //If the input equals the password, allow the user to change the doorCode
        boolean enteredCode=false;
        softSerial.println("\nInput new door code:\n");
        String doorCodeBinary;
        
        while(!enteredCode){ 
          if(softSerial.available()){
             doorCodeBinary= softSerial.readString();
             enteredCode=true;
          }
        }       
        doorCodeBinary = doorCodeBinary.substring(0, doorCodeBinary.length() - 2);
        delay(500);
        doorCodeDecimal = binaryToDecimal(doorCodeBinary);
        EEPROM.write(0, doorCodeDecimal);
        softSerial.println("\nNew door code is: " + doorCodeBinary + "\n");
      }
    }
  }
  digitalWrite(backlightPin, HIGH);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Booting up...");
  stabilized = false; //wait for enter sensor to be stabilized
  while (!stabilized) {
    stabilized = stabilize(enterSensor);
  }
}

bool stabilize(int sensorPin) { //looped until the sensor reads only 0 for 1 second straight
  unsigned long period = millis() + 1000;
  while (millis() < period) {
    if (digitalRead(enterSensor) > 0) {
      return false;
    }
  }
  return true;
}

int binaryToDecimal(String n) { //convert code in Binary into Decimal
  int output = 0;
  int factor = 0;
  while (n.length() != 0) {
    int lastNum = (n.substring(n.length() - 1)).toInt();
    if (lastNum == 1) {
      output += bit(factor);
    }
    factor += 1;
    n = n.substring(0, n.length() - 1);
  }
  return output;
}

Partes y estuches personalizados

orador principal
Descargar
Tapa
Descargar

diagramas

Archivo PCB de Gerber
Descargar
pcbfinal_rev2_1_haKKggtdA5.zip
Diagrama de placa de pruebas
Descargar
Mano gesto nano abridor de puerta de garaje 1 bb a6jbypgqx2

comentarios

Fuente Arduino.cc