Costruire una rete di sensori wireless nella tua casa

Questo tutorial ti insegnerà come creare una rete di moduli di sensori wireless convenienti. Molti dei moduli wireless già pronti possono essere troppo costosi per l'uso in più unità sensore. Mentre i moduli Wi-Fi e Zigbee sono popolari e facili da usare, il loro costo può rendere impraticabile il loro uso in una serie di sensori. Ci sono, tuttavia, moduli RF a basso costo senza tutte le costose funzionalità che funzioneranno perfettamente per questi scopi. La piattaforma Arduino può utilizzare moduli radio di fascia bassa per comunicare facilmente e in modo affidabile.  

Una volta assemblato l'hardware, sfrutterai la piattaforma Raspberry Pi per inviare i dati al servizio Xively di Internet of Things dove puoi tracciare i valori nel tempo e attivare le condizioni di soglia.

Raccogli i componenti e gli strumenti

Questo progetto includerà tre parti, due unità trasmittenti e un'unità ricevente. I trasmettitori sono composti da una scheda Arduino, un sensore e un trasmettitore RF. L'unità ricevente è composta da una scheda Arduino, un ricevitore RF, un convertitore di livello logico e un Raspberry Pi. 

Esiste un'ampia gamma di schede compatibili Arduino che possono essere utilizzate per questo progetto. Il requisito minimo per la scheda per questo progetto è di due pin GPIO digitali e un pin analogico. Seleziona una scheda compatibile con Arduino che soddisfi le esigenze di costo e semplicità di questo progetto.  

In questo tutorial ho usato un set di schede Arduino Nano che si adattano bene a una breadboard e sono semplici da programmare, tuttavia, le versioni 5V di Arduino Pro Mini o Trinket funzioneranno bene e ad un prezzo molto più basso. Questi tuttavia richiedono un po 'più di esperienza da programmare e utilizzare. Scegliere saggiamente.


Ricevitore 

  • Raspberry Pi-Model B con alimentatore, custodia e scheda SD: assicurati che i pin GPIO siano accessibili con la custodia che scegli
  • Adattatore Wi-Fi compatibile Pi
  • Arduino
  • Cavi ponticello per tagliere
  • Cavi ponticello maschio-femmina
  • Convertitore di livello logico
  • Ricevitore RF 434 MHz
  • Mezza tagliere

Trasmettitori (due unità)

  • 2 x Arduino
  • 2 sensori di temperatura / umidità
  • Trasmettitore RF 2 x 434 MHz
  • 2 x mezza breadboard
  • 2 prese jack da 5,1 mm DC a prova di pane
  • Alimentatore 2 x 9 V con 2.1mm x 5
  • Cavi ponticello per tagliere

Utensili

  • PC / Mac con IDE di programmazione Arduino installato
  • Cavo USB per programmare schede Arduino
  • Tastiera e mouse USB. O combinato o con un hub in modo che entrambi possano essere utilizzati con una singola porta USB.
  • Il pacchetto sorgente associato a questo tutorial sulla workstation di programmazione

Assemblare i trasmettitori

I trasmettitori stessi sono circuiti relativamente semplici. Viene utilizzato un solo pin per recuperare le informazioni dal sensore di temperatura e umidità e un pin viene utilizzato per inviare tali dati al trasmettitore RF. Il diagramma della breadboard è mostrato sotto.

L'alimentatore 9V si collegherà al connettore del barilotto rendendo le guide inferiori 9V. Il regolatore di potenza in Arduino produrrà 5 V che è sicuro da usare per la radio e sensori, la barra di alimentazione superiore dello schema.

Il sensore è dotato di una resistenza da 10k ohm che collega il pin di dati all'alimentazione come resistenza di pull up mentre un altro cavo lo collega a GPIO D3.  

Fai attenzione a seguire la configurazione seguente e assicurati di ricontrollare la scheda tecnica del sensore e del modulo RF per accertarti che i componenti siano posizionati correttamente nella breadboard e che i pin di alimentazione, di messa a terra e di segnale siano collegati ai pin di destra. Il diagramma fritzing è incluso nel pacchetto sorgente per maggiori dettagli.

Diagramma del trasmettitore

L'antenna è una parte importante della scheda perché il modulo RF non ha un'antenna integrata. Ho usato un ponticello da 6 pollici femmina a maschio inserito nella breadboard e ha funzionato abbastanza bene da consentire la ricezione da tutte le parti della mia casa e un po 'fuori. Come notato nello schema, 6,5 pollici è ottimale per questa antenna se hai bisogno di un raggio aggiuntivo.

Una nota sull'uso della RF. Ci sono diverse leggi e regole sull'uso delle frequenze nei diversi paesi. Assicurati di essere in regola con queste regole prima di trasmettere. Detto questo, i segnali di questi moduli sono appena abbastanza potenti da passare al di fuori della vostra casa. In condizioni perfette, tuttavia, questi moduli possono trasmettere fino a 500 piedi.

Scarica librerie per componenti

Il trasmettitore utilizza due librerie che non sono in bundle con l'IDE Arduino. Scarica le librerie come descritto di seguito e non compresse nella directory dello schizzo in una sottodirectory denominata Librerie.

  • Scarica il VirtualWire pacchetto sorgente per questo tutorial e decomprimere il schizzo wirelesstransmitter cartella nel tuo Arduino schizzo cartella
  • Nel wirelesstransmitter cartella crea una cartella denominata biblioteche
  • Scarica l'ultima versione del codice VirtualWire, 1.23 al momento della stesura, dalla pagina del progetto
  • Estrai il VirtualWire cartella nel wirelesstransmitter / biblioteche / cartella in modo da avere un'altra sottocartella chiamata VirtualWire
  • Scarica la libreria di sensori DHT dalla sua pagina github di progetto
  • Estrarre anche la cartella DHT nella cartella Librerie. Ora dovresti avere le due cartelle della libreria richieste DHT e VirtualWire nel tuo wirelesstransmitter / Libraries cartella.

Programma la scheda Arduino

Questo tutorial presume che tu abbia una certa esperienza con Arduino e come programmarli usando l'IDE Arduino. Se non lo fai, ci sono ottime istruzioni sul sito ufficiale di Arduino.

  • Apri il wirelesstransmitter tracciare dall'archivio di origine nell'IDE di Arduino e salvare una copia localmente
  • Assicurarsi che l'Arduino NON sia collegato all'alimentazione tramite il connettore cilindrico
  • Collegare la scheda alla stazione di programmazione con un cavo USB appropriato
  • Imposta il tipo di scheda sulla scheda Arduino selezionata sotto Strumenti> Scheda menu
  • Impostare la porta seriale sulla porta rilevata quando si collega la scheda Arduino sotto il Strumenti> Porta menu
  • Assicurarsi che la definizione di MYID sia impostata su 1 e il TRANSPIN e DHTPIN sono impostati correttamente sui pin collegati rispettivamente al modulo trasmettitore RF e al sensore DHT. Se hai costruito la tua scheda per lo schema sopra questo dovrebbe essere già impostato. Vedere l'esempio di codice qui sotto.  
  • Assicurarsi che il UNITÀ è impostato correttamente per le tue preferenze Fahrenheit o Centigrado
#define MYID 1 // il numero ID di questa board. Cambia questo per ogni scheda che lampeggia. // L'ID verrà trasmesso con i dati in modo che tu possa sapere quale dispositivo sta trasmettendo #define TRANSPIN 3 // quale pin trasmettere su #define DHTPIN 4 // quale pin il DHT è collegato a #define UNIT 0 // 0 per Fahrenheit e 1 per Celsius

La definizione MYID è un ID numerico che il trasmettitore utilizza per identificarsi in modo univoco. Poiché si avranno più trasmettitori in posizioni diverse, è importante avere un ID univoco per ognuno. Questo numero verrà utilizzato di nuovo quando si imposta lo script del destinatario.

  • Verifica il codice premendo Controllo-R per garantire che le librerie siano incluse e compilate correttamente.
  • Spingere il codice alla lavagna facendo clic sul Caricare pulsante sulla barra degli strumenti. 
  • Apri il Monitor seriale finestre premendo Control-Shift-M

Il Monitor seriale la finestra ripristina l'Arduino quindi dovresti vedere una riga di codice sullo schermo che assomiglia a qualcosa del tipo:

Umidità: 44,00% Temperatura: 60,80 * F Invio messaggio: ID: 1: TS: 23143: TF: 60.79: RH: 44.00

Il messaggio è composto da Nome: Valore coppie che il ricevitore gestirà. Il trasmettitore leggerà e trasmetterà il suo segnale su un intervallo casuale lungo. I sensori non cambiano molto o frequentemente, quindi la trasmissione più di una volta al minuto non aggiunge alcun valore. Il tempo di attesa casuale è quello di consentire a più sensori di coesistere.  

Anche se c'è il raddoppio e il segnale di entrambi i trasmettitori è perso, l'intervallo casuale assicurerà che le loro prossime trasmissioni non si sovrappongano. Il seme casuale per questo intervallo è impostato da un analogRead su una porta analogica inutilizzata che restituisce valori casuali per garantire che non ci siano due trasmettitori sullo stesso schema.  

Il codice di esempio che genera l'output sopra è impostato per utilizzare Fahrenheit. Puoi vedere il TF: 60.79 identificatore nella stringa del messaggio che indica che il mio laboratorio è davvero solo un capello sotto i 61 gradi. Tuttavia l'umidità relativa RH: 44.00 è un comodo 44%. Si potrebbe dedurre dall'ambiente umido e fresco che il mio laboratorio è nel mio seminterrato. Uno potrebbe aver ragione.

I trasmettitori sono impostati per attendere da 2 a 5 minuti tra le trasmissioni di default. Se si desidera velocizzare questo per scopi di debug, modificare il file ritardo() il valore alla fine dello schizzo è più simile a 5000 (ms). Si consiglia vivamente di modificare questo aspetto e di caricare nuovamente il codice sui trasmettitori quando si è pronti per l'uso a tempo pieno.

  • Costruisci la seconda scheda del trasmettitore
  • Modificare lo schizzo del trasmettitore in modo che il myid define è impostato a 2 
  • Carica il codice sulla seconda scheda
  • Apri il Monitor seriale finestre premendo Control-Shift-M e verificare che l'uscita assomigli alla prima scheda trasmittente ad eccezione dell'inizio del messaggio trasmesso ID: 2

Costruisci la scheda Ricevitore

La ricevente sarà responsabile della ricezione del messaggio di trasmissione sul suo componente Ricevitore RF e dell'invio di quel messaggio tramite fili seriali al Raspberry Pi. La scheda Arduino viene utilizzata per ricevere il segnale per un paio di motivi molto importanti. Il codice VirtualWire utilizza la natura in tempo reale di Arduino per gestire la modulazione e la demodulazione del segnale.  

Ciò significa che l'unità ricevente deve funzionare alla stessa frequenza. Inoltre, c'è poco spazio per il jitter sul processore di ricezione, a cui il Raspberry Pi è incline, a causa del suo sistema operativo preemptive, non in tempo reale. Confrontando i costi di un Arduino Pro Mini più il modulo ricevitore RF con quello di un modulo Zigbee che poteva parlare direttamente con il Raspberry Pi ha rivelato che l'utilizzo di un Arduino esterno era ancora abbastanza economico.

Costruisci la scheda ricevente secondo lo schema di Fritzing in basso.

Diagramma del ricevitore

A questo punto NON collegare i cavi 5V e massa dal Pi alla breadboard. Tieni i cavi dei ponticelli a portata di mano, ma non vuoi alimentare l'Arduino sia dalla porta USB che dal Raspberry Pi.

Nota che il convertitore di livello logico nella lista dei materiali sopra non è esattamente uguale a quello nella libreria di Fritzing, ma i pin out sono ben etichettati, solo in posti diversi. Assicurarsi che i fili corretti siano collegati ai pin corretti sul convertitore di livello logico effettivo.  

Questo componente è necessario per convertire il segnale seriale Arduino 5V in un segnale seriale Raspberry Pi da 3,3V e non danneggiare il Pi. Guarda l'immagine qui sotto per ulteriore aiuto.

Cablaggio del convertitore di livello logico reale

Notare che i fili RX e TX attraversano il convertitore di livello logico in modo che il TX dall'Arduino entri nell'RX del Pi. I passi successivi riguardano la configurazione del Pi, tornerai a programmare l'Arduino in seguito.

Imposta il Raspberry Pi

Esistono diverse guide all'acquisto e all'installazione di un sistema operativo sul tuo Raspberry Pi. Installa il più recente sistema operativo Raspbian. I seguenti passaggi descrivono il collegamento delle periferiche al Pi e la configurazione.

Mancia: Se hai bisogno di saperne di più sul flashing di una scheda SD, per il tuo Raspberry Pi, fai riferimento ai nostri tutorial: Come Flash una scheda SD per Raspberry Pi e Come installare NOOBS su un Raspberry Pi con un Mac.

  • Inserire l'adattatore Wi-Fi USB nella porta USB superiore sul Pi
  • Collegare l'hub USB alla porta USB inferiore sul Pi
  • Collegare il mouse e la tastiera all'hub USB
  • Collega il monitor HDMI
  • Inserisci la scheda SD
  • Collegare l'alimentazione
  • Esegui la configurazione iniziale della configurazione lasciando l'opzione predefinita per l'avvio su un desktop grafico
  • Dopo il riavvio di Pi su un desktop, seguire queste istruzioni su come utilizzare lo strumento GUI per configurare la rete Wi-Fi.
  • Aprire una finestra di terminale facendo doppio clic sul LXterminal icona.
  • Esegui il comando sudo raspi-config
  • Seleziona il Abilita avvio su Desktop / Scratch> Console di testo console, che richiede l'accesso opzione
  • Seleziona il Opzioni avanzate> SSH per abilitare l'accesso alla riga di comando della rete
  • Selezionare finire e consentire al Pi di riavviarsi alla console di testo
  • Prendere nota dell'indirizzo IP che Pi riporta all'avvio. Questo sarà usato per SSH al Pi in fasi successive. I passaggi sottostanti per configurare il Pi sono più facili da eseguire da una sessione SSH al Pi.

Configura Raspberry Pi

Il Raspberry Pi utilizza la sua porta seriale di default come console seriale. Il dispositivo è chiamato ttyAMA0.  Quando si avvia, scarica i messaggi di avvio su questo dispositivo e crea una sessione di accesso su di esso. Per utilizzarlo per ricevere i dati da Arduino è necessario disabilitare la console seriale e la sessione.

  • Modifica il file inittab che controlla la sessione di accesso al testo con il comando seguente. È sempre consigliabile eseguire un backup del file originale prima di apportare modifiche nel caso in cui qualcosa vada storto.
sudo pico / etc / inittab
  • Individua le linee nella parte inferiore del file che si riferiscono al dispositivo ttyAMA0 e aggiungere un # all'inizio della riga che include questo nome del dispositivo. Dovrebbe assomigliare alle linee qui sotto quando hai finito
#Spawn a getty sulla linea seriale Raspberry Pi # T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100
  • Modifica il /boot/cmdline.txt con il comando qui sotto. Non dimenticare di fare una copia di backup per ogni evenienza.
sudo pico /boot/cmdline.txt
  • Rimuovi gli argomenti che fanno riferimento ttyAMA0.  Fanno parte di cui vuoi rimuovere un aspetto simile a questo: console = ttyAMA0,115200 kgdboc = ttyAMA0,115200
  • Salva il file e riavvia il Pi

Installa script Python e prerequisiti

Lo script python che completerà il ricevitore eseguirà diverse funzioni.

  1. Leggi dalla porta seriale
  2. Analizza l'input e assicurati che sia sano
  3. Interpretare i dati seriali
  4. Pubblica i dati su Xively nel feed appropriato

Per eseguire queste funzioni è necessario installare i moduli prerequisiti per installare le librerie seriali e le comunicazioni Xive.  

  • Accedere al Pi ed eseguire i comandi seguenti per installarli.
sudo apt-get install python-serial python-setuptools sudo easy_install pip sudo pip installa --pre xively-python mkdir ~ / scripts

  • Copia lo script wirelessnetwork.py dal pacchetto sorgente per questo tutorial nella directory degli script che hai appena creato. Puoi farlo copiando e incollando il contenuto o scrivendo lo script sul Pi.
  • Assicurati che lo script sia eseguibile con il comando
chmod u + x wirelessnetwork.py

I prossimi passaggi ti guideranno nella configurazione Internet delle cose account che consentono di registrare e reagire ai dati registrati dal dispositivo.

Imposta il tuo account Xively per il Pi

Xively è un servizio che raccoglie dati da cose. Puoi configurare e registrare il tuo cosa oppure Raspberry Pi con Xively e i dati possono essere trasferiti dal tuo Pi al cloud per il monitoraggio e l'attivazione.

Configura lo script Python

Per inviare dati a Xively il wirelessnetwork.py lo script deve avere il ID del feed e Chiavi API che hai registrato sopra. Modifica lo script usando pico o il tuo strumento di editing preferito (no vi vs guerre emacs qui, per favore). Guarda lo snippet di esempio dalla cima di wirelessnetwork.py script per un esempio di dove inserire le variabili. Si noti inoltre che è possibile commutare l'uscita dello script disattivando DEBUG variabile a 0.

#some definisce Xively FEED_ID = "FEED ID QUI" #inserisce il numero ID del feed qui API_KEY = "API KEY HERE" #set la chiave API qui # initialize api client api = xively.XivelyAPIClient (API_KEY) #Creazione del mapping dall'ID del trasmettitore numero ai nomi. Questo potrebbe essere un DB qualche giorno DEV = '1': 'Bedroom', '2': 'Basement' DEBUG = True 

Mentre stai modificando lo script, assicurati di modificare il file DEV variabile. Questa variabile è una mappatura del nome per il IDs che i moduli sensore invieranno. In questo esempio quando il modulo sensore con ID 1 invia un messaggio, lo script pubblicherà su un canale Xively con il nome descrittivo Camera da letto invece di ID1.  Allo stesso modo, il modulo sensore con ID 2 saranno riportati nel canale Seminterrato.

Programma il ricevitore Arduino

Il Raspberry Pi è ora pronto per ricevere dati utilizzando il wirelessnetwork.py script. L'Arduino deve essere programmato con il wirelessreceiver schizzo.

  • Apri il wirelessreceiver schizzo dal pacchetto sorgente e salvare una copia localmente
  • Copia il VirtualWire libreria dal wirelesstransmitter / Library directory al Biblioteca directory sotto il nuovo wirelessreceiver elenco
  • Collegare il ricevitore Arduino del ricevitore alla workstation di programmazione e assicurarsi che il tipo di porta e scheda siano impostati correttamente.
  • Assicurarsi che il RXPIN define è impostato sul numero pin che è collegato al modulo ricevitore RF. Se è costruito secondo il diagramma, lo schizzo dovrebbe andare bene senza modifiche.
  • Verifica e carica lo schizzo su Arduino
  • Apri il Monitor seriale finestre premendo Control-Shift-M.  Se i trasmettitori non stanno funzionando, non vedrai l'uscita.
  • Collegare uno dei moduli del trasmettitore al potere usando l'adattatore da parete 9V e il connettore cilindrico sulla breadboard. Ora dovresti vedere i messaggi che vengono ricevuti su Arduino. Sembrerà qualcosa di simile ai dati qui sotto.
ID: 1: TS: 23143: TF: 60.79: RH: 44.00 ID: 1: TS: 24532: TF: 60.79: RH: 44.00 ID: 1: TS: 29324: TF: 60.79: RH: 44.00
  • Scollega il cavo USB da Arduino
  • Attacca i ponticelli di terra e di potenza dal Raspberry Pi

Prova lo script del ricevente

Ora che hai l'Arduino che riceve i dati da un modulo sensore puoi testare lo script sul Pi per assicurarti che stia leggendo correttamente i dati e pubblicandolo su Xively. Aprire una sessione SSH o terminale al Pi per i seguenti passaggi.

  • Attiva il secondo trasmettitore wireless collegandolo con il secondo adattatore da 9V
  • Esegui lo script wirelessnetwork.py dalla directory / home / pi / scripts con i seguenti comandi
cd / home / pi / scripts / ./wirelessnetwork.py
  • Controlla l'output nella console e sul sito Web Xively.  
 Ingresso ricevuto: ID: 1: TS: 154075: TF: 73.39: RH: 39.00 Dati di elaborazione per: Camera da letto Registrazione temp fahrenheit per Camera da letto Creazione di datastream Aggiornamento Feed Xively con valore: 73.39 Posting umidità relativa per camera da letto Trovato datastream esistente Aggiornamento alimentazione Xly con valore : 39.00 Ingresso ricevuto: ID: 2: TS: 522: TF: 60.79: RH: 44.00 Dati di elaborazione per: Basement Posting temp fahrenheit per Basement Creazione di datastream Aggiornamento Feed Xly con valore: 60.79 Registrazione umidità relativa per Basement Trovato datastream esistente Aggiornamento Feed Xively con valore: 44,00 

Lo script creerà feed per umidità e temperatura la prima volta che viene eseguito. L'esempio sopra mostra lo script che riceve i messaggi, li analizza e li pubblica su Xively con successo. Uso Control-C per uscire dallo script prima di procedere al passaggio successivo.

Passa alle finestre del browser in cui hai creato il tuo account Xively e il dispositivo. I nuovi flussi di dati e alcune informazioni su di essi dovrebbero essere disponibili e apparire come l'immagine qui sotto.

Aggiornato Xively Channel

Imposta lo script da avviare all'avvio

Poiché il Raspberry Pi verrà eseguito senza headless, lo script dovrebbe essere impostato per l'avvio automatico quando l'unità viene alimentata.

  • Aggiungi la seguente riga al /etc/rc.local file. Usa il tuo editor preferito, ma assicurati di sudo il comando di modifica come /etc/rc.local è un file di proprietà principale. Lo script stesso può essere eseguito come utente pi anziché come root.
sudo -u pi /home/pi/scripts/wirelessnetwork.py &
  • Riavviare il Pi
  • Accedere al Pi dopo il riavvio e verificare che lo script sia in esecuzione con il seguente comando.
ps ax | grep wirelessnetwork

L'output dovrebbe essere simile all'estratto seguente.

22000 pts / 1 S + 0:02 / usr / bin / python /home/pi/scripts/wirelessnetwork.py

Sommario

Congratulazioni! Hai seguito un tutorial piuttosto lungo e hai creato una rete di sensori wireless molto flessibile ed espandibile. Hai esercitato una serie di competenze come la costruzione di circuiti breadboard basati su Arduino, collegando un Arduino a un Raspberry Pi, inviando e ricevendo dati seriali in modo sicuro tra Arduino e Pi, e inviando i dati del sensore a Xively's Internet delle cose servizio.

C'è un grande potenziale di espansione o ulteriore sperimentazione con questo progetto. È possibile scegliere di costruire moduli sensore aggiuntivi o aggiungere sensori ai moduli esistenti. Il formato del messaggio radio è una semplice chiave: coppia di valori e lo script python ha commenti su come aggiungere diversi tipi di dati. Prova a costruire una casa permanente o un alloggio per i trasmettitori. C'è un sacco di potenziale divertente su dove portare questo progetto.