Hacer una puerta de la oficina de bloqueo automático con sensor de proximidad de teléfono inteligente

Hacer una puerta de la oficina de bloqueo automático con sensor de proximidad de teléfono inteligente / Casa inteligente

Pssst - desea alguna protección de alta tecnología para la oficina de su hogar, o un candado secreto para su “taller” (ok, me tienes, en realidad es una sala de juegos / mazmorra) ¿Que los niños no podrán darse cuenta? Te tenemos cubierto. Construyamos un bloqueo inteligente de bricolaje que detecte automáticamente cuando estás allí, y que se bloquee cuando no estás.

¿Como funciona? ¡NADIE LO SABE! O más específicamente, Bluetooth.

El concepto

Su teléfono inteligente es un dispositivo poderoso que constantemente revela información sobre sí mismo al mundo exterior; Una forma de hacerlo es bluetooth..

En el modo de descubrimiento, transmite un número de identificación único, pero incluso cuando no se permite que lo descubran específicamente, cualquier cosa que sepa que la dirección puede intentar hacer ping. Si se escucha una respuesta, eso indicaría si está dentro del rango o no.

Estaremos configurando una Raspberry Pi con un adaptador Bluetooth para estar constantemente atentos cuando su teléfono inteligente está fuera del alcance, y cuando lo esté, el relé se activará y cerrará la puerta..

Necesitará

  • Raspberry Pi: cualquier modelo debería funcionar ya que no es una tarea que requiera un uso intensivo de la CPU, pero estoy usando un modelo B más antiguo, y los pinouts de GPIO pueden ser ligeramente diferentes en su modelo. Vea la sección en el modo de tablero a continuación. También necesitará algunos conceptos básicos como una conexión Ethernet por cable o una configuración de Wi-Fi. Configuración de redes inalámbricas en su Raspberry Pi Configuración de redes inalámbricas en su Raspberry Pi. Prácticamente todos los proyectos de Raspberry Pi requerirán una conexión de red, y se puede obtener una flexibilidad considerable. ignorando el puerto Ethernet a favor de un dongle USB inalámbrico. Lee mas ; más tarjeta SD y cable de alimentación micro USB.
  • Adaptador USB Bluetooth. Adafruit vende un módulo Bluetooth 4.0 BLE con funcionamiento confirmado (¿qué es Bluetooth 4.0? Cómo Bluetooth 4.0 está configurando el futuro de la conectividad móvil Cómo Bluetooth 4.0 está configurando el futuro de la conectividad móvil Bluetooth es la estrella olvidada en la hoja de especificaciones del dispositivo. Leer más), pero debe probar cualquiera que ya tenga por ahí antes de comprar uno nuevo solo para este proyecto. Encontré un antiguo mini adaptador Bluetooth estándar que compré en Japón que parece funcionar bien. No nos preocupan las velocidades de transferencia ni la confiabilidad de la conexión, ya que todo lo que estamos haciendo es enviar un rápido apretón de manos para ver si un dispositivo está vivo y en buen estado..
  • Tablero de ruptura GPIO (“zapatero”) y cables de puente. Podría trabajar directamente desde los pines en la Pi, pero es mucho más fácil si tiene etiquetas en cada pin, y de todos modos solo cuestan $ 6..
  • Tablero de relés. Tiene una amplia variedad de opciones aquí, y cualquier cosa funcionará si está diseñada para usarse con un microcontrolador y puede manejar al menos 12 voltios a 5 amperios. He usado una placa genérica de 4 canales similar a esta por alrededor de $ 5, pero voy a asumir que sabes cómo trabajar la tuya.
  • Bloqueo de electroimán de 12 / 24V, aunque también debería funcionar un bloqueo de solenoide electrónico. El que compré tiene una fuerza de retención de 180 KG y viene con placas de montaje e instrucciones, por aproximadamente $ 35.
  • Fuente de alimentación 12 / 24V. El bloqueo del imán debe tener una fuente de alimentación independiente: haga lo que haga, no intente extraer la energía del Pi.
  • Lock.py aplicación de Python, pero escribiremos esto a medida que avanzamos.

Trabajando con bluetooth

Bluetooth es fundamental para este proyecto, así que comencemos instalando algo de soporte de Bluetooth y probemos nuestro adaptador. Puede hacer esto directamente desde el Pi o desde SSH de forma remota (cómo configurar Windows para SSH en su Pi. Cómo configurar su Raspberry Pi para un uso sin cabeza con SSH Cómo configurar su Raspberry Pi para un uso sin cabeza con SSH que el Raspberry Pi puede aceptar Los comandos de SSH cuando se conectan a una red local (ya sea por Ethernet o Wi-Fi), lo que le permite configurarlo fácilmente. Los beneficios de SSH van más allá de alterar la detección diaria ... Leer más).

sudo apt-get install bluez python-bluez

Inserte su dongle si aún no lo ha hecho, y echemos un vistazo a lo que está informando.

hcitool dev

Si tienes algo en la lista de salida, estás listo. A continuación, usaremos un script de Python para sondear los dispositivos Bluetooth cercanos y obtener la dirección única del dispositivo. Solo necesitamos hacer esto una vez para cada dispositivo..

wget https://raw.githubusercontent.com/karulis/pybluez/master/examples/simple/inquiry.py python inquiry.py

Si tú ves “0 dispositivos encontrados”, es posible que no tenga un dongle Bluetooth USB compatible o que su teléfono inteligente no sea detectable. Sin embargo, no se desespere: descubrí que tenía que abrir la página de configuración de Bluetooth en mi iPhone para ponerlo en modo de descubrimiento, luego sucedió:

Genial, ahora vamos a crear la primera etapa de nuestro software que hace la detección. Crea una aplicación de Python llamada detect.py, y abrirlo con nano.

nano detect.py

Pega en este código de ejemplo:

#! / usr / bin / python importa el tiempo de importación de bluetooth mientras sea Verdadero: imprima "Checking" + time.strftime ("% a,% d% b% Y% H:% M:% S", time.gmtime ()) result = bluetooth.lookup_name ('78: 7F: 70: 38: 51: 1B ', timeout = 5) if (result! = None): imprime "User present" else: print "User out of range" time.sleep ( 10) 

y ajuste la siguiente línea con la dirección de su dispositivo Bluetooth:

resultado = bluetooth.lookup_name ('78: 7F: 70: 38: 51: 1B ', tiempo de espera = 5)

prensa CTRL-X y Y para cerrar y guardar. Ejecuta el mismo código y verás algo como esto:

El código debe ser muy simple de entender, incluso si nunca antes ha tocado Python: está buscando un dispositivo Bluetooth en particular cada 10 segundos e imprime un mensaje diferente según se encuentre o no. Alterne el Bluetooth en su teléfono para simular el movimiento dentro y fuera del rango (probablemente unos 4 m en realidad). Puede disminuir o aumentar el tiempo entre exploraciones, pero sentí que 10 segundos era un tiempo razonable para potencialmente tener que esperar a que se desbloquee la puerta, que es a donde vamos con todo este proyecto después de todo.

Debo agregar, no sé sobre el consumo de energía al hacer esto, pero supongo que hacer ping a un dispositivo con más frecuencia necesariamente consumirá más energía. No he visto ningún problema de rendimiento obvio en las pruebas, pero si la duración de la batería es una preocupación importante para usted, considere la posibilidad de tener un interruptor dentro de su oficina que active y desactive el ciclo de escaneo, así que una vez dentro, puede pausar el bloqueo. sistema, a continuación, vuelva a activar el escaneo cuando salga.

Enhorabuena, ahora tienes una aplicación de Python que sabe cuándo estás dentro del rango, por lo que podemos comenzar a actuar en ese sentido..

Modos del tablero GPIO

Antes de continuar, necesitas averiguar qué modo de tabla vas a usar. No hay una respuesta correcta o incorrecta, solo afecta si especifica el número de pin literal o el número de pin GPIO virtual.

El valor predeterminado es utilizar el número de pin literal (“modo de tablero”), comenzando con el pin 1 en la parte inferior izquierda (si mira hacia abajo en la Pi con puertos USB a la derecha). Pin 2 está justo encima de eso.

Sin embargo, si tiene un brote de GPIO (“zapatero”), las etiquetas que tiene son de un modo alternativo, llamado “BCM” (Canal SOC de Broadcom), y normalmente se escriben con GPIO o P prefijando el número. No necesita estrictamente una ruptura de GPIO, solo facilita las cosas. Si no tiene una tabla de ruptura y no quiere comprar uno, use este diagrama:

Diagrama pinout de la Raspberry Pi modelo A y B de RaspberryPi.org

Tenga en cuenta que el modelo B original revisión 1, revisión 2, y el modelo B + y Pi2 tienen diferentes salidas de pin. Consulte esta pregunta de StackExchange para obtener un diagrama correcto para su tablero..

En este código de proyecto, estoy usando el sistema de numeración BCM GPIO que corresponde al tablero de ruptura de Adafruit que tengo. Se necesitan modificaciones menores si desea utilizar el modo de pin literal.

Alambre en un relé

Conecte la tabla de ruptura, asegurándose de que el cable de los pines 1 y 2 (los que se encuentran en la esquina de su Pi) se conecte a 3v3 y 5V0 en la ruptura. Es posible que desee extraer un probador de voltaje para verificar esto.

Antes de continuar, verifique si alguien más ha usado su relé en particular con la Raspberry Pi (o encuentre uno que sepa que funciona). Algunos pueden requerir 5V para activarse, pero el RPi solo puede proporcionar 3.3V en los pines de salida GPIO. Por casualidad, el que estoy usando está satisfecho con 3.3V, por lo que no necesité ningún circuito adicional, solo el 5V0 a VCC, GND a GND, y Pin GPIO 23 para la primera entrada de relé.

Mi tutorial anterior sobre GPIO Primeros pasos con GPIO en una Raspberry Pi Primeros pasos con GPIO en una Raspberry Pi Si pensabas que el Arduino era genial, solo espera a que tengas una Raspberry Pi, estas cosas son increíbles. Además de ser una computadora totalmente funcional, también tienen una ... Leer más mostró cómo cablear un circuito de transistor para escalar 3.3V a 5V completo si es necesario (de hecho, usé la misma placa de relés para ese tutorial , pero resulta que no necesitaba 5V después de todo).

Aún no es necesario conectar el electroimán, ya que podrá escuchar un clic audible cuando se dispare el relé.

A continuación, vamos a agarrar un código para interactuar con los puertos GPIO.

Comenzaremos probando fuera de Python para confirmar que todo está funcionando en los puertos. Instala wiringPi, que te da algunas herramientas útiles de línea de comandos.

git clone git: //git.drogon.net/wiringPi cd wiringPi ./build

Una vez instalado, configure el pin 23 de GPIO para que sea una salida.

gpio -g modo 23 fuera

Ahora, haga un escaneo rápido de todos los puertos para confirmar

gpio -g readall

Tendrás algo similar a esto, aunque el tuyo puede ser más largo en un modelo B + o Pi2, ya que tiene más pines GPIO:

Esto puede ser un poco confuso al principio, pero la tabla se divide en la mitad y el orden de las columnas se invierte en cada lado. En el extremo izquierdo y el extremo derecho está el número de pin BCM. Ya que estamos usando 23, deberías ver el modo listado ahora como OUT. Este es un pequeño comando útil solo para tener una buena idea de lo que está pasando con todos sus pines en cualquier momento.

Para escribir el pin alto o bajo, solo usa

gpio -g escribe 23 1 gpio -g escribe 23 0

Con suerte, si tiene el relé conectado correctamente, lo escuchará hacer clic y apagarse. Si no, no continúe hasta que haya descubierto el cableado. Recuerde que puede necesitar un voltaje más alto para activar el relé.

Una vez que haya confirmado que el relé y GPIO están funcionando, agregue los módulos de Python para GPIO.

sudo apt-get install python-dev python-rpi.gpio

Ahora modifiquemos nuestra aplicación Python para activar o desactivar el relé cuando se detecte el teléfono. Encontrarás el código final en este Gist. Copia el existente detect.py a un nuevo lock.py, y agregue los siguientes comandos de importación y configuración:

importar RPi.GPIO como GPIO GPIO.setmode (GPIO.BCM) RELAY = 23 GPIO.setup (RELAY, GPIO.OUT)

En la instrucción IF, agregue un comando para activar o desactivar el relé. Tenga en cuenta que su relé puede funcionar con una señal baja o alta, así que ajústelo en consecuencia después de la prueba.

GPIO.output (RELAY, 1)

Para ejecutar esta nueva versión, prefija el comando con sudo - el acceso a GPIO requiere privilegios de root.

Enganchándolo

Una vez que haya confirmado que el relé está disparando con su sensor de proximidad, agregue el bloqueo del electroimán. En el lado del relé, coloque el positivo de 12V en el terminal etiquetado COM (común), luego la entrada de energía positiva del electroimán al terminal NO (Normalmente abierto, es decir. Normalmente, esto no está conectado al terminal común, pero lo estará cuando active el relé).

Únase al suelo desde la fuente de alimentación y el electroimán en el terminal GND.

Consulte las instrucciones de montaje que vienen con su cerradura; la puerta debe ser bastante gruesa, y es más fácil si se abre lejos del lado en el que quiere que esté la cerradura. El mío era lo opuesto, por lo que necesito el soporte de montaje en forma de L, así como un trozo adicional de madera para aumentar el grosor de la puerta.

Mejoras

Esta fue una prueba de concepto para mí para continuar con otros proyectos, y realmente solo para mantener las miradas indiscretas fuera de mi oficina cuando no estoy allí, no está diseñado para ser un sistema de seguridad infalible. Para eso, necesitaría una batería de respaldo para que la energía fluya en caso de que se corte..

Por supuesto, si alguien irrumpe en tu casa y se toma la molestia de reducir tu poder, probablemente tengas el problema más grande de que es un psicópata que está dispuesto a matarte, en lugar de un ladrón ocasional. También querrías un cerrojo físico además de uno electrónico y un palo realmente grande.

Por supuesto, esta técnica de detección de proximidad con Bluetooth no solo se limita a una cerradura automática de la puerta, sino que también puede usarla para activar la apertura de la puerta de su garaje cuando regrese a casa, o encender su cine en casa antes de entrar por la puerta.

¿Qué característica crees que debería agregar a continuación?? ¿Tuviste algún problema para construir esto? Déjame saber en los comentarios y haré mi mejor esfuerzo para ayudar!

Explorar más sobre: ​​Seguridad para el hogar, cerraduras inteligentes.