Faça uma porta do escritório de travamento automático com sensor de proximidade do smartphone

Nós estaremos configurando um Raspberry Pi com um adaptador Bluetooth para estarmos atentos quando o smartphone estiver fora de alcance, e colocaremos um relé em ação para trancar a porta.

Nós estaremos configurando um Raspberry Pi com um adaptador Bluetooth para estarmos atentos quando o smartphone estiver fora de alcance, e colocaremos um relé em ação para trancar a porta.
Propaganda

Pssst - quer alguma proteção de alta tecnologia para o seu escritório em casa, ou uma fechadura secreta para sua “oficina” (ok, você me pegou, na verdade é uma sala de jogo / masmorra) que as crianças não conseguirão descobrir? Estamos protegendo você. Vamos criar um bloqueio inteligente DIY que detecta automaticamente quando você está lá e bloqueia quando você não está.

Como funciona? NINGUÉM SABE! Ou mais especificamente, Bluetooth.

O conceito

Seu smartphone é um dispositivo poderoso que está constantemente revelando informações sobre si mesmo para o mundo externo; Uma maneira que faz isso é Bluetooth.

No modo de descoberta, ele transmite um número de identificação único - mas, mesmo quando não se permite especificamente ser descoberto, qualquer coisa que conheça esse endereço pode tentar fazer o ping. Se uma resposta for ouvida, isso indicará se ela está dentro do alcance ou não.

Vamos configurar um Raspberry Pi com um adaptador Bluetooth para estar constantemente à procura de quando o smartphone estiver fora do alcance e, quando estiver, o relé entrará em ação e trancará a porta.

Você vai precisar

  • Raspberry Pi - qualquer modelo deve funcionar, já que não é uma tarefa intensiva da CPU, mas estou usando um modelo B antigo e as pinças GPIO podem ser um pouco diferentes em seu modelo. Veja a seção no modo de placa abaixo. Você também precisará de alguns princípios básicos, como uma conexão Ethernet com fio ou Wi-Fi configurado Configurando rede sem fio em seu Raspberry Pi Configurando rede sem fio em seu Raspberry Pi Praticamente todo projeto Raspberry Pi exigirá uma conexão de rede e flexibilidade considerável pode ser obtida ignorando a porta Ethernet em favor de um dongle USB sem fio. Consulte Mais informação ; além de cartão SD e cabo de alimentação micro USB.
  • Adaptador USB Bluetooth. Adafruit vende um módulo Bluetooth 4.0 BLE confirmado funcionando (o que é Bluetooth 4.0? Como o Bluetooth 4.0 está moldando o futuro da conectividade móvel Como Bluetooth 4.0 está moldando o futuro da conectividade móvel O Bluetooth é a estrela esquecida na folha de especificações do dispositivo. Você deve testar qualquer um que já tenha em mente antes de comprar um novo apenas para este projeto. Eu encontrei um velho mini adaptador Bluetooth padrão que eu comprei no Japão que parece funcionar bem. Não nos importamos com velocidades de transferência ou confiabilidade de conexão, já que tudo o que estamos fazendo é enviar um rápido aperto de mão para ver se um dispositivo está funcionando bem.
  • Placa de fuga GPIO ("cobbler") e cabos de jumper. Você poderia trabalhar diretamente a partir dos pinos no Pi, mas é muito mais fácil se você tiver rótulos em cada pino, e eles são apenas US $ 6 de qualquer maneira.
  • Placa de rele Você tem uma grande variedade de opções aqui, e qualquer coisa funcionará se for projetada para uso com um microcontrolador e pode dirigir pelo menos 12 volts a 5 amps. Eu usei uma placa genérica de 4 canais semelhante a esta por cerca de US $ 5, mas eu vou assumir que você sabe como trabalhar o seu.
  • Bloqueio eletromagnético de 12 / 24V, embora uma trava de solenóide eletrônica também funcione. O que eu comprei tem 180KG força de detenção e vem completo com placas de montagem e instruções, por cerca de US $ 35.
  • Fonte de alimentação de 12 / 24V. O bloqueio magnético deve ter uma fonte de alimentação separada - o que você fizer, não tente extrair energia do Pi.
  • App Lock.py Python, mas vamos escrever isso à medida que avançamos.

Trabalhando com Bluetooth

Bluetooth é fundamental para este projeto, então vamos começar instalando algum suporte Bluetooth e testar nosso adaptador. Você pode fazer isso diretamente do Pi, ou SSH em remotamente (como configurar o Windows para SSH em você Pi Configurando o seu Raspberry Pi para uso sem cabeça com SSH Configurando o seu Raspberry Pi para uso sem cabeça com SSH O Raspberry Pi pode aceitar Comandos SSH quando conectados a uma rede local (seja por Ethernet ou Wi-Fi), permitindo que você os configure facilmente. Os benefícios do SSH vão além de atrapalhar a triagem diária ... Leia mais).

sudo apt-get install bluez python-bluez 

Insira o seu dongle se você ainda não o fez, e vamos dar uma olhada no que ele está relatando.

 hcitool dev 

Se você tem algo listado na saída, você está pronto para ir. Em seguida, usaremos um script Python para pesquisar dispositivos Bluetooth próximos e pegar o endereço exclusivo do dispositivo. Nós só precisamos fazer isso uma vez para cada dispositivo.

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

Se você vir "0 dispositivos encontrados", você não tem um dongle USB compatível com Bluetooth ou seu smartphone não pode ser encontrado. Não se desespere: descobri que tinha de realmente abrir a página de configurações do Bluetooth no meu iPhone para colocá-lo no modo de descoberta, então aconteceu:

bluetooth identificado

Ótimo, agora vamos criar o primeiro estágio do nosso software que faz a detecção. Crie um aplicativo do Python chamado detect.py e abra-o com o Nano.

 nano detect.py 

Cole neste código de exemplo:

 #!/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) 

e ajuste a seguinte linha com o endereço do dispositivo Bluetooth:

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

Pressione CTRL-X e Y para fechar e salvar. Execute o mesmo código e você verá algo assim:

usuário presente detectpy

O código deve ser muito simples de entender, mesmo que você nunca tenha tocado no Python antes: ele está procurando um dispositivo Bluetooth a cada 10 segundos e imprime uma mensagem diferente, dependendo de ser encontrada ou não. Alterne o Bluetooth no seu telefone para simular a movimentação dentro e fora do alcance (provavelmente cerca de 4m na realidade). Você pode diminuir ou aumentar o tempo entre as digitalizações, mas eu senti que 10 segundos era uma quantidade razoável de tempo para potencialmente ter que esperar a porta ser destravada, e é para lá que estamos indo, afinal, com todo esse projeto.

Eu devo acrescentar, eu não sei sobre o consumo de energia de fazer isso, mas eu diria que pingar um dispositivo com mais freqüência necessariamente consumiria mais energia. Eu não vi nenhum problema óbvio de desempenho nos testes, mas se a vida da bateria é uma preocupação séria para você, considere ter um comutador dentro do seu escritório que ativa e desativa o loop de varredura, então quando você estiver dentro, você pode pausar o bloqueio sistema, reative a varredura quando sair.

Parabéns, agora você tem um aplicativo Python que sabe quando está dentro do alcance, para que possamos começar a agir de acordo com isso.

Modos de board do GPIO

Antes de continuar, você precisa descobrir qual modo de placa você vai usar. Não há resposta certa ou errada, apenas afeta se você especifica o número de pinos literais ou o número de pinos do GPIO virtual.

O padrão é usar o número do pino literal ("modo de placa"), começando com o pino 1 no canto inferior esquerdo (se olhar para baixo no Pi com as portas USB à direita). O pino 2 está logo acima disso.

No entanto, se você tiver uma placa GPIO breakout (“cobbler”), as etiquetas que você tem são de um modo alternativo, chamado “BCM” (canal SOC Broadcom), e geralmente são escritas com GPIO ou P prefixando o número. Você não precisa estritamente de uma fuga do GPIO - isso apenas facilita as coisas. Se você não tem um quadro de discussão e não quer comprar um, use este diagrama:

Diagrama de pinagem do modelo Raspberry Pi A e B da RaspberryPi.org
Diagrama de pinagem do modelo Raspberry Pi A e B da RaspberryPi.org

Observe que o modelo original B revisão 1, revisão 2 e o modelo B + e Pi2 têm pinagens diferentes. Consulte esta questão do StackExchange para obter um diagrama correto para sua placa.

Neste código de projeto, estou usando o sistema de numeração BCM GPIO que corresponde à placa de breakout Adafruit que possuo. Pequenas modificações são necessárias se você quiser usar o modo pin literal.

Fio em um relé

Prenda a placa de fuga, assegurando que o fio dos pinos 1 e 2 (os que estão no canto do seu Pi) se prendem a 3v3 e 5V0 na fuga. Você pode querer retirar um testador de voltagem para verificar isso.

rpi trava inteligente - gpio

Antes de prosseguir, verifique se alguém usou seu revezamento em particular com o Raspberry Pi (ou encontre um que você saiba que funciona). Alguns podem exigir 5V para ativar - mas o RPi só pode fornecer 3, 3V nos pinos de saída do GPIO. Por acaso, o que eu estou usando está feliz com 3.3V, então eu não precisei de nenhum circuito adicional, apenas o 5V0 para o VCC, o GND para o GND, e o GPIO pino 23 para a primeira entrada do relé .

Meu tutorial anterior sobre GPIO Introdução ao GPIO em um Raspberry Pi Introdução ao GPIO em um Raspberry Pi Se você acha que o Arduino é legal, espere até chegar a um Raspberry Pi - essas coisas são incríveis. Além de ser um computador totalmente funcional, eles também têm um ... Read More mostrou como conectar um circuito de transistor para aumentar a escala de 3, 3V para 5V se necessário (na verdade, usei a mesma placa de esse tutorial, mas acontece que eu não precisei de 5V depois de tudo).

Não há necessidade de conectar o eletroímã, pois você poderá ouvir um clique audível quando o relé for acionado.

Em seguida, vamos pegar algum código para interagir com as portas GPIO.

Vamos começar testando fora do Python para confirmar se tudo está funcionando nas próprias portas. Instale o wiringPi, que fornece algumas ferramentas de linha de comando úteis.

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

Uma vez instalado, configure o pino GPIO 23 para ser uma saída.

 gpio -g mode 23 out 

Agora, faça uma varredura rápida de todas as portas para confirmar

 gpio -g readall 

Você terá algo semelhante a isso, embora o seu possa ser maior em um modelo B + ou Pi2, pois ele tem mais pinos GPIO:

gpio readall

Isso pode ser um pouco confuso no início, mas a tabela é dividida ao meio e a ordem das colunas é invertida em cada lado. Na extrema esquerda e na extrema direita está o número do PIN do BCM. Como estamos usando 23, você deve ver o modo listado agora como OUT. Este é um pequeno comando útil apenas para ter uma boa idéia do que está acontecendo com todos os seus pinos a qualquer momento.

Para escrever o pino alto ou baixo, basta usar

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

Espero que, se você tiver o relé conectado corretamente, você ouvirá clicando e desligando. Se não, não continue até que você tenha descoberto a fiação. Lembre-se, você pode precisar de uma voltagem mais alta para ativar o relé.

Depois de confirmar que o relé e o GPIO estão funcionando, adicione os módulos do Python para o GPIO.

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

Agora vamos modificar nosso aplicativo Python para ativar ou desativar o relé quando o telefone for detectado. Você encontrará o código final nesta essência. Copie o arquivo detect.py existente para um novo lock.py e adicione os seguintes comandos de importação e configuração:

 import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) RELAY = 23 GPIO.setup(RELAY, GPIO.OUT) 

Na instrução IF, adicione um comando para ativar ou desativar o relé. Note que o seu relé pode funcionar com um sinal baixo ou alto, então ajuste de acordo após o teste.

 GPIO.output(RELAY, 1) 

Para executar esta nova versão, prefixar o comando com sudo - o acesso ao GPIO requer privilégios de root.

Hooking It Up

Depois de confirmar que o relé está disparando com o seu sensor de proximidade, adicione a sua trava eletromagnética. No lado do relé, traga o positivo de 12V para o terminal identificado como COM (comum), então a entrada de energia positiva do eletroímã para o terminal NO ( normalmente aberto, isto é, normalmente não está conectado ao terminal comum, mas será quando você ativar o relé ).

Junte o terra da fonte de alimentação e do eletroímã no terminal GND.

rpi trava inteligente - relé

Consulte as instruções de montagem fornecidas com o seu cadeado; a porta precisa ser bem grossa, e é mais fácil se ela se abrir do lado que você quer que a trava esteja. O meu era o oposto, então eu preciso do suporte de montagem em forma de L, bem como um pedaço adicional de madeira para aumentar a espessura da porta.

bloqueio inteligente rpi - eletroímã

Melhorias

Esta foi uma prova de conceito para eu construir com outros projetos, e realmente apenas para manter os olhos curiosos fora do meu escritório quando eu não estou lá - não é projetado para ser um sistema de segurança infalível. Para isso, você precisaria de uma bateria de reserva para manter a energia fluindo no caso de ser cortada.

É claro, se alguém invadir sua casa e se der ao trabalho de cortar seu poder, provavelmente você terá a maior questão de ser um psicopata que está disposto a matá-lo, em vez de um ladrão casual. Você também gostaria de uma fechadura física, além de uma eletrônica, e uma vara realmente grande.

Claro, esta técnica de detecção de proximidade usando Bluetooth não se limita apenas a uma fechadura automática - você também pode usá-la para acionar a abertura da porta da garagem quando chegar em casa ou ligar o home cinema antes de entrar pela porta.

Qual recurso você acha que devo adicionar em seguida? Você teve algum problema em construir isso? Deixe-me saber nos comentários e eu farei o meu melhor para ajudar!

In this article