Guida di automazione domestica con Raspberry Pi e Arduino

Guida di automazione domestica con Raspberry Pi e Arduino / Casa intelligente

Abbiamo già parlato dei meriti relativi di Arduino e Raspberry Pi - ognuno di loro ha i suoi punti di forza. Non devono necessariamente essere né una scelta né una scelta: combinali per ottenere il meglio da entrambi i mondi. La domotica è il candidato perfetto per questo. Il mercato domotico è invaso da costosi sistemi di consumo, incompatibili tra loro e costosi da installare. Se hai un Raspberry Pi Raspberry Pi: The Unofficial Tutorial Raspberry Pi: The Unofficial Tutorial Se sei un attuale proprietario di Pi che vuole saperne di più o un potenziale proprietario di questo dispositivo di dimensioni carta di credito, questa non è una guida voglio perdere. Leggi di più e un Arduino, puoi sostanzialmente ottenere la stessa cosa ad una frazione del prezzo, assumendo che tu sia disposto a dedicare tempo e sforzi.

Aggiornamento: da quando questo articolo è stato scritto, ho scoperto OpenHAB, una piattaforma domotica gratuita e open source che funziona su Raspberry Pi e può essere integrata con una vasta gamma di kit di case intelligenti e Arduino. Guarda il video qui sotto per un'anteprima, poi vai al nostro Getting Started con OpenHAB su Raspberry Pi Introduzione a OpenHAB Home Automation su Raspberry Pi Introduzione a OpenHAB Home Automation su Raspberry Pi OpenHAB è una domotica open source matura piattaforma che funziona su una varietà di hardware ed è indipendente dal protocollo, il che significa che può connettersi a quasi tutti gli hardware di automazione domestica sul mercato oggi. Leggi di più guida per saperne di più.

Heimcontrol.js è un'app Node.js creata per funzionare su Raspberry Pi. Combinato con un Arduino e alcune prese remote pronte all'uso, rende facile il controllo degli apparecchi CA. È possibile aggiungere sensori di temperatura e persino controllare la TV, ma terremo le cose semplici oggi ed estendere il progetto in un tutorial successivo.

Ecco una ripartizione del progetto:

  • Il Raspberry Pi agirà come il cervello e il gateway delle operazioni: eseguirà un'app Nodo, legata a un database Mongo e servirà l'interfaccia front-end a qualsiasi browser Web.
  • Un Arduino, alimentato dal Pi, si interfaccia tra l'elettronica e gli interruttori di alimentazione del controllo radio, per ora.

Per fare questo, avrai bisogno di:

  • Arduino e un Raspberry Pi
  • Alcune prese e controller controllati a distanza (li ho usati)
  • Hub USB alimentato

Prima di iniziare, ecco un video dimostrativo del creatore del progetto stesso.

Inizia Afresh

Utilizzeremo Raspian per questo progetto 11 Sistemi operativi eseguibili su Raspberry Pi 11 Sistemi operativi eseguibili su Raspberry Pi L'hardware di Raspberry Pi è solo un lato della medaglia. Ecco alcuni diversi sistemi operativi Raspberry Pi che è possibile installare. Per saperne di più, ti suggerisco caldamente di iniziare da una nuova installazione se hai precedentemente eseguito altri hack e simili. Scarica l'ultima immagine Raspian, copialo sulla tua scheda SD, e assicurati di espandere il filesystem e abilitare SSH. Il resto di questa guida assumerà che tu l'abbia fatto e che stia effettuando una connessione su SSH utilizzando l'utente predefinito.

Se non lo hai fatto prima, questo video spiega come preparare la tua scheda SD in OS X:

E questo per gli utenti di Windows:

Preparazione

Il processo di installazione è abbastanza laborioso e derivato dalle istruzioni qui. Sfortunatamente, questi erano obsoleti o non progettati per Raspian, quindi li ho regolati molto sotto. I seguenti codici possono essere incollati principalmente in blocchi: non è necessario incollarli uno per uno. Dato che stiamo compilando alcune cose sul Pi stesso, sappi che questo intero processo richiederà molto tempo. Direi di farti una tazza di tè - ma quando dico a “a lungo”, Intendo la parte migliore di un giorno, quindi 178 tazze sarebbero più appropriate.

