Sommario:
- Fase 1: Il circuito…
- Passaggio 2: Nexardu con server Web interno (con NTP)
- Passaggio 3: Nexardu con server esterno
- Passaggio 4: informazioni preziose
- Passaggio 5: finito
Video: NexArdu: Controllo intelligente dell'illuminazione: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
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:
- Controllo dell'illuminazione automatizzato
- 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:
- Un Arduino Uno (testato su R3)
- Uno shield Arduino Ethernet
- Un apparecchio Nexa o simile funzionante a 433,92 MHz
- Un sensore PIR (Passive InfraRed) che opera a 433,92 MHz
- Un resistore da 10KOhms
- un LDR
- Un RTC DS3231 (solo versione server esterno)
- Un trasmettitore a 433,92 MHz: XY-FST
- Un ricevitore a 433,92 MHz: MX-JS-05V
Il minimo consigliato è:
- Un Arduino Uno (testato su R3)
- Un apparecchio Nexa o simile funzionante a 433,92 MHz
- Un resistore da 10KOhms
- un LDR
- 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…
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:
- Associa il ricevitore Nexa al telecomando.
- Carica Nexa_OK_3_RX.ino su Arduino e apri il "Monitor seriale".
- Premi il pulsante del telecomando che controlla il ricevitore Nexa.
- Prendere nota di "RemoteID" e "ButtonID".
- 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
Buono a sapersi comportamento
-
Quando Arduino è in "Controllo automatico della luce", può passare attraverso quattro diversi stati in relazione all'illuminazione ambientale e all'ora del giorno:
- Veglia: Arduino aspetta che arrivi la notte.
- Attivo: La notte è arrivata e Arduino ha acceso le luci.
- 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.
- Dormiente: La notte passa, Arduino ha spento le luci e Arduino aspetta che l'alba si svegli.
- 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.
- 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.
- 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.
- In stato di sonnolenza le luci si possono accendere/spegnere con un telecomando. L'Arduino non reagirà.
- 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.
- Mentre Arduino è inattivo, le luci possono essere accese e spente tramite il telecomando. L'Arduino non reagirà.
- 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".
- 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.
- 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
- 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.
- Il codice che sfrutta il server interno, utilizzato da me a casa, è in esecuzione da febbraio 2016 senza problemi.
- 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.
- Il codice non prevede l'ora legale. Questo deve essere regolato tramite il browser web quando si applica.
Alcuni punti da considerare
- 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).
- 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.
- 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.
- 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
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:
Luce LED da scrivania intelligente - Illuminazione intelligente con Arduino - Area di lavoro Neopixel: 10 passaggi (con immagini)
Luce LED da scrivania intelligente | Illuminazione intelligente con Arduino | Neopixels Workspace: Al giorno d'oggi trascorriamo molto tempo a casa, studiando e lavorando virtualmente, quindi perché non rendere il nostro spazio di lavoro più grande con un sistema di illuminazione personalizzato e intelligente basato su Arduino e LED Ws2812b. Qui ti mostro come costruire il tuo Smart Luce LED da scrivania che
IlluMOONation - un modello di illuminazione intelligente: 7 passaggi
IlluMOONation - un modello di illuminazione intelligente: hai mai alzato gli occhi al cielo notturno e non sei stato in grado di vedere nessuna stella? Milioni di bambini in tutto il mondo non sperimenteranno mai la Via Lattea dove vivono a causa dell'uso crescente e diffuso della luce artificiale di notte che non c'è
Controllo della stanza con ESP8266 - Temperatura, movimento, tende e illuminazione: 8 passaggi
Controllo della stanza con ESP8266 | Temperatura, Movimento, Tende e Illuminazione: Questo progetto consiste in un sistema basato sul modulo NodeMCU ESP8266 che ti consente di controllare la luminosità di una striscia LED e della tenda della tua stanza, inoltre è in grado di inviare dati sugli eventi di movimento della tua stanza e la temperatura alla nuvola w
Rete di stazioni di rilevamento per il controllo dell'illuminazione e della sicurezza: 5 passaggi (con immagini)
Rete di stazioni di sensori per il controllo dell'illuminazione e della sicurezza: con questa rete di stazioni di sensori configurata in modalità master/slave, sarai in grado di eseguire il controllo dell'illuminazione e della sicurezza nella tua casa. Queste stazioni sensore (Node01, Node02 in questo progetto) sono collegate a una stazione master (Node00) collegata a te
Illuminazione domestica intelligente: 6 passaggi
Smart Home Lighting: Ciao ragazzi, oggi creeremo un progetto in cui controlliamo una lampadina in base all'illuminazione circostante. Utilizzeremo PICO e un resistore dipendente dalla luce (LDR), per rilevare la luce e accendere o spegnere una lampadina a seconda di quanto inte