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.
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.
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 trasmettitoreL'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.
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.
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.
#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.
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.
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 ricevitoreA 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 realeNotare 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.
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.
sudo raspi-config
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.
sudo pico / etc / inittab
#Spawn a getty sulla linea seriale Raspberry Pi # T0: 23: respawn: / sbin / getty -L ttyAMA0 115200 vt100
sudo pico /boot/cmdline.txt
Lo script python che completerà il ricevitore eseguirà diverse funzioni.
Per eseguire queste funzioni è necessario installare i moduli prerequisiti per installare le librerie seriali e le comunicazioni Xive.
sudo apt-get install python-serial python-setuptools sudo easy_install pip sudo pip installa --pre xively-python mkdir ~ / scripts
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.
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.
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.
Il Raspberry Pi è ora pronto per ricevere dati utilizzando il wirelessnetwork.py script. L'Arduino deve essere programmato con il wirelessreceiver schizzo.
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
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.
cd / home / pi / scripts / ./wirelessnetwork.py
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 ChannelPoiché il Raspberry Pi verrà eseguito senza headless, lo script dovrebbe essere impostato per l'avvio automatico quando l'unità viene alimentata.
sudo -u pi /home/pi/scripts/wirelessnetwork.py &
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
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.