Gradateur de lumière IdO
Internet des Objets Gradateur MQTT Alexa
Le prototype
ATTENDEZ!! Avant de décider de construire ce circuit, il est bon de savoir qu'un variateur similaire est disponible à un coût difficile à battre.
AVERTISSEMENT: certaines personnes essaient de construire ce gradateur avec un optocoupleur avec un « zerocrossing ». Certains se sont même informés dans les magasins d'électronique qu'il vaut mieux utiliser un tel optocoupleur. FAUX. Cela ne fonctionnera qu'avec un optocoupleur sans « zerocrossing ». Tel est le principe de ce gradateur.
La commutation d'une charge CA avec un Arduino est plutôt simple: soit un relais mécanique ou soit un triac combiné à un optocoupleur pour assurer l'isolation électrique.
Cela devient un peu plus compliqué si l'on veut réaliser la gradation d'une lampe sur le secteur (120Vca) avec un Arduino. Le principe est de limiter le courant vers la charge. L'utilisation d'un transistor n'est pas vraiment possible en raison de la grande puissance que le transistor devra alors dissiper, résultant beaucoup de chaleur et il n'est également pas efficace du point de vue de l'utilisation d'énergie.
Les technologies de gradation
Phase-fired control (PFC) (angle de phase)
L'une des façons de réaliser une gradation est de contrôler la phase avec un Triac: le Triac est alors complètement ouvert, mais seulement pendant une partie de l'onde sinusoïdale AC. C'est ce qu'on appelle la coupe du bord d'attaque. On pourrait laisser un Arduino simplement ouvrir le triac pendant un certain nombre de microsecondes, mais cela amène comme problème l'imprévisibilité. Pendant quelle partie de l'onde sinusoïdale le triac va-t-il s'ouvrir et donc ce qui nous amène à dire que le niveau de gradation est imprévisible.
Il faut un point de référence sur l'onde sinusale. Pour cela, un détecteur de passage à zéro est nécessaire. Il s'agit d'un circuit qui indique à l'Arduino (ou à un autre microcontrôleur) lorsque l'onde sinusale passe par zéro et donne donc un point défini sur cette onde sinusale. L'ouverture du Triac après un délai de quelques microsecondes à partir du passage à zéro donne donc un niveau de gradation prévisible.
Pulse Skip Modulation (modulation par saut d'impulsion)
Une autre façon de procéder est la modulation par saut d'impulsion. Avec le PSM, un ou plusieurs cycles complets de l'onde sinusoïdale sont transférés à la charge, puis un ou plusieurs cycles ne le sont pas. Bien qu'efficace, ce n'est pas un bon moyen g'effectuer la gradation des lumières, car il existe un risque de scintillement. Bien que cela puisse être tentant, dans le PSM, il faut toujours laisser passer une onde sinusale complète à la charge, pas une demi-onde, car dans ce cas, la charge sera alimentée en fait à partir de courant DC, ce qui n'est pas une bonne chose pour la plupart des charges AC. La différence entre le PFC et le PSM réside principalement dans le logiciel: dans les deux cas, il faudra un circuit qui détecte le passage par zéro et qui peut contrôler un triac.
Un circuit qui peut jouer ce rôle est facile à construire: le passage par zéro est directement dérivé des lignes AC du réseau, redressé et traité via un phototransistor qui donnera un signal chaque fois que l'onde passe par zéro. Étant donné que l'onde sinusoïdale passe d'abord par un redressement double alternance, le signal de passage par zéro sera transmis, et ce que l'onde sinusoïdale monte ou descende en passant par zéro. Ce signal peut ensuite être utilisé pour déclencher une interruption dans l'Arduino.
Pulse-Width Modulation (modulation de largeur d'impulsions)
La gradation PWM, comme dans les LED, n'est pas effectuée fréquemment avec des charges CA pour un certain nombre de raisons. Par contre cela est possible.
Il va sans dire qu'il doit y avoir une séparation galvanique entre le côté Arduino et tout ce qui est connecté au secteur (120Vca). Pour ceux qui ne comprennent pas la « séparation galvanique », cela signifie en gros « pas de connexions métalliques » donc l'utilisation d'optocoupleurs. MAIS, si vous ne comprenez pas cela, vous ne devriez peut-être pas construire ce montage.
La réalisation
Le circuit illustré ici remplit exactement cette fonction. La tension du secteur (120Vca) est acheminée via deux résistances de 30 k puis vers un pont redresseur qui fournit un signal rectifié à double alternance à un optocoupleur 4N25. La LED de cet optocoupleur devient donc basse avec une fréquence de 120Hz et le signal sur le collecteur monte avec une fréquence de 120Hz, en ligne avec l'onde sinusoïdale du réseau. Le signal du 4N25 est envoyé à une broche d'interruption dans l'Arduino (ou un autre microprocesseur). La routine d'interruption envoie un signal d'une longueur spécifique à l'une des broches de sortie. Le signal de sortie commande une LED et un MOC3021, qui déclenche brièvement l'optothyristor. La LED en série avec le MOC3021 indique s'il y a du courant passant par le MOC3021. Rappelez-vous cependant qu'en gradation cette lumière ne sera pas très visible, car elle est de très courte durée. Si vous choisissez par contre un régime de 100% de la sortie alors la LED s'allumera clairement.
N'oubliez pas que seules les lampes à incandescence ordinaires sont vraiment adaptées à la gradation. Cela fonctionnera également avec une lampe halogène, mais cela raccourcira la durée de vie de la lampe halogène. Il ne fonctionnera pas avec les lampes cfl, sauf si elles sont spécifiquement indiquées pour convenir à un gradateur. Il en va de même pour les lampes LED.
STOP: Ce circuit est connecté à une tension de 120Vca. Ne construisez pas ce circuit si vous n'êtes pas sûr de ce que vous faites. Débranchez-le avant de vous en approcher. La plaque de refroidissement du Triac est fixée au secteur (120Vca). Ne la touchez pas pendant le fonctionnement. Mettez le circuit dans un boîtier approprié.
ATTENDEZ: Permettez-moi d'ajouter un avertissement supplémentaire. Ce circuit est sûr s'il est construit et mis en œuvre uniquement par des gens qui connaissent ce qu'ils font. Si vous n'avez aucune idée ou si vous doutez de ce que vous faites, il y a de fortes chances que vous risquez la MORT! NE TOUCHEZ PAS AU CIRCUIT QUAND IL EST CONNECTÉ.
Liste Matériel
- 1 x Triac TIC206 ou BR136
- 1 x Optocoupler 4N25 ou H11AA1 ou IL250, IL251, IL252, LTV814
- 1 x Optocoupleur MOC3021
- 1 x Pont redresseur 400V
- 2 x Résistance 30k Ohms 1/2 watt
- 1 x Résistance 1k Ohms 5%
- 1 x Résistance 330 ohms
- 1 x Résistance 560 ohms
- 1 x Résistance 10k ohms
- 1 x LED
La version commerciale utilisée
Raccordements
Logiciel
La façon d'utiliser le gradateur est assez simple une fois que l'on comprend les bases suivantes.
En courant alternatif, la puissance fournie à la lampe est directement liée à l'aire totale de l'onde sinusale, la lampe peut être régulée en ne laissant passer qu'une partie prévisible de cette onde sinusale à travers la lampe.
En tant que tels, nous avons besoin d'un point de référence sur ce sinus à partir duquel nous calculons quand la lampe doit être allumée. Le point de référence le plus simple à utiliser est le soi-disant « zero-crossing » ou le moment où la lumière passe par zéro. Après chaque passage par zéro, il y a une moitié complète de l'onde sinusale disponible pour envoyer à travers la lampe.
Donc, ce que le logiciel doit faire est de détecter le passage par zéro, puis d'attendre un certain temps sur cette onde sinusoïdale pour allumer le TRIAC. La fréquence en Amérique du Nord est de 60Hz, donc 60 ondes par seconde.
Chaque onde sinusoïdale prend donc 1000 ms / 60 = 16,6 ms. Comme il y a 2 crêtes dans une onde, cela signifie qu'après chaque détection de zéro, il y a une période de 8,3 ms que nous pouvons réguler. Si nous allumons la lampe directement au début de cette période, la lampe recevra la pleine puissance, si nous le faisons à la fin de cette période de 8,3 ms, la lampe ne recevra aucune énergie et si nous la faisons à mi-chemin, la lampe recevra la moitié de la puissance . Ce que le logiciel doit faire est d'attendre le point zéro de l'onde, d'en prendre note, puis d'attendre un laps de temps spécifié pendant cette période de 8,3 ms pour envoyer une impulsion au TRIAC. S'il envoie cette impulsion à 4,15 ms, la lampe allumera qu'à demi-puissance.
Chargement et configuration du logiciel
Avant de vous lancer, prenez connaissance de ces trois tutoriels:
L'essentiel sur Lolin NodeMCU v3
Téléchargez le projet Arduino suivant:
Veiullez extraire l'archive. Le répertoire idogradateuralexalightx-master apparaît dans l'explorateur de fichiers.
Vous devez copier le répertoire idogradateuralexalightx-master dans un nouveau sous-répertoire qui portera le nom IdOGradateurAlexaLight1 ayant pour répertoire parent Arduino dans votre espace usagé. Renommez également le fichier IdOGradateurAlexaLightX.ino pour IdOGradateurAlexaLight1.ino.
Par la suite, réalisez cinq copies de ce répertoire en incrémentant le chiffre du répertoire de 1. IdOGradateurAlexaLight2, IdOGradateurAlexaLight3, (...) et également celui des fichiers IdOGradateurAlexaLight2.ino, IdOGradateurAlexaLight3.ino, (...).
Ajoutez la librairies suivantes au répertoire libraries
Pour ce faire, allez dans le menu Croquis, Inclure une bibliothèque et Ajouter une bibliothèque .ZIP...
Dans le répertoire libraries éditer les répertoires pour enlever -master.
Par la suite, avec le logiciel Arduino, ouvrez le fichier IdOGradateurAlexaLight1.ino.
Ajustez les paramètres suivants:
Dans le fichier IdOGradateurAlexaLight1.ino
// Change this!!
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
...
// Define your devices here.
espalexa.addDevice("YOUR_DEVICE_NAME", firstLightChanged); //simplest definition, default state off
Dans le fichier hassio_mqtt.h
// MQTT: ID, server IP, port, username and password
const PROGMEM char* MQTT_CLIENT_ID = "YOUR_DEVICE_NAME";
const PROGMEM char* MQTT_SERVER_IP = "HA_SERER_IP_ADDRESS";
const PROGMEM uint16_t MQTT_SERVER_PORT = 1883;
const PROGMEM char* MQTT_USER = "YOUR_USERNAME";
const PROGMEM char* MQTT_PASSWORD = "YOUR_PASSWORD";
// MQTT: topics
const char* MQTT_LIGHT_STATE_TOPIC = "netmedias/YOUR_DEVICE_NAME/status";
const char* MQTT_LIGHT_COMMAND_TOPIC = "netmedias/YOUR_DEVICE_NAME/switch";
const char* brightness_state_topic = "netmedias/YOUR_DEVICE_NAME/brightness";
const char* brightness_command_topic = "netmedias/YOUR_DEVICE_NAME/brightness/set";
Dans le menu Outils et Port:, sélectionnez le bon port série. Ex.: /dev/cu.usbserial-1410
Par la suite, vous pouvez téléverser le croquis.
Une fois le transfert terminé, allez dans le menu Outils et Traceur série. Si la programmation c'est transférée en bonne et due forme, vous devriez apercevoir cet écran.
L'intégration dans Home Assistant
Dans le menu Supervisor, sélectionnez le add-ons Mosquitto broker et allez vérifier le log. Vous pouvez cliquer sur Refresh pour actualiser les informations. Vous devriez voir une nouvelle connexion initiée par le module portant le nom YOUR_DEVICE_NAME qui dans cet exemple est représenté par Light1.
Pour configurer l'intégration dans Home Assistant, sélectionnez File editor, par la suite sélectionnez l'icône Browse filesystem et cliquez sur le fichier configuration.yaml.
Insérez la configuration suivante et ajustez les paramètres pour chacune d'elle.
mqtt:
light:
- name: "YOUR_DEVICE_NAME"
state_topic: "netmedias/YOUR_DEVICE_NAME/status"
command_topic: "netmedias/YOUR_DEVICE_NAME/switch"
brightness_state_topic: 'netmedias/YOUR_DEVICE_NAME/brightness'
brightness_command_topic: 'netmedias/YOUR_DEVICE_NAME/brightness/set'
qos: 0
optimistic: false
mqtt:
light:
- name: "Vestibule"
state_topic: "netmedias/Vestibule/status"
command_topic: "netmedias/Vestibule/switch"
brightness_state_topic: 'netmedias/Vestibule/brightness'
brightness_command_topic: 'netmedias/Vestibule/brightness/set'
qos: 0
optimistic: false
- name: "Chambre 1"
state_topic: "netmedias/Chambre 1/status"
command_topic: "netmedias/Chambre 1/switch"
brightness_state_topic: 'netmedias/Chambre 1/brightness'
brightness_command_topic: 'netmedias/Chambre 1/brightness/set'
qos: 0
optimistic: false
- name: "Îlot"
state_topic: "netmedias/Îlot/status"
command_topic: "netmedias/Îlot/switch"
brightness_state_topic: 'netmedias/Îlot/brightness'
brightness_command_topic: 'netmedias/Îlot/brightness/set'
qos: 0
optimistic: false
- name: "Salle à Manger"
state_topic: "netmedias/Salle à Manger/status"
command_topic: "netmedias/Salle à Manger/switch"
brightness_state_topic: 'netmedias/Salle à Manger/brightness'
brightness_command_topic: 'netmedias/Salle à Manger/brightness/set'
qos: 0
optimistic: false
- name: "Salon"
state_topic: "netmedias/Salon/status"
command_topic: "netmedias/Salon/switch"
brightness_state_topic: 'netmedias/Salon/brightness'
brightness_command_topic: 'netmedias/Salon/brightness/set'
qos: 0
optimistic: false
Enregistrez votre configuration à l'aide de l'icône Save.
Par la suite, sélectionnez le menu Supervisor, sélectionnez l'onglet System et pour terminer le bouton REBOOT.
Une fois le serveur Home Assistant redémaré, sur la page principale, sélectionnez les trois petits points Ouvrir le menu Lovelace UI et sélectionnez Configurer l'interface utilisateur. Cliquez sur l'icône + dans le coin inférieur droit et sélectionnez Entités. Modifier le titre si requis, configurez l'entité à l'aide du menu déroulant d'entité et cliquez sur ENREGISTRER
Fermez l'éditeur Lovelace UI à l'aide du X dans le coin supérieur gauche.
En cliquant sur le nom de l'entité, vous pouvez ajuster la luminosité.
Il est important de confirmer le changement dans le Traceur série du logiciel Arduino quand l'ajustement de l'intensité est effectué dans Home Assistant.