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

Creeremo un Raspberry Pi con un adattatore Bluetooth da tenere sotto controllo quando lo smartphone è fuori portata e agganci un relè in azione per bloccare la porta.

Creeremo un Raspberry Pi con un adattatore Bluetooth da tenere sotto controllo quando lo smartphone è fuori portata e agganci un relè in azione per bloccare la porta.
Annuncio pubblicitario

Pssst - vuoi una protezione ad alta tecnologia per il tuo ufficio a casa, o una serratura segreta 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 ("cobbler") 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 scheda 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 a sconvolgere lo screening quotidiano ... Ulteriori informazioni).

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 è rilevabile. 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:

bluetooth identificato

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

 nano detect.py 

Incolla questo codice di esempio:

 #!/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 regola la seguente riga con l'indirizzo del tuo dispositivo Bluetooth:

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

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

utente presente detectpy

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à). È possibile ridurre o aumentare il tempo tra una scansione e l'altra, ma ho ritenuto che 10 secondi fossero una ragionevole quantità di tempo per aspettare potenzialmente che la porta si sblocchi, dopodiché è il punto in cui andremo con tutto questo progetto.

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"), iniziando 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 una scheda di breakout GPIO ("cobbler"), le etichette disponibili provengono da una modalità alternativa, chiamata "BCM" (canale SOC Broadcom), e sono comunemente scritte 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
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 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.

rpi smart lock - gpio

Prima di procedere, controlla se qualcun altro ha usato 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 5V0 a VCC, GND a GND e il pin 23 GPIO per il primo ingresso a 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:

gpio readall

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 install 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 il detect.py esistente in un nuovo lock.py e aggiungi i seguenti comandi di importazione e configurazione:

 import RPi.GPIO as 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(RELAY, 1) 

Per eseguire questa nuova versione, aggiungere il prefisso al comando con 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 l'ingresso di alimentazione positivo dall'elettromagnete al terminale NO ( normalmente aperto, cioè questo normalmente non è collegato al terminale comune ma sarà quando si attivare il relè ).

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

rpi smart lock - relay

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.

rpi smart lock - elettromagnete

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 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: puoi anche usarla per far scattare la porta del garage quando torni a casa o accendere il tuo home cinema prima di entrare.

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!

In this article