Crea una porta per ufficio con chiusura automatica con sensore di prossimità per smartphone

Crea una porta per ufficio con chiusura automatica con sensore di prossimità per smartphone / Casa intelligente

Pssst - vuoi una protezione high tech per il tuo ufficio a casa o un segreto per il tuo “laboratorio” (ok, mi hai preso, è in realtà un dungeon / sala giochi) che i bambini non saranno in grado di capire? Ti abbiamo coperto. Costruiamo un lucchetto intelligente fai-da-te che rileva automaticamente quando sei lì e blocca quando non lo sei.

Come funziona? NESSUNO SA! O più specificamente, Bluetooth.

Il concetto

Il tuo smartphone è un dispositivo potente che rivela costantemente informazioni su se stesso al mondo esterno; un modo in cui lo fa è Bluetooth.

In modalità di rilevamento, trasmette un numero di identificazione univoco, ma anche quando non si concede specificamente la possibilità di essere scoperto, tutto ciò che conosce quell'indirizzo può provare a eseguire il ping. Se si sente una risposta, ciò indicherebbe se è nel raggio di azione o meno.

Creeremo un Raspberry Pi con un adattatore Bluetooth per essere sempre alla ricerca di quando lo smartphone è fuori portata, e quando lo sarà, il relè entrerà in azione e bloccherà la porta.