Tutti i comandi devono essere digitati nel terminale e potrebbe essere necessario premere Invio in alcuni punti. Questi primi comandi aggiorneranno il sistema e installeranno i prerequisiti:

sudo apt-get update sudo apt-get upgrade sudo apt-get install git-core git scons build-essential scons libpcre ++ - dev xulrunner-dev libboost-dev libboost-programma-opzioni-dev libboost-thread-dev libboost-filesystem-dev 

Quindi dobbiamo installare il nodo:

sudo mkdir / opt / node wget http://nodejs.org/dist/v0.10.2/node-v0.10.2-linux-arm-pi.tar.gz tar xvzf node-v0.10.2-linux-arm-pi. tar.gz sudo cp -r nodo-v0.10.2-linux-arm-pi / * / opt / nodo sudo ln -s / opt / nodo / bin / nodo / usr / local / bin / nodo sudo ln -s / opt / node / bin / npm / usr / local / bin / npm 

Aggiungi una variabile PATH al tuo profilo in modo che il sistema operativo sappia dove si trova il nodo. Utilizza l'editor di testo nano come segue:

sudo nano / etc / profile 

Individua la linea che dice esporta PERCORSO e sostituirlo con:

NODE_JS_HOME = "/ opt / node" PATH = "$ PATH: $ NODE_JS_HOME / bin" esporta PERCORSO 

Premi Ctrl-X per uscire e Y per salvare.

Potrebbe essere necessario disconnettersi e inserirli nuovamente affinché le modifiche al percorso abbiano effetto, ma è possibile verificare con il comando:

quale nodo 

Se non si ottiene alcun output che punta al binario del nodo, qualcosa è andato storto.

Mongo

Il prossimo lavoro è installare Mongo. Mongo è un database No-SQL basato su documenti sempre più utilizzato dalle app Web. Sfortunatamente, ci vorrà un'eternità per installarlo, visto che dobbiamo compilarlo. Durante l'esecuzione dei seguenti comandi otterrai molti errori come:

standard input: 13085: Avvertenza: l'uso di swp b è deprecato per questa architettura 

Non preoccuparti di questi. Quindi, esegui questi comandi per installare Mongo:

git clone git: //github.com/RickP/mongopi.git cd mongopi scons sudo scons --prefix = / opt / mongo install scons -c 

Al termine, abbiamo bisogno di un po 'più di installazione prima di risolvere i problemi di autorizzazione e assicurarsi che sia in esecuzione all'avvio.

sudo useradd mongodb sudo mkdir / data / dbb sudo chown $ USER / data / db cd /etc/init.d sudo wget -O mongodb https://gist.github.com/ni-c/fd4df404bda6e87fb718/raw/36d45897cd943fbd6d071c096eb4b71b37d0fcbb/mongodb .sh sudo chmod + x mongodb sudo update-rc.d mongodb defaults mongod

Quest'ultimo comando avvierà il server Mongo e sarà necessario aprire un nuovo Terminale per continuare con gli altri comandi. Non sono del tutto sicuro di questo passaggio, quindi se qualcuno può correggere questo nei commenti su come avviare automaticamente Mongod all'avvio, sarebbe molto apprezzato. Per ora funziona, solo non elegantemente.

sudo shutdown -r ora

Infine, è il momento di installare l'applicazione Nodo Heimcontrol.js.

cd ~ pi git clone git: //github.com/ni-c/heimcontrol.js.git cd heimcontrol.js npm installa 

Puoi iniziare a eseguire l'app digitando

 nodo heimcontrol.js 

