Haga una puerta de oficina con bloqueo automático con sensor de proximidad para teléfono inteligente
Pssst - quieres algo de protección de alta tecnología para tu oficina en casa, o una cerradura secreta para tu "taller" (ok, me entendiste, en realidad es una mazmorra / sala de juegos) que los niños no podrán entender? Te tenemos cubierto. Construyamos una cerradura inteligente de bricolaje que detecta automáticamente cuando estás allí y bloquea cuando no lo 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 específicamente ser descubierto, cualquier persona que sepa 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 alerta cuando su teléfono inteligente esté fuera de alcance, y cuando lo esté, el relé entrará en acción 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 anterior y los pines GPIO pueden ser ligeramente diferentes en su modelo. Consulte la sección de modo a bordo a continuación. También necesitará algunos conceptos básicos como una conexión Ethernet por cable o Wi-Fi configurado; más tarjeta SD y cable de alimentación micro USB.
- Adaptador USB Bluetooth. Adafruit vende un módulo Bluetooth 4.0 BLE que se ha confirmado que funciona (¿qué es Bluetooth 4.0?), Pero debe probar cualquiera que ya tenga 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 importan las velocidades de transferencia o la confiabilidad de la conexión, ya que todo lo que estamos haciendo es enviar un apretón de manos rápido para ver si un dispositivo está vivo y en buen estado.
- Tablero de conexiones 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 relés. Aquí tienes una amplia variedad de opciones, y cualquier cosa funcionará si está diseñada para usarse 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 voy a asumir que sabes cómo trabajar la tuya.
- Cerradura de electroimán de 12 / 24V, aunque también debería funcionar una cerradura de solenoide electrónico. El que compré tiene una fuerza de sujeción de 180 KG y viene completo con placas de montaje e instrucciones, por aproximadamente $ 35.
- Fuente de alimentación 12 / 24V. El candado magnético debe tener una fuente de alimentación separada; hagas lo que hagas, no intentes sacar energía del Pi.
- Lock.py Python, pero escribiremos esto a medida que avanzamos.
Trabajar con Bluetooth
Bluetooth es fundamental para este proyecto, así que comencemos por instalar algo de compatibilidad con Bluetooth y probar nuestro adaptador. Puede hacer esto directamente desde la Pi o SSH de forma remota (cómo configurar Windows a SSH en su Pi).
sudo apt-get install bluez python-bluez
Inserte su dongle si aún no lo ha hecho, y echemos un vistazo a lo que informa.
hcitool dev
Si tiene algo en la lista de resultados, está listo para comenzar. A continuación, usaremos una secuencia de comandos de Python para sondear los dispositivos Bluetooth cercanos y tomaremos la dirección única del dispositivo. Solo necesitamos hacer esto una vez para cada dispositivo.
wget https://pybluez.googlecode.com/svn/trunk/examples/simple/inquiry.py python query.py
Si ves "0 dispositivos encontrados", no tienes una llave USB Bluetooth compatible o tu 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 ponerlo en modo de descubrimiento, luego sucedió esto:
Genial, ahora creemos la primera etapa de nuestro software que realiza la detección. Cree una aplicación de Python llamada detect.py y ábralo con Nano.
nano detect.py
Pegue 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 ):imprime "Usuario presente" else:imprime "Usuario fuera de rango" 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)
Presiona CTRL-X y Y cerrar y guardar. Ejecute el mismo código y verá algo como esto:
El código debería ser muy fácil de entender incluso si nunca antes ha tocado Python:busca un dispositivo Bluetooth en particular cada 10 segundos e imprime un mensaje diferente dependiendo de si se encuentra o no. Active y desactive el Bluetooth de su teléfono para simular el movimiento dentro y fuera del alcance (probablemente unos 4 m en realidad). Puede disminuir o aumentar el tiempo entre escaneos, pero sentí que 10 segundos era una cantidad de 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 de hacer esto, pero supongo que hacer ping a un dispositivo con más frecuencia necesariamente consumiría 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 tener un interruptor dentro de su oficina que active y desactive el ciclo de escaneo, por lo que una vez que esté dentro, puede pausar el bloqueo. sistema, luego vuelva a activar el escaneo cuando salga.
Felicitaciones, ahora tiene una aplicación de Python que sabe cuándo está dentro del alcance, por lo que podemos comenzar a actuar en consecuencia.
Modos de placa GPIO
Antes de continuar, debes averiguar qué modo de tablero 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 usar el número de pin literal ("modo de placa"), comenzando con el pin 1 en la parte inferior izquierda (si mira hacia abajo en el Pi con puertos USB a la derecha). El pin 2 está justo encima de eso.
Sin embargo, si tiene una placa de ruptura GPIO ("zapatero"), las etiquetas que tiene son de un modo alternativo, llamado "BCM" (canal Broadcom SOC), y comúnmente se escriben con GPIO o P como prefijo. No es estrictamente necesario un desglose de GPIO, simplemente facilita las cosas. Si no tiene una placa de ruptura y no quiere comprar una, use este diagrama:
Tenga en cuenta que el modelo B original revisión 1, revisión 2 y el modelo B + y Pi2 tienen diferentes pines. Consulte esta pregunta de StackExchange para obtener un diagrama correcto para su placa.
En este código de proyecto, estoy usando el sistema de numeración BCM GPIO que corresponde a la placa adaptadora Adafruit que tengo. Se necesitan modificaciones menores si desea utilizar el modo de pin literal.
Cableado en un relé
Conecte la placa de ruptura, 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 sacar un probador de voltaje para verificar esto.
Antes de continuar, verifique si alguien más ha usado su relé particular con la Raspberry Pi (o busque 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 está contento con 3.3V, por lo que no necesité ningún circuito adicional, solo el 5V0 a VCC , GND a GND y pin 23 de GPIO para la primera entrada de relé .
Mi tutorial anterior sobre GPIO mostró cómo conectar un circuito de transistor para escalar 3.3V a 5V completos si es necesario (de hecho, usé la misma placa de relé para ese tutorial, pero resulta que no necesitaba 5V después de todo).
No es necesario conectar el electroimán todavía, ya que podrá escuchar un clic audible cuando se active el relé.
A continuación, tomemos un código para interactuar con los puertos GPIO.
Comenzaremos probando fuera de Python para confirmar que todo funciona en los propios puertos. Instale wirePi, que le brinda algunas herramientas útiles de línea de comandos.
git clone git://git.drogon.net/wiringPi cd cableadoPi ./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á algo similar a esto, aunque el suyo puede ser más largo en un modelo B + o Pi2 ya que tiene más pines GPIO:
Para obtener más detalles:haga una puerta de oficina con bloqueo automático con sensor de proximidad para teléfono inteligente
Proceso de manufactura
- Bóveda del banco
- Circuito de sensor de proximidad simple y trabajo con aplicaciones
- Considere el problema número uno con las redes de sensores inteligentes basadas en Bluetooth
- Cypress:las MCU Bluetooth ofrecen redes de malla con conectividad ubicua para teléfonos inteligentes
- Sensor de seguimiento de línea con RPi
- API de sensor ambiental con un RPi
- Un sensor de proximidad analógico simple con interfaz digital (para Raspberry Pi) [última actualización:7 de febrero de 2014]
- Portenta y sensor de termopar (con MAX6675)
- Monitoreo de CO2 con sensor K30
- ¡Arduino con Bluetooth para controlar un LED!
- Sensor capacitivo de huellas dactilares con Arduino o ESP8266