Table des matières:
- Étape 1: Le circuit…
- Étape 2: Nexardu avec serveur Web interne (avec NTP)
- Étape 3: Nexardu avec un serveur externe
- Étape 4: Informations précieuses
- Étape 5: Terminé
Vidéo: NexArdu : Contrôle intelligent de l'éclairage : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Mettre à jour
Si vous avez développé la même fonctionnalité en utilisant Home Assistant. Home Assistant offre un immense éventail de possibilités. Vous pouvez trouver le développement ici.
Un croquis pour contrôler l'éclairage de la maison de manière intelligente via des appareils sans fil de type X10 à 433,92 MHz (alias 433 MHz), par ex. Nexa.
Fond
En ce qui concerne l'éclairage décoratif, il m'a été un peu fatiguant de devoir réajuster toutes les deux ou trois semaines les minuteries qui allument les lumières à cause du décalage de l'heure solaire par rapport à l'heure CET. En même temps, certaines nuits, nous nous couchons plus tôt que d'autres. Pour cette raison, les lumières s'éteignent parfois "trop tard" ou "trop tôt". Ce qui précède m'a mis au défi de réfléchir: je veux que l'éclairage décoratif s'allume toujours au même niveau de lumière ambiante puis s'éteigne à un certain moment selon que nous soyons éveillés ou non.
Objectif
Cette instructable exploite les possibilités des appareils contrôlés sans fil comme le système Nexa fonctionnant sur la fréquence 433,92 MHz. Nous présenterons ici:
- Contrôle d'éclairage automatisé
- Contrôle Web
Contrôle Web. Serveur Web interne vs externe
Le serveur interne exploite la possibilité du shield Ethernet Arduino pour fournir un serveur Web. Le serveur Web assistera aux appels du client Web pour vérifier et interagir avec l'Arduino. Il s'agit d'une solution simple avec des fonctionnalités limitées; les possibilités d'amélioration du code du serveur Web sont limitées par la mémoire de l'Arduino. Le serveur externe nécessite la configuration d'un serveur Web PHP externe. Cette configuration est plus compliquée et n'est pas prise en charge par ce tutoriel, cependant, le code/page PHP pour vérifier et piloter l'Arduino est fourni avec des fonctionnalités de base. Les possibilités d'enrichissement du serveur web sont, dans ce cas, limitées par le serveur web externe.
Nomenclature
Pour profiter pleinement des possibilités offertes par ce croquis, il vous faut:
- Un Arduino Uno (testé sur R3)
- Un blindage Ethernet Arduino
- Un poste Nexa ou similaire fonctionnant à 433,92 MHz
- Un capteur PIR (Passive InfraRed) fonctionnant à 433,92MHz
- Une résistance de 10KOhms
- Un LDR
- Un RTC DS3231 (version serveur externe uniquement)
- Un émetteur 433,92MHz: XY-FST
- Un récepteur 433,92MHz: MX-JS-05V
Le minimum recommandé est:
- Un Arduino Uno (testé sur R3)
- Un poste Nexa ou similaire fonctionnant à 433,92 MHz
- Une résistance de 10KOhms
- Un LDR
- Un émetteur 433,92MHz: XY-FST
(L'omission du bouclier Ethernet nécessite des modifications du croquis non fourni dans ce instructable)
La logique Nexa. Une brève description
Le récepteur Nexa apprend l'ID de la télécommande et l'ID du bouton. En d'autres termes, chaque télécommande a son numéro d'expéditeur et chaque paire de boutons marche/arrêt a son identifiant de bouton. Le récepteur doit apprendre ces codes. Certains documents Nexa indiquent qu'un récepteur peut être couplé avec jusqu'à six télécommandes. Les paramètres Nexa:
- SenderID: ID de la télécommande
- ButtonID: numéro de paire de boutons (activé/désactivé). Il commence par le numéro 0
- Groupe: oui/non (ou boutons « All off/on »)
- Commande: marche/arrêt
Étapes instructables. Noter
Les différentes étapes décrites ici sont d'offrir deux saveurs différentes sur la façon d'atteindre l'objectif. N'hésitez pas à choisir celui qui vous convient. Voici l'indice:
Étape 1: Le circuit
Étape #2: Nexardu avec le serveur Web interne (avec NTP)
Étape #3: Nexardu avec un serveur externe
Étape 4: Informations précieuses
Étape 1: Le circuit…
Câblez les divers composants comme indiqué sur l'image.
Broche Arduino n°8 vers la broche de données sur le module RX (récepteur)Broche Arduino n°2 vers la broche de données sur le module RX (récepteur)Broche Arduino n°7 vers la broche de données sur le module TX (expéditeur)Broche Arduino A0 vers LDR
Configuration RTC. Uniquement nécessaire sur la configuration du serveur externe. Broche Arduino A4 à broche SDA sur module RTCBroche Arduino A5 à broche SCL sur module RTC
Étape 2: Nexardu avec serveur Web interne (avec NTP)
Les bibliothèques
Ce code utilise de nombreuses bibliothèques. La plupart d'entre eux peuvent être trouvés via le "Gestionnaire de bibliothèque" de l'IDE Arduino. Si vous ne trouvez pas une bibliothèque répertoriée, veuillez google.
Wire.hSPI.h - Requis par Ethernet shieldNexaCtrl.h - Contrôleur de périphérique Nexa Ethernet.h - Pour activer et utiliser le shield EthernetRCSwitch.h - Requis pour PIRTime.h - Requis pour RTCTimeAlarms.h - Gestion des alarmes horairesEthernetUdp.h - Requis pour client NTP
Le croquis
Le code ci-dessous exploite la possibilité d'utiliser la carte Arduino UNO non seulement comme moyen de contrôler les appareils Nexa, mais elle dispose également d'un serveur Web interne. Une remarque à ajouter est que le module RTC (Real Time Clock) s'ajuste automatiquement via NTP (Network Time Protocol).
Avant de télécharger le code sur l'Arduino, vous devrez peut-être configurer les éléments suivants:
- SenderId: vous devez d'abord renifler le SenderId, voir ci-dessous
- PIR_id: vous devez d'abord renifler le SenderId, voir ci-dessous
- Adresse IP LAN: définissez une IP de votre LAN sur votre shield Ethernet Arduino. Valeur par défaut: 192.168.1.99
- Serveur NTP: Pas strictement nécessaire, mais il pourrait être utile de rechercher sur Google les serveurs NTP à proximité. Valeur par défaut: 79.136.86.176
- Le code est ajusté pour le fuseau horaire CET. Ajustez cette valeur -si besoin, à votre fuseau horaire afin d'afficher l'heure correcte (NTP)
Renifler les codes Nexa
Pour cela, vous devez câbler au moins le composant RX à l'Arduino comme indiqué dans le circuit.
Retrouvez ci-dessous le sketch Nexa_OK_3_RX.ino qui, au moment de sa rédaction, est compatible avec les appareils Nexa NEYCT-705 et PET-910.
Les étapes à suivre sont:
- Associez le récepteur Nexa à la télécommande.
- Chargez Nexa_OK_3_RX.ino sur l'Arduino et ouvrez le "Serial Monitor".
- Appuyez sur le bouton de la télécommande qui contrôle le récepteur Nexa.
- Notez le "RemoteID" et le "ButtonID".
- Définissez ces nombres sous SenderID et ButtonID sur la déclaration de variable de l'esquisse précédente.
Pour lire l'Id du PIR, il suffit d'utiliser ce même croquis (Nexa_OK_3_RX.ino) et de lire la valeur sur le "Serial Monitor" lorsque le PIR détecte un mouvement.
Étape 3: Nexardu avec un serveur externe
Les bibliothèques
Ce code utilise de nombreuses bibliothèques. La plupart d'entre eux peuvent être trouvés via le "Gestionnaire de bibliothèque" de l'IDE Arduino. Si vous ne trouvez pas une bibliothèque répertoriée, veuillez google.
Wire.hRTClib.h - il s'agit de la bibliothèque de https://github.com/MrAlvin/RTClibSPI.h - Requis par Ethernet shieldNexaCtrl.h - Nexa device controllerEthernet.h - Pour activer et utiliser l'Ethernet shieldRCSwitch.h - Requis pour PIRTime.h - Requis pour RTCTimeAlarms.h - Gestion des alarmes temporellesaREST.h - pour les services API RESTful exploités par un serveur externeair/wdt.h - Gestion du temporisateur de surveillance
Le croquis
L'esquisse ci-dessous présente une autre version de la même chose, cette fois-ci valorisant les possibilités qu'un serveur Web externe peut offrir. Comme déjà mentionné dans l'introduction, The External Server nécessite la configuration d'un serveur Web PHP externe. Cette configuration est plus compliquée et n'est pas prise en charge par ce tutoriel, cependant, le code/page PHP pour vérifier et piloter l'Arduino est fourni avec des fonctionnalités de base.
Avant de télécharger le code sur l'Arduino, vous devrez peut-être configurer les éléments suivants:
- SenderId: vous devez d'abord renifler le SenderId, voir Renifler les codes Nexa à l'étape précédente
- PIR_id: vous devez d'abord renifler le SenderId, voir Renifler les codes Nexa à l'étape précédente
- Adresse IP LAN: définissez une IP de votre LAN sur votre shield Ethernet Arduino. Valeur par défaut: 192.168.1.99
Pour la procédure de détection de code Nexa, veuillez vous référer à l'étape 1.
Dossier complémentaire
Téléchargez le fichier nexardu4.txt joint sur votre serveur PHP externe et renommez-le en nexardu4.php
Réglage de l'heure RTC
Pour régler l'heure/la date sur le RTC, j'utilise le sketch SetTime qui regroupe la bibliothèque DS1307RTC.
Étape 4: Informations précieuses
Bon à savoir comportement
-
Lorsque Arduino est sous "Light Automatic Control", il peut passer par quatre états différents en fonction de l'éclairage ambiant et de l'heure de la journée:
- Evely: Arduino attend que la nuit vienne.
- Actif: la nuit est venue et Arduino a allumé les lumières.
- Somnolent: Les lumières sont allumées mais il est temps de les éteindre. Il commence à "time_to_turn_off - PIR_time", c'est-à-dire que si time_to_turn_off est défini sur 22h30 et PIR_time défini sur 20 minutes, l'Arduino entrera dans l'état somnolent à 22h10.
- Dormant: la nuit passe, Arduino a éteint les lumières et Arduino attend que l'aube se réveille.
- Arduino est toujours à l'écoute des signaux envoyés par les télécommandes. Celui-ci offre la possibilité d'afficher l'état des lumières (allumé/éteint) sur le web lorsque la télécommande est utilisée.
- Alors qu'Arduino est éveillé, il essaie d'éteindre les lumières tout le temps, par conséquent, les signaux ON envoyés par une commande de recul pour allumer les lumières peuvent être capturés par Arduino. Si cela se produit, l'Arduino essaiera à nouveau d'éteindre les lumières.
- Pendant qu'Arduino est actif, il essaie d'allumer les lumières tout le temps. Par conséquent, les signaux d'arrêt envoyés par une télécommande pour éteindre les lumières peuvent être capturés par Arduino. Si cela se produit, l'Arduino essaiera de rallumer les lumières.
- En état de somnolence, les lumières peuvent être allumées/éteintes avec une télécommande. L'Arduino ne s'y opposera pas.
- Dans l'état somnolent, le compte à rebours du PIR commencera à se réinitialiser à partir de "time_to_turn_off - PIR_time" et ainsi le time_to_turn_off sera prolongé de 20 minutes à chaque fois que le PIR détecte un mouvement. Un "Signal PIR détecté !" message s'affichera sur le navigateur Web lorsque cela se produira.
- Pendant qu'Arduino est en veille, les lumières peuvent être allumées et éteintes via la télécommande. L'Arduino ne s'y opposera pas.
- Une réinitialisation ou un cycle d'alimentation de l'Arduino le mettra en mode actif. Cela signifie que si l'Arduino a été réinitialisé après le time_turn_off, Arduino allumera les lumières. Pour éviter cela, l'Arduino doit être mis en mode manuel (cocher "Light Automatic Control") et attendre le matin pour le remettre en "Light Automatic Control".
- Comme mentionné ci-dessus, Arduino attend que l'aube redevienne active. De ce fait, le système peut se tromper en dirigeant une lumière suffisamment forte vers le capteur de lumière qui doit dépasser le seuil de « luminosité minimale ». Si cela se produit, Arduino doit passer à l'état actif.
- La valeur de Tolérance est d'une grande importance afin d'éviter que le système s'allume et s'éteigne autour de la valeur seuil Luminosité minimale. Les lumières LED, en raison de leur scintillement et de leur grande réactivité, peuvent être une source de comportement de battement. Augmentez la valeur de tolérance si vous rencontrez ce problème. J'utilise la valeur 7.
Bon à savoir pour le code
- Comme vous pouvez le remarquer, le code est très volumineux et utilise une quantité considérable de bibliothèques. Cela compromet la quantité de mémoire libre nécessaire pour le tas. J'ai remarqué un comportement instable dans le passé, le système s'arrêtant, en particulier après des appels Web. Par conséquent, le plus grand défi que j'ai eu a été de limiter sa taille et l'utilisation de diverses variables afin de rendre le système stable.
- Le code qui exploite le serveur interne -utilisé par moi à la maison, fonctionne maintenant depuis février 2016 sans problème.
- J'ai fait des efforts considérables pour enrichir le code d'explications. Profitez-en pour jouer avec divers paramètres comme le nombre d'envois de code Nexa par rafale, le temps de synchronisation NTP, etc.
- Le code ne comporte pas l'heure d'été. Cela doit être ajusté via le navigateur Web lorsqu'il s'applique.
Quelques points à considérer
- Ajoutez les antennes aux modules de radiofréquence (RF) TX et RX. Cela vous fera gagner du temps en vous plaignant de deux points principaux: la résilience et la portée du signal RF. J'utilise un fil 50Ohms de 17,28 cm (6,80 pouces) de long.
- Cet intructable peut également fonctionner avec d'autres systèmes domotiques comme Proove, par exemple. L'une des nombreuses conditions à remplir est de les faire fonctionner sur la fréquence 433,92MHz.
- Un gros casse-tête avec Arduino est de gérer des bibliothèques qui peuvent être mises à jour au fil du temps et soudainement ne plus être compatibles avec votre "ancien" croquis; le même problème peut survenir lors de la mise à niveau de votre IDE Arduino. Attention, cela pourrait être notre cas ici -oui, mon problème aussi.
- Plusieurs clients Web simultanés avec différents modes d'éclairage créent un état « clignotant ».
Capture d'écran
Dans le carrousel d'images ci-dessus, vous trouverez une capture d'écran de la page Web affichée lorsque vous appelez l'Arduino via votre navigateur Web. Compte tenu de la configuration IP par défaut du code, l'URL serait
Un aspect qui pourrait faire l'objet d'améliorations est le positionnement du bouton « soumettre » puisqu'il prend effet sur toutes les cases de saisie et pas seulement sur le « contrôle automatique léger » comme on pourrait le penser. En d'autres termes, si vous souhaitez modifier l'une des valeurs possibles, vous devez toujours appuyer sur le bouton « soumettre ».
Documentation détaillée/avancée
J'ai joint les fichiers suivants afin qu'ils puissent vous aider à comprendre l'ensemble de la solution, en particulier pour le dépannage et l'amélioration.
Arduino_NexaControl_IS.pdf fournit une documentation sur la solution Internal Server.
Arduino_NexaControl_ES.pdf fournit une documentation sur la solution de serveur externe.
Références externes
Système Nexa (suédois)
Étape 5: Terminé
Voilà, tout est terminé et en action !
Le boîtier Arduino Uno peut être trouvé dans Thingiverse sous le nom "Arduino Uno Rev3 avec boîtier Ethernet Shield XL".
Conseillé:
Lampe LED de bureau intelligente - Éclairage intelligent avec Arduino - Espace de travail Neopixels : 10 étapes (avec photos)
Lampe LED de bureau intelligente | Éclairage intelligent avec Arduino | Espace de travail Neopixels : maintenant, nous passons beaucoup de temps à la maison, à étudier et à travailler virtuellement, alors pourquoi ne pas agrandir notre espace de travail avec un système d'éclairage personnalisé et intelligent basé sur les LED Arduino et Ws2812b. Ici, je vous montre comment construire votre Smart Lampe LED de bureau qui
IlluMOONation - un modèle d'éclairage intelligent : 7 étapes
IlluMOONation - un modèle d'éclairage intelligent : avez-vous déjà regardé le ciel nocturne et n'avez pas pu voir d'étoiles ? Des millions d'enfants à travers le monde ne connaîtront jamais la Voie lactée là où ils vivent en raison de l'utilisation accrue et généralisée de la lumière artificielle la nuit qui n'est pas allumée
Système d'éclairage de passerelle intelligent - Team Sailor Moon: 12 étapes
Système d'éclairage de passerelle intelligent - Équipe Sailor Moon : Salut ! Voici Grace Rhee, Srijesh Konakanchi et Juan Landi, et ensemble nous formons la Team Sailor Moon ! Aujourd'hui, nous vous proposons un projet de bricolage en deux parties que vous pouvez mettre en œuvre directement dans votre propre maison. Notre système d'éclairage de passerelle intelligent final comprend un ul
Interrupteur d'éclairage télécommandé Bluetooth - Rénovation. L'interrupteur d'éclairage fonctionne toujours, pas d'écriture supplémentaire. : 9 étapes (avec images)
Interrupteur d'éclairage télécommandé Bluetooth - Rénovation. L'interrupteur d'éclairage fonctionne toujours, pas d'écriture supplémentaire. : Mise à jour du 25 novembre 2017 -- Pour une version haute puissance de ce projet qui peut contrôler les kilowatts de charge, voir Retrofit BLE Control to High Power Loads - No Extra Wiring Required Update 15th November 2017 - Certaines cartes BLE / piles logicielles livraient
Éclairage domestique intelligent : 6 étapes
Éclairage domestique intelligent : Bonjour les gars, aujourd'hui, nous allons créer un projet dans lequel nous contrôlons une ampoule en fonction de l'éclairage environnant. Nous allons utiliser PICO et une résistance dépendante de la lumière (LDR) pour détecter la lumière et allumer ou éteindre une ampoule en fonction de l'intensité de l'éclairage