Haga una puerta de oficina de bloqueo automático con un sensor de proximidad para teléfonos inteligentes

Configuraremos una Raspberry Pi con un adaptador Bluetooth para estar atentos cuando su teléfono inteligente esté fuera de alcance, y active un relé para bloquear la puerta.

Configuraremos una Raspberry Pi con un adaptador Bluetooth para estar atentos cuando su teléfono inteligente esté fuera de alcance, y active un relé para bloquear la puerta.
Anuncio

Pssst - ¿Quieres protección de alta tecnología para tu oficina en casa, o una cerradura secreta para tu "taller" (vale, me entiendes, es en realidad una sala de mazmorras / juegos) que los niños no podrán descifrar? Te tenemos cubierto. Construyamos una cerradura inteligente de bricolaje que detecte automáticamente cuando esté allí y que se bloquee cuando no lo esté.

¿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 descubrirlo específicamente, todo lo que conoce esa dirección puede intentar hacer ping. Si se escucha una respuesta, eso indicaría si está dentro del rango o no.

Configuraremos una Raspberry Pi con un adaptador Bluetooth para estar constantemente atento cuando su teléfono inteligente esté fuera de alcance, y cuando lo haga, el relé se pondrá en funcionamiento y bloqueará la puerta.

Necesitará

  • Raspberry Pi: cualquier modelo debería funcionar, ya que no es una tarea intensiva de la CPU, pero estoy usando un modelo B más antiguo, y las conexiones GPIO pueden ser ligeramente diferentes en su modelo. Vea la sección a bordo del modo a continuación. También necesitará algunos conceptos básicos como una conexión Ethernet por cable o Wi-Fi configurado 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 BLE Bluetooth 4.0 con funcionamiento confirmado (¿qué es Bluetooth 4.0? ¿Cómo está configurando Bluetooth 4.0 el futuro de la conectividad móvil? ¿Cómo está configurando Bluetooth 4.0 el futuro de la conectividad móvil? Bluetooth es la estrella olvidada en la hoja de especificaciones del dispositivo. deberías probar cualquiera que ya tengas cerca antes de comprar uno nuevo solo para este proyecto. Encontré un mini adaptador Bluetooth estándar antiguo que compré en Japón que parece funcionar bien. No nos importan las velocidades de transferencia o la confiabilidad de la conexión, ya que todo lo que hacemos 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ías trabajar directamente desde los pines del Pi, pero es mucho más fácil si tienes etiquetas en cada pin, y de todos modos solo cuestan $ 6.
  • Tablero de relevos. Aquí tiene una amplia variedad de opciones, y todo funcionará si está diseñado para su uso con un microcontrolador y puede conducir al menos 12 voltios a 5 amperios. He usado una placa genérica de 4 canales similar a esta por alrededor de $ 5, pero supongo que sabes cómo trabajar la tuya.
  • La cerradura del electroimán 12 / 24V, aunque una cerradura de solenoide electrónica también debería funcionar. El que compré tiene una fuerza de sujeción de 180 KG y viene completo con placas de montaje e instrucciones, por alrededor de $ 35.
  • Fuente de alimentación 12 / 24V. El bloqueo del imán debe tener una fuente de alimentación separada: haga lo que haga, no intente extraer potencia del Pi.
  • Lock.py Python, pero vamos a escribir esto a medida que avanzamos.

Trabajando con Bluetooth

Bluetooth es fundamental para este proyecto, así que comencemos instalando soporte Bluetooth y probando nuestro adaptador. Puede hacerlo directamente desde el Pi o SSH de forma remota (cómo configurar Windows para SSH en usted Pi Configuración de su Raspberry Pi para uso sin cabeza con SSH Configuración de su Raspberry Pi para uso sin cabeza con SSH La Raspberry Pi puede aceptar Comandos SSH cuando está conectado 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 el análisis diario ... Leer más).

sudo apt-get install bluez python-bluez 

Inserte su dongle si aún no lo ha hecho, echemos un vistazo a lo que informa.

 hcitool dev 

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

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

Si ve "0 dispositivos encontrados", o no tiene un dispositivo de seguridad Bluetooth USB compatible, o su teléfono inteligente no es detectable. Sin embargo, no se desespere: descubrí que tenía que abrir la página de configuración de Bluetooth en mi iPhone para ponerla en modo de descubrimiento, y luego sucedió esto:

bluetooth identificado

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 ábrela con Nano.

 nano detect.py 

Pegue en este código de muestra:

 #!/usr/bin/python import bluetooth import time while True: print "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): print "User present" else: print "User out of range" time.sleep(10) 

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

 result = bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5) 

Presione CTRL-X e Y para cerrar y guardar. Ejecuta el mismo código, y ves algo como esto:

usuario presente detectpy

El código debe ser muy simple de entender, incluso si nunca antes ha tocado Python: está escaneando 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 alcance (probablemente alrededor de 4m en realidad). Puede disminuir o aumentar el tiempo entre escaneos, pero sentí que 10 segundos fue una cantidad de tiempo razonable para potencialmente tener que esperar a que se desbloquee la puerta, que es donde vamos con todo este proyecto después de todo.

Debo agregar, no sé sobre el consumo de energía de hacer esto, pero supongo que hacer ping a un dispositivo con mayor frecuencia necesariamente consumiría más energía. No he visto problemas evidentes de rendimiento en las pruebas, pero si la vida útil de la batería es una preocupación importante para usted, considere tener un interruptor dentro de su oficina que active y desactive el ciclo de exploración, de modo que una vez dentro, puede detener el bloqueo sistema, luego vuelve a activar el escaneo cuando te vayas.

Enhorabuena, ahora tienes una aplicación de Python que sabe cuándo estás dentro del alcance, por lo que podemos comenzar a actuar sobre eso.

Modos de placa GPIO

Antes de continuar, necesita averiguar qué modo de placa va a utilizar. No hay una respuesta correcta o incorrecta, solo afecta si especifica el número de pin literal o el número de pin virtual de GPIO.

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

Sin embargo, si tiene una placa GPIO breakout ("zapatero"), las etiquetas que tiene son de un modo alternativo, llamado "BCM" (canal Broadcom SOC), y se escriben comúnmente con GPIO o P prefijando el número. No se necesita estrictamente una ruptura GPIO, simplemente hace las cosas más fáciles. Si no tiene una tabla de inicio y no quiere comprar una, use este diagrama:

Diagrama de pines de Raspberry Pi modelo A y B de RaspberryPi.org
Diagrama de pines de Raspberry Pi modelo A y B de RaspberryPi.org

Tenga en cuenta que la revisión 1 original del modelo B, la revisión 2 y los modelos B + y Pi2 tienen clavijas diferentes. Consulte esta pregunta de StackExchange para obtener un diagrama correcto en su tablero.

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

Alambre en un relevo

Coloque la placa de separación, asegurándose de que el cable de los pines 1 y 2 (los que están 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 comprobar esto.

rpi smart lock - gpio

Antes de continuar, compruebe si alguien más ha utilizado su relé particular con Raspberry Pi (o encuentre uno de antemano 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 es feliz con 3.3V, así que no necesitaba ningún circuito adicional, solo el 5V0 a VCC, GND a GND, y el pin 23 de GPIO para la primera entrada de relé .

Mi tutorial anterior sobre GPIO Comenzar con GPIO sobre un Raspberry Pi Comenzar con GPIO sobre un Raspberry Pi Si crees que el Arduino es genial, solo espera a tener en tus manos una Raspberry Pi: estas cosas son increíbles. Además de ser una computadora completamente funcional, también tienen un ... Read More mostró cómo conectar un circuito de transistores para escalar 3.3V a 5V completos si es necesario (de hecho, utilicé la misma placa de relés para ese tutorial, pero resulta que no necesitaba 5V después de todo).

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

A continuación, tomemos algún código para interactuar con los puertos GPIO.

Comenzaremos probando fuera de Python para confirmar que todo está funcionando en los puertos. Instale wiringPi, que le brinda algunas herramientas de línea de comando útiles.

 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 mode 23 out 

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:

gpio readall

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

Para escribir el pin alto o bajo, simplemente use

 gpio -g write 23 1 gpio -g write 23 0 

Con suerte, si tiene el relé cableado correctamente, lo escuchará haciendo clic en y fuera. Si no, no continúe hasta que haya descubierto el cableado. Recuerde, es posible que necesite un voltaje más alto para activar el relevador.

Una vez que haya confirmado que el relevador 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 relevo cuando se detecta el teléfono. Encontrarás el código final en este Gist. Copie el detect.py existente en un nuevo lock.py y agregue los siguientes comandos de importación y configuración:

 import RPi.GPIO as 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 relevador. Tenga en cuenta que su relé puede funcionar con una señal baja o una señal alta, por lo que ajuste de acuerdo 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 administrador.

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é, lleve el positivo 12V al terminal etiquetado como COM (común), luego la entrada de potencia positiva del electroimán al terminal NO ( normalmente abierto, es decir, esto normalmente no está conectado al terminal común, pero lo estará cuando activar el relevador ).

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

rpi smart lock - relé

Consulte las instrucciones de instalación que vienen con su candado; la puerta debe ser bastante gruesa, y es más fácil si se abre desde el lado en el que desea que esté la cerradura. El mío fue todo lo contrario, así que necesito el soporte de montaje en forma de L, así como un trozo de madera adicional para aumentar el grosor de la puerta.

rpi smart lock - electroimán

Mejoras

Esta fue una prueba de concepto para mí para construir con otros proyectos, y realmente solo para mantener 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 mantener el flujo de energía en caso de corte.

Por supuesto, si alguien irrumpe en su casa y se toma la molestia de cortarle el poder, probablemente tenga el problema más grande de que sea un psicópata que está dispuesto a matarlo, en lugar de ser un ladrón casual. También querrás un cerrojo físico de cerrojo, además de uno electrónico, y un gran palo.

Por supuesto, esta técnica de detección de proximidad que utiliza Bluetooth no se limita a un bloqueo de puerta automático; también puede usarlo para activar la apertura de la puerta de garaje cuando regrese a casa, o encender su cine en casa antes de entrar por la puerta.

¿Qué función crees que debería agregar a continuación? ¿Tuviste problemas para construir esto? ¡Házmelo saber en los comentarios y haré todo lo posible para ayudar!

In this article