Avrai bisogno

  • Raspberry Pi - qualsiasi modello dovrebbe funzionare, dal momento che non si tratta di un compito intensivo della CPU, ma sto utilizzando un modello più vecchio B e le piedinature GPIO potrebbero essere leggermente diverse sul modello. Vedi la sezione sulla scheda qui sotto. Avrai anche bisogno di alcune nozioni di base come una connessione Ethernet cablata o Wi-Fi configurato Configurazione di reti wireless sul tuo Raspberry Pi Configurazione di reti wireless sul tuo Raspberry Pi Praticamente ogni progetto Raspberry Pi richiederà una connessione di rete, e si può ottenere una notevole flessibilità ignorando la porta Ethernet a favore di un dongle USB wireless. Leggi di più ; oltre a scheda SD e cavo di alimentazione micro USB.
  • Adattatore USB Bluetooth. Adafruit vende un modulo Bluetooth 4.0 BLE confermato funzionante (cos'è Bluetooth 4.0? Come Bluetooth 4.0 sta modellando il futuro della connettività mobile Come Bluetooth 4.0 sta plasmando il futuro della connettività mobile Bluetooth è la stella dimenticata nella scheda delle specifiche del dispositivo. dovresti testare quelli che hai già in giro prima di acquistarne uno nuovo solo per questo progetto. Ho trovato un vecchio adattatore mini Bluetooth standard acquistato in Giappone che sembra funzionare bene. Non ci interessa la velocità di trasferimento o l'affidabilità della connessione, poiché tutto ciò che stiamo facendo è inviare una rapida stretta di mano per vedere se un dispositivo è vivo e vegeto.
  • Scheda breakout GPIO (“ciabattino”) e cavi jumper. Puoi lavorare direttamente dai pin sul Pi, ma è molto più semplice se hai etichette su ogni spillo, e comunque sono solo $ 6.
  • Scheda relè. Hai una vasta gamma di scelte qui, e tutto funzionerà se è progettato per l'uso con un microcontrollore e può guidare almeno 12 volt a 5 ampere. Ho usato una tavola generica a 4 canali simile a questa per circa $ 5, ma assumerò che tu sappia come lavorare la tua.
  • Serratura elettromagnete 12 / 24V, anche se dovrebbe funzionare anche un blocco elettromagnetico. Quello che ho acquistato ha una forza di tenuta di 180 kg e viene fornito completo di piastre di montaggio e istruzioni, per circa $ 35.
  • Alimentatore 12 / 24V. Il blocco del magnete deve avere un'alimentazione separata - qualunque cosa tu faccia, non provare a prendere energia dal Pi.
  • App Lock.py Python, ma lo scriveremo mentre procediamo.

Lavorare con Bluetooth

Il Bluetooth è centrale in questo progetto, quindi iniziamo installando un supporto Bluetooth e testando il nostro adattatore. Puoi farlo direttamente dal Pi o SSH in remoto (come configurare Windows in SSH in te Pi Configurare il tuo Raspberry Pi per l'uso senza testa con SSH Configurare il tuo Raspberry Pi per l'uso senza testa con SSH Il Raspberry Pi può accettare Comandi SSH quando connesso a una rete locale (tramite Ethernet o Wi-Fi), che consente di configurarlo facilmente.I vantaggi di SSH vanno oltre sconvolgere lo screening quotidiano ... Per saperne di più).

sudo apt-get install bluez python-bluez

Inserisci il dongle se non lo hai già fatto e diamo un'occhiata a cosa sta segnalando.

hcitool dev

Se hai qualcosa in elenco nell'output, sei a posto. Successivamente utilizzeremo uno script Python per eseguire il polling per i dispositivi Bluetooth nelle vicinanze e acquisire l'indirizzo univoco del dispositivo. Abbiamo solo bisogno di farlo una volta per ogni dispositivo.

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

Se vedi “0 dispositivi trovati”, non hai un dongle Bluetooth USB compatibile o lo smartphone non è individuabile. Non disperare però: ho scoperto che dovevo effettivamente aprire la pagina delle impostazioni Bluetooth sul mio iPhone per lanciarlo in modalità di rilevamento, poi è successo:

Bene, ora creiamo la prima fase del nostro software che esegue il rilevamento. Crea una app Python chiamata detect.py, e aprilo con Nano.

nano detect.py

Incolla questo codice di esempio:

#! / usr / bin / python import bluetooth import time while True: stampa "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 (risultato! = Nessuno): stampa "Utente presente" altro: stampa "Utente fuori intervallo" time.sleep ( 10) 

e regola la seguente riga con l'indirizzo del tuo dispositivo Bluetooth:

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

stampa CTRL-X e Y chiudere e salvare. Esegui lo stesso codice e vedi qualcosa del genere:

Il codice dovrebbe essere molto semplice da capire anche se non hai mai toccato Python: esegue la scansione di un particolare dispositivo Bluetooth ogni 10 secondi e stampa un messaggio diverso a seconda che sia stato trovato o meno. Attiva / disattiva il Bluetooth sul tuo telefono per simulare lo spostamento dentro e fuori dal raggio d'azione (probabilmente circa 4m nella realtà). Puoi diminuire o aumentare il tempo tra una scansione e l'altra, ma ho ritenuto che 10 secondi fossero una quantità ragionevole di tempo per aspettare potenzialmente che la porta si sblocchi, dopodiché stiamo andando con tutto il progetto dopo tutto.

Dovrei aggiungere, non so riguardo al consumo di energia, ma suppongo che il ping di un dispositivo più spesso consumerebbe necessariamente più potenza. Non ho riscontrato evidenti problemi di prestazioni nei test, ma se la durata della batteria è un problema serio per te, considera di avere un interruttore all'interno del tuo ufficio che attiva e disattiva il ciclo di scansione, quindi una volta dentro, puoi mettere in pausa il blocco sistema, quindi riattivare la scansione quando esci.

Congratulazioni, ora hai un'applicazione Python che sa quando sei a portata di mano, quindi possiamo iniziare ad agire su questo.

Modalità scheda GPIO

Prima di continuare, è necessario capire quale modalità di scheda si intende utilizzare. Non c'è una risposta giusta o sbagliata, influisce solo se si specifica il numero pin letterale o il numero pin virtuale GPIO.

L'impostazione predefinita è utilizzare il numero pin letterale (“modalità scheda”), a partire dal pin 1 in basso a sinistra (se si guarda verso il Pi con le porte USB sulla destra). Il pin 2 è appena sopra.

Tuttavia, se si dispone di un breakout GPIO (“ciabattino”), le etichette che hai sono di una modalità alternativa, chiamate “BCM” (Canale SOC Broadcom), e sono comunemente scritti con GPIO o P che prefissano il numero. Non è strettamente necessario un breakout GPIO: semplifica le cose. Se non si dispone di una scheda breakout e non si desidera acquistarne una, utilizzare questo diagramma:

Raspberry Pi modello A e B schema di pinout da RaspberryPi.org

Si noti che il modello originale B revisione 1, revisione 2 e il modello B + e Pi2 hanno tutti pinout diversi. Fai riferimento a questa domanda StackExchange per un diagramma corretto per la tua scheda.

In questo codice di progetto, sto usando il sistema di numerazione GPIO BCM che corrisponde alla scheda breakout di Adafruit che ho. Modifiche minori sono necessarie se si desidera utilizzare la modalità pin letterale.

Collegare un relè

Attacca la scheda di sblocco, assicurandoti che il cavo dai pin 1 e 2 (quelli nell'angolo del tuo Pi) si attacchi a 3v3 e 5V0 sul breakout. Potresti voler estrarre un tester di tensione per verificarlo.

Prima di procedere, controlla se qualcun altro ha utilizzato il tuo particolare relay con il Raspberry Pi (o prima trovane uno che tu sappia che funziona). Alcuni potrebbero richiedere 5 V per attivarsi, ma il RPi può fornire solo 3,3 V sui pin di uscita GPIO. Per caso, quello che sto usando è felice con 3.3V, quindi non ho bisogno di alcun circuito aggiuntivo, solo il Da 5V0 a VCC, GND a GND, e Pin 23 GPIO per il primo ingresso relè.

Il mio precedente tutorial su GPIO Guida introduttiva a GPIO su un Raspberry Pi Guida introduttiva a GPIO su un Raspberry Pi Se pensate che l'Arduino sia bello, aspettate di mettere le mani su un Raspberry Pi - queste cose sono incredibili. Oltre ad essere un computer perfettamente funzionante, hanno anche un ... Leggi di più ha mostrato come cablare un circuito a transistor per scalare fino a 3,3 V a 5 V completi, se necessario (in realtà, ho usato la stessa scheda relè per quel tutorial , ma risulta che dopo tutto non avevo bisogno di 5V).

Non è necessario cablare ancora l'elettromagnete, poiché sarà possibile udire un clic udibile quando il relè scatta.

Quindi, prendiamo del codice per interagire con le porte GPIO.

Inizieremo testando al di fuori di Python per confermare che tutto funzioni sulle porte stesse. Installa wiringPi, che ti dà alcuni utili strumenti da riga di comando.

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

Una volta installato, configurare il pin 23 GPIO come output.

gpio -g mode 23 out

Ora, fai una scansione veloce di tutte le porte per confermare

gpio -g readall

Avrai qualcosa di simile a questo, anche se il tuo potrebbe essere più lungo su un modello B + o Pi2 poiché ha più pin GPIO:

Questo può essere un po 'confuso all'inizio, ma la tabella è divisa in due e l'ordine delle colonne è invertito su ciascun lato. All'estrema sinistra e all'estrema destra c'è il numero pin BCM. Dato che stiamo usando 23, dovresti vedere la modalità elencata ora come OUT. Questo è un piccolo comando utile solo per avere una buona idea di cosa sta succedendo con tutti i tuoi pin in qualsiasi momento.

Per scrivere il pin alto o basso, basta usare

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

Si spera che, se il relè è stato cablato correttamente, lo sentirete fare clic su on e off. In caso contrario, non continuare fino a quando non hai capito il cablaggio. Ricorda, potresti aver bisogno di una tensione più alta per attivare il relè.

Una volta confermato il relay e GPIO funziona, aggiungi i moduli Python per GPIO.

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

Ora modifichiamo la nostra app Python per attivare o disattivare il relay quando viene rilevato il telefono. Troverai il codice finale in questo Gist. Copia l'esistente detect.py a un nuovo lock.py, e aggiungi i seguenti comandi di importazione e configurazione:

importare RPi.GPIO come GPIO GPIO.setmode (GPIO.BCM) RELAY = 23 GPIO.setup (RELAY, GPIO.OUT)

Nell'istruzione IF, aggiungere un comando per attivare o disattivare il relè. Nota che il tuo relay potrebbe funzionare con un segnale basso o alto, quindi regolare di conseguenza dopo il test.

GPIO.output (RELÈ, 1)

Per eseguire questa nuova versione, aggiungere il prefisso al comando sudo - l'accesso a GPIO richiede i privilegi di root.

Agganciarlo

Una volta confermato che il relè sta funzionando con il sensore di prossimità, aggiungi il blocco dell'elettromagnete. Sul lato relè, portare il positivo 12V nel terminale etichettato COM (comune), quindi la potenza positiva in ingresso dall'elettromagnete al terminale NO (normalmente aperto, vale a dire. questo normalmente non è collegato al terminale comune ma sarà quando si attiva il relè).

Unisciti a terra dall'alimentazione e dall'elettromagnete sul terminale GND.

Fare riferimento alle istruzioni di montaggio fornite con il lucchetto; la porta deve essere abbastanza spessa, ed è più facile se si apre dal lato in cui si desidera che la serratura sia accesa. Il mio era il contrario, quindi ho bisogno della staffa di montaggio a forma di L e di un altro pezzo di legno per aumentare lo spessore della porta.

miglioramenti

Questa è stata una dimostrazione di concetto per me da sviluppare con altri progetti, e in realtà solo per tenere gli sguardi indiscreti fuori dal mio ufficio quando non ci sono - non è progettato per essere un sistema di sicurezza infallibile. Per questo, ti serve una batteria di riserva per mantenere la potenza in movimento in caso di taglio.

Certamente, se qualcuno si rompe in casa tua e si prende la briga di tagliare il tuo potere, probabilmente hai il problema più grande di loro di essere uno psicopatico che è fuori per ucciderti, piuttosto che un ladro casuale. Avresti anche bisogno di un lucchetto a catenaccio fisico in aggiunta a quello elettronico, e un bastone davvero grande.

Naturalmente, questa tecnica di rilevamento della prossimità tramite Bluetooth non si limita solo a una serratura automatica: potresti anche usarla per far scattare la porta del garage quando torni a casa o accendere il tuo home cinema prima di entrare nella porta.

Quale funzione pensi che dovrei aggiungere in seguito? Hai avuto problemi a costruire questo? Fatemi sapere nei commenti e farò del mio meglio per aiutare!

Scopri di più su: Home Security, Smart Locks.