A questo punto, dovresti essere in grado di accedere all'interfaccia di controllo con http: // localhost: 8080 dal Pi, o sostituire localhost con l'indirizzo IP se si accede da un altro computer (e si può anche configurare il port forwarding Che cos'è il port forwarding e come può aiutarmi? [MakeUseOf Explains] Cos'è il port forwarding e Come può aiutarmi? [MakeUseOf Explains] Piangi un po 'dentro quando qualcuno ti dice che c'è un problema di port forwarding ed è per questo che la tua nuova app non funzionerà? La tua Xbox non ti permetterà di giocare, i tuoi download torrent rifiuta ... Leggi altro per accedervi da qualsiasi parte del mondo), quindi ti incoraggio a curiosare e verificare che tutto funzioni con il database prima di collegare l'Arduino.

Hardware

Alla fine mi piacerebbe un relè cablato, ma per ora userò l'opzione più sicura degli interruttori radiocomandati.

Ho usato alcuni set di £ 20 ragionevolmente convenienti da Maplin che sono dotati di 3 socket, e ho aperto il telecomando in modo da poter interfacciare direttamente con il chip 433 MHz all'interno. Ho trovato le istruzioni per questo qui.

È inoltre possibile acquistare singoli trasmettitori 433 MHz pronti per l'uso su eBay o da fornitori di elettronica per hobby. Tutto ciò di cui hai bisogno è connettere il VCC a 5 V su Arduino, i GND e un singolo pin di controllo - ricorda quale hai usato. (Schema di Willi Thiel)

Il plugin funziona inviando “codici tristate”, ma questi variano a seconda del produttore. Fare riferimento alla documentazione RCSwitch per trovare i codici esatti. Questa guida wiki può essere d'aiuto.

La comunicazione con Arduino viene eseguita utilizzando una libreria Node chiamata duino. Arresta l'app Heimcontrol se è in esecuzione e installa il bridge Arduino usando il seguente comando.

npm installa duino 

L'Arduino deve avere questo codice caricato - ti consiglio di copiare e incollare per installare questo da un altro computer. È essenzialmente un programma di ascolto che risponde ai comandi seriali del Pi, ma non c'è niente che impedisca di estenderlo con le proprie funzionalità.

Con l'app Web avviata, vai su impostazioni menu> Arduino.

Da lì è possibile aggiungere un nuovo elemento, scegliendo il metodo RCSwitch, il pin del trasmettitore e il codice di indirizzo di Tristate. Ricorda di salvare, quindi torna alla schermata principale del tuo nuovo pulsante.

bugs:

Dopo molte ore di debug del codice, ho trovato che i numeri di pin di una sola cifra non funzionavano - assicurati che il tuo trasmettitore sia posizionato sul pin 10 per essere sicuro.

Ho anche scoperto che il plugin Arduino era hardcoded con bit finali non corretti per i codici tristate necessari ai miei ricevitori. Prima una piccola spiegazione: i codici tristate consistono in 3 byte di informazioni. Il primo ci determina il numero di rete (1-4), e il secondo fornisce l'indirizzo del ricetrasmettitore (sempre, 1-4, producendo un massimo di 16 prese indirizzabili). Il byte finale consiste di due bit di padding, più 2 bit per on / off. Sfortunatamente, il byte finale è codificato nel plug-in Arduino e nel mio caso il codice on / off non era corretto.

Ho dovuto modificare manualmente il plugins / Arduino / index.js usare i codici corretti. Se stai usando le stesse prese remote del mio controllo, cambia le linee 80 in poi per:

// Invia codice RC if (item.value) return that.pins [item.pin] .triState (item.code + "FFFF"); // cambia da FF0F else return that.pins [item.pin] .triState (item.code + "FFF0"); // cambia da FF00

Ecco un video dimostrativo di tutto ciò che funziona:

Ho intenzione di lasciarlo qui a questo punto, ma sono supportate anche letture del sensore e telecomandi IR. Probabilmente li rivisiterò in un secondo momento con ulteriori miglioramenti. Se tutto questo è stato un po 'troppo complesso per te, forse dai un'occhiata a questi progetti Arduino per principianti 15 Grandi progetti Arduino per principianti 15 Grandi progetti Arduino per principianti Interessato ad Arduino ma non sapendo da dove cominciare? Ecco alcuni dei nostri migliori progetti Arduino per principianti per iniziare! Leggi di più .

.