Table des matières:

NexArdu : Contrôle intelligent de l'éclairage : 5 étapes
NexArdu : Contrôle intelligent de l'éclairage : 5 étapes

Vidéo: NexArdu : Contrôle intelligent de l'éclairage : 5 étapes

Vidéo: NexArdu : Contrôle intelligent de l'éclairage : 5 étapes
Vidéo: Nouvelle norme EN 17-037 en éclairage naturel - Webinaire du Cluster Lumière 2024, Juillet
Anonim
NexArdu: Contrôle intelligent de l'éclairage
NexArdu: Contrôle intelligent de l'éclairage

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:

  1. Contrôle d'éclairage automatisé
  2. 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:

  1. Un Arduino Uno (testé sur R3)
  2. Un blindage Ethernet Arduino
  3. Un poste Nexa ou similaire fonctionnant à 433,92 MHz
  4. Un capteur PIR (Passive InfraRed) fonctionnant à 433,92MHz
  5. Une résistance de 10KOhms
  6. Un LDR
  7. Un RTC DS3231 (version serveur externe uniquement)
  8. Un émetteur 433,92MHz: XY-FST
  9. Un récepteur 433,92MHz: MX-JS-05V

Le minimum recommandé est:

  1. Un Arduino Uno (testé sur R3)
  2. Un poste Nexa ou similaire fonctionnant à 433,92 MHz
  3. Une résistance de 10KOhms
  4. Un LDR
  5. 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…

Le circuit…
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:

  1. Associez le récepteur Nexa à la télécommande.
  2. Chargez Nexa_OK_3_RX.ino sur l'Arduino et ouvrez le "Serial Monitor".
  3. Appuyez sur le bouton de la télécommande qui contrôle le récepteur Nexa.
  4. Notez le "RemoteID" et le "ButtonID".
  5. 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

Informations précieuses
Informations précieuses
Informations précieuses
Informations précieuses

Bon à savoir comportement

  1. 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:

    1. Evely: Arduino attend que la nuit vienne.
    2. Actif: la nuit est venue et Arduino a allumé les lumières.
    3. 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.
    4. Dormant: la nuit passe, Arduino a éteint les lumières et Arduino attend que l'aube se réveille.
  2. 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.
  3. 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.
  4. 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.
  5. En état de somnolence, les lumières peuvent être allumées/éteintes avec une télécommande. L'Arduino ne s'y opposera pas.
  6. 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.
  7. 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.
  8. 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".
  9. 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.
  10. 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

  1. 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.
  2. Le code qui exploite le serveur interne -utilisé par moi à la maison, fonctionne maintenant depuis février 2016 sans problème.
  3. 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.
  4. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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é

Fini!
Fini!

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é: