Sommario:

NexArdu: Controllo intelligente dell'illuminazione: 5 passaggi
NexArdu: Controllo intelligente dell'illuminazione: 5 passaggi

Video: NexArdu: Controllo intelligente dell'illuminazione: 5 passaggi

Video: NexArdu: Controllo intelligente dell'illuminazione: 5 passaggi
Video: Séance ordinaire - 5 juillet 2021 2024, Dicembre
Anonim
NexArdu: controllo intelligente dell'illuminazione
NexArdu: controllo intelligente dell'illuminazione

Aggiornare

Se hai sviluppato la stessa funzionalità utilizzando Home Assistant. Home Assistant offre una vasta gamma di possibilità. Puoi trovare lo sviluppo qui.

Uno schizzo per controllare l'illuminazione domestica in modo intelligente tramite dispositivi wireless simili a X10 a 433,92 MHz (aka 433 MHz), ad es. Nexa.

Sfondo

Quando si tratta di illuminazione decorativa, è stato un po' stancante per me dover regolare nuovamente i timer che accendono le luci ogni due o tre settimane a causa dello spostamento dell'ora solare rispetto all'ora CET. Allo stesso tempo, alcune sere andiamo a letto prima di altre. Per questo motivo, a volte le luci si spengono "troppo tardi" o "troppo presto". Quanto sopra mi ha stimolato a pensare: voglio che l'illuminazione decorativa si accenda sempre allo stesso livello di luce ambientale e poi si spenga a una certa ora a seconda che siamo svegli o meno.

Obbiettivo

Questo istruibile sfrutta le possibilità di dispositivi controllati senza fili come System Nexa che operano sulla frequenza di 433,92 MHz. Qui dobbiamo presentare:

  1. Controllo dell'illuminazione automatizzato
  2. Controllo web

Controllo web. Server Web interno o esterno

Il Server Interno sfrutta la possibilità dello shield Arduino Ethernet per fornire un server web. Il server web parteciperà alle chiamate del client web per controllare e interagire con Arduino. Questa è una soluzione semplice con funzionalità limitate; le possibilità di migliorare il codice del server web sono limitate dalla memoria dell'Arduino. Il server esterno richiede la configurazione di un server web PHP esterno. Questa configurazione è più complicata e non supportata da questo tutorial, tuttavia, il codice/pagina PHP per controllare e guidare Arduino è dotato di funzionalità di base. Le possibilità di potenziamento del web server sono, in questo caso, limitate dal web server esterno.

Distinta base

Per sfruttare appieno le possibilità offerte da questo schizzo, è necessario:

  1. Un Arduino Uno (testato su R3)
  2. Uno shield Arduino Ethernet
  3. Un apparecchio Nexa o simile funzionante a 433,92 MHz
  4. Un sensore PIR (Passive InfraRed) che opera a 433,92 MHz
  5. Un resistore da 10KOhms
  6. un LDR
  7. Un RTC DS3231 (solo versione server esterno)
  8. Un trasmettitore a 433,92 MHz: XY-FST
  9. Un ricevitore a 433,92 MHz: MX-JS-05V

Il minimo consigliato è:

  1. Un Arduino Uno (testato su R3)
  2. Un apparecchio Nexa o simile funzionante a 433,92 MHz
  3. Un resistore da 10KOhms
  4. un LDR
  5. Un trasmettitore a 433,92 MHz: XY-FST

(L'omissione dello scudo Ethernet richiede modifiche dello schizzo non fornite all'interno di questa istruzione)

La logica Nexa. Una breve descrizione

Il ricevitore Nexa apprende l'ID del telecomando e l'ID del pulsante. In altre parole, ogni telecomando ha il suo numero di mittente e ogni coppia di pulsanti on/off ha il suo ID pulsante. Il ricevitore deve imparare quei codici. Alcuni documenti Nexa affermano che un ricevitore può essere associato a un massimo di sei telecomandi. I parametri Nexa:

  • SenderID: ID del telecomando
  • ButtonID: numero della coppia di pulsanti (on/off). Inizia con il numero 0
  • Gruppo: sì/no (noti anche come pulsanti "Tutti off/on")
  • Comando: on/off

Passi istruttivi. Nota

I diversi passaggi descritti qui servono a offrire due gusti diversi su come raggiungere l'obiettivo. Sentiti libero di scegliere quello che preferisci. Ecco l'indice:

Step #1: Il circuito

Passaggio 2: Nexardu con server Web interno (con NTP)

Passaggio 3: Nexardu con server esterno

Passaggio 4: informazioni preziose

Fase 1: Il circuito…

Il circuito…
Il circuito…

Cablare i vari componenti come mostrato nell'immagine.

Arduino pin # 8 al pin dati sul modulo RX (ricevitore) pin Arduino # 2 al pin dati sul modulo RX (ricevitore) pin Arduino # 7 al pin dati sul modulo TX (mittente) pin Arduino A0 a LDR

Configurazione RTC. Necessario solo nella configurazione del server esterno. Pin Arduino A4 su pin SDA sul modulo RTC Pin Arduino A5 su pin SCL sul modulo RTC

Passaggio 2: Nexardu con server Web interno (con NTP)

Biblioteche

Questo codice fa uso di molte librerie. La maggior parte di essi può essere trovata tramite il "Library Manager" dell'IDE Arduino. Non dovresti trovare una libreria elencata, per favore google.

Wire.hSPI.h - Richiesto da Ethernet shieldNexaCtrl.h - Nexa device controller Ethernet.h - Per abilitare e utilizzare Ethernet shieldRCSwitch.h - Richiesto per PIRTime.h - Richiesto per RTCTimeAlarms.h - Gestione allarmi temporaliEthernetUdp.h - Richiesto per client NTP

lo schizzo

Il codice seguente sfrutta la possibilità di utilizzare la scheda Arduino UNO non solo come mezzo per controllare i dispositivi Nexa ma dispone anche di un server Web interno. Un'osservazione da aggiungere è che il modulo RTC (Real Time Clock) viene regolato automaticamente tramite NTP (Network Time Protocol).

Prima di caricare il codice su Arduino, potrebbe essere necessario configurare quanto segue:

  • SenderId: devi prima annusare SenderId, vedi sotto
  • PIR_id: devi prima annusare il SenderId, vedi sotto
  • Indirizzo IP LAN: imposta un IP della tua LAN sullo shield Ethernet Arduino. Valore predefinito: 192.168.1.99
  • Server NTP: non strettamente necessario, ma potrebbe essere utile cercare su Google i server NTP nelle vicinanze. Valore predefinito: 79.136.86.176
  • Il codice è regolato per il fuso orario CET. Regola questo valore, se necessario, sul tuo fuso orario per visualizzare l'ora corretta (NTP)

Annusando i codici Nexa

Per questo è necessario collegare almeno il componente RX ad Arduino come mostrato nel circuito.

Di seguito trovi lo sketch Nexa_OK_3_RX.ino che, al momento della stesura, è compatibile con i dispositivi Nexa NEYCT-705 e PET-910.

I passaggi da seguire sono:

  1. Associa il ricevitore Nexa al telecomando.
  2. Carica Nexa_OK_3_RX.ino su Arduino e apri il "Monitor seriale".
  3. Premi il pulsante del telecomando che controlla il ricevitore Nexa.
  4. Prendere nota di "RemoteID" e "ButtonID".
  5. Imposta questi numeri in SenderID e ButtonID nella dichiarazione della variabile dello sketch precedente.

Per leggere l'Id del PIR, basta usare questo stesso sketch (Nexa_OK_3_RX.ino) e leggere il valore sul "Serial Monitor" quando il PIR rileva il movimento.

Passaggio 3: Nexardu con server esterno

Biblioteche

Questo codice fa uso di molte librerie. La maggior parte può essere trovata tramite il "Library Manager" dell'IDE Arduino. Se non trovi una libreria elencata, per favore google.

Wire.hRTClib.h - questa è la libreria da https://github.com/MrAlvin/RTClibSPI.h - Richiesto da Ethernet shieldNexaCtrl.h - Nexa device controllerEthernet.h - Per abilitare e utilizzare Ethernet shieldRCSwitch.h - Richiesto per PIRTime.h - Richiesto per RTCTimeAlarms.h - Gestione allarmi temporaliaREST.h - per servizi API RESTful sfruttati da serverair/wdt.h esterno - Gestione timer watchdog

lo schizzo

Lo schizzo qui sotto presenta un altro sapore della stessa cosa, questa volta potenziando le possibilità che un server web esterno può dare. Come già accennato nell'introduzione, The External Server richiede la configurazione di un server Web PHP esterno. Questa configurazione è più complicata e non supportata da questo tutorial, tuttavia, il codice/pagina PHP per controllare e guidare Arduino è dotato di funzionalità di base.

Prima di caricare il codice su Arduino, potrebbe essere necessario configurare quanto segue:

  • SenderId: devi prima annusare il SenderId, vedi Sniffare i codici Nexa nel passaggio precedente
  • PIR_id: devi prima annusare il SenderId, vedi Sniffing dei codici Nexa nel passaggio precedente
  • Indirizzo IP LAN: imposta un IP della tua LAN sullo shield Ethernet Arduino. Valore predefinito: 192.168.1.99

Per la procedura di sniffing del codice Nexa, fare riferimento al passaggio 1.

File complementare

Carica il file nexardu4.txt allegato sul tuo server PHP esterno e rinominalo in nexardu4.php

Tempo RTC impostato

Per impostare l'ora/data sull'RTC utilizzo lo sketch SetTime che unisce la libreria DS1307RTC.

Passaggio 4: informazioni preziose

Informazione preziosa
Informazione preziosa
Informazione preziosa
Informazione preziosa

Buono a sapersi comportamento

  1. Quando Arduino è in "Controllo automatico della luce", può passare attraverso quattro diversi stati in relazione all'illuminazione ambientale e all'ora del giorno:

    1. Veglia: Arduino aspetta che arrivi la notte.
    2. Attivo: La notte è arrivata e Arduino ha acceso le luci.
    3. Sonnolento: Le luci sono accese ma sta arrivando il momento di spegnerle. Inizia a "time_to_turn_off - PIR_time" cioè, se time_to_turn_off è impostato su 22:30 e PIR_time impostato su 20 minuti, Arduino entrerà nello stato di sonnolenza alle 22:10.
    4. Dormiente: La notte passa, Arduino ha spento le luci e Arduino aspetta che l'alba si svegli.
  2. Arduino ascolta sempre i segnali inviati dai telecomandi. Questo prevede la possibilità di visualizzare sul web lo stato delle luci (acceso/spento) quando si utilizza il telecomando.
  3. Mentre Arduino è sveglio, cerca sempre di spegnere le luci, quindi i segnali di accensione inviati da un controllo remoto per accendere le luci potrebbero essere catturati da Arduino. In tal caso, Arduino proverà a spegnere nuovamente le luci.
  4. Mentre Arduino è attivo, cerca di accendere sempre le luci, quindi i segnali OFF inviati da un telecomando per spegnere le luci potrebbero essere catturati da Arduino. In tal caso, Arduino proverà a riaccendere le luci.
  5. In stato di sonnolenza le luci si possono accendere/spegnere con un telecomando. L'Arduino non reagirà.
  6. Nello stato di sonnolenza il conto alla rovescia del PIR inizierà a reimpostarsi da "time_to_turn_off - PIR_time" e quindi il time_to_turn_off verrà esteso di 20 minuti ogni volta che il PIR rileva un movimento. Un "segnale PIR rilevato!" messaggio verrà mostrato sul browser web quando ciò accade.
  7. Mentre Arduino è inattivo, le luci possono essere accese e spente tramite il telecomando. L'Arduino non reagirà.
  8. Un ripristino o un ciclo di alimentazione di Arduino lo porterà in modalità attiva. Ciò significa che se Arduino è stato ripristinato dopo il time_turn_off, Arduino accenderà le luci. Per evitare ciò, Arduino deve essere portato in modalità manuale (spuntare "Light Automatic Control") e attendere fino al mattino per tornare a "Light Automatic Control".
  9. Come già detto, Arduino attende l'alba per tornare attivo. Per questo motivo, il sistema può farsi ingannare dirigendo una luce sufficientemente forte verso il sensore di luce che deve superare la soglia di "luminosità minima". Se ciò accade, Arduino deve passare allo stato attivo.
  10. Il valore di Tolleranza è di grande importanza per evitare che il sistema si accenda e si spenga intorno al valore di soglia Luminosità minima. Le luci a led, a causa del loro sfarfallio e della loro elevata reattività, possono essere fonte di comportamenti svolazzanti. Aumentare il valore di tolleranza se si verifica questo problema. io uso il valore 7.

Buono a sapersi del codice

  1. Come puoi notare, il codice è molto grande e fa uso di una notevole quantità di librerie. Ciò compromette la quantità di memoria libera necessaria per l'heap. Ho notato un comportamento instabile in passato con l'arresto del sistema, specialmente dopo le chiamate web. Pertanto, la sfida più grande che ho avuto è stata quella di limitarne le dimensioni e l'utilizzo di diverse variabili per rendere stabile il sistema.
  2. Il codice che sfrutta il server interno, utilizzato da me a casa, è in esecuzione da febbraio 2016 senza problemi.
  3. Ho fatto notevoli sforzi per arricchire il codice con le spiegazioni. Approfitta di questo per giocare con diversi parametri come il numero di invii di codice Nexa per burst, tempo di sincronizzazione NTP, ecc.
  4. Il codice non prevede l'ora legale. Questo deve essere regolato tramite il browser web quando si applica.

Alcuni punti da considerare

  1. Aggiungere le antenne ai moduli a radiofrequenza (RF) TX e RX. Ti farà risparmiare tempo lamentandoti di due punti principali: resilienza e portata del segnale RF. Io uso un cavo da 50 Ohm lungo 17,28 cm (6,80 pollici).
  2. Questo intricato può funzionare anche con altri sistemi di automazione domestica come Proove, ad esempio. Una delle tante condizioni da soddisfare è farli funzionare sulla frequenza 433,92MHz.
  3. Un grosso grattacapo con Arduino è avere a che fare con librerie che potrebbero aggiornarsi nel tempo e improvvisamente non essere di nuovo compatibili con il tuo "vecchio" sketch; lo stesso problema potrebbe sorgere durante l'aggiornamento dell'IDE Arduino. Attenzione che questo potrebbe essere il nostro caso qui, sì, anche il mio problema.
  4. Più client Web simultanei con diverse modalità di illuminazione creano uno stato "lampeggiante".

Immagine dello schermo

Nel carosello di immagini sopra, trovi uno screenshot della pagina web visualizzata quando chiami Arduino tramite il browser web. Data la configurazione IP predefinita del codice, l'URL sarebbe

Un aspetto che potrebbe essere oggetto di miglioramento è il posizionamento del pulsante "invia" poiché ha effetto su tutte le caselle di input e non solo sul "Controllo Automatico Luce" come si potrebbe pensare. In altre parole, se desideri modificare uno qualsiasi dei valori possibili, devi sempre premere il pulsante "invia".

Documentazione dettagliata/avanzata

Ho allegato i seguenti file in modo che possano aiutarti a comprendere l'intera soluzione, in particolare per la risoluzione dei problemi e il miglioramento.

Arduino_NexaControl_IS.pdf fornisce la documentazione sulla soluzione Internal Server.

Arduino_NexaControl_ES.pdf fornisce la documentazione sulla soluzione del server esterno.

Riferimenti esterni

Sistema Nexa (svedese)

Passaggio 5: finito

Finito!
Finito!

Ecco fatto tutto finito e in azione!

La custodia Arduino Uno può essere trovata in Thingiverse come "Arduino Uno Rev3 con custodia Ethernet Shield XL".

Consigliato: