Contrairement à un ordinateur classique, l'arduino est prévu pour commander des processus. Il dispose d'entrées et de sorties analogiques et numériques. |
-
Après quelques expériementations avec un arduino, Il m'est venu à l'idée de remplacer la commande par ordinateur par une commande par arduino. Tant que le chauffage central fonctionnait parfaitement, je n'ai pas fait la transformation. Mais quand je suis passé au chauffage par convecteur à gaz, j'en ai profité pour rendre le fonctionnement automatique.
Mon premier circuit avec un arduino était la commande d'une horloge avec des tubes nixie qui a été construit avec des composants de récupération. C'est un schéma totalement unique, basé sur les composants dont je disposais. Par après, j'ai même ajouté une fonction de mesure de la température.
Pourquoi utiliser un arduino?L'arduino est nécessaire pour réduire la zone morte entre l'enclenchement et le déclenchement (à l'origine la zone faisait 4°). Mon but est d'arriver à une oscillation de moins de 1° (qui ne se remarque pas).J'utilise un petit servo-moteur pour commander le thermostat. Tous ces petits moteurs qui sont utilisés dans les maquettes ont les mêmes paramètres de fonctionnement: une tension d'alimentation de 4.8 à 6V (la tension de 4 ou 5 accus NiCd) et un fonctionnement sur 180° (ce qui est suffisant pour commander le thermostat). La commande du moteur est standardisée: il s'agit d'un signal à modulation de la largeur d'impulsion. L'impulsion fait 1 à 2ms pour un déplacement de 180°, avec une impulsion de 1.5ms le moteur se place à 90°. Sur le site d'arduino, on peut installer une routine qui produit l'impulsion correcte: il suffit d'indiquer le port de sortie qu'on veut utiliser. Le système de régulation fonctionne avec trois températures de consigne, 19° (présent), 16° (nuit) et 12° (absent) avec possibilité d'ajouter ou de retrancher un degré. Quand une température est sélectionnée, le moteur se place dans une certaine position absolue qui dépend de la température choisie. A ce moment, la fonction du thermostat du convecteur est utilisé normalement. Petit à petit, la position du thermostat est corrigée: le thermostat est alors commandé comme s'il s'agissait d'un robinet classique. Le passage d'un mode de fonctionnement se fait graduellement en 20 minutes (c'est amplement suffisant pour obtenir la température voulue). Lentement, le positionnement devient relatif: si la température de consigne n'est pas atteinte mais que le chauffage ne fonctionne pas, le thermostat est augmenté d'un cran (et inversément). La position absolue du thermostat ne joue plus, la position du thermostat est modifiée pour limiter l'hystérésis. Un décompte de 20 à 0 (en minutes) détermine la vitesse à laquelle la correction s'effectue. Pour la mesure de la température, j'ai d'abord utilisé un Pt1000 (on voit que je travaille dans l'industrie) puis je suis passé à un capteur qui fournit une tension de 10mV/degré et qu'il est plus facile de corriger. L'ampli opérationnel a une fonction dérivée pour compenser l'inertie du capteur. La tension qui est envoyée à l'arduino correspond à la température de la pièce, pas à celle du capteur. Quand le servo-moteur ne doit pas fonctionner, c'est que la température désirée est atteinte. En pratique il y aura toujours une légère oscillation, car le circuit compense la zone morte importante. La possibilité de stocker automatiquement la meilleure valeur (position du servo pour une température donnée) n'a pas été activée, il est par contre possible de la modifier manuellement. Quand la demande en chaleur devient moindre, le bruleur se met a l'arrêt et la température de la pièce commence à diminuer. Le logiciel remarque cette condition et va augmenter le thermostat pour éviter une oscillation trop prononcée de la température. La condition inverse est également corrigée: mise en route du bruleur et augmentation de la température. Cette correction agit rapidement une fois que le temps de latence est passé (temps en fonctionnement sans boucle de contre-réaction quand une température est sélectionnée).
CommandeL'arduino n'a pas d'écran LCD ou OLED, il n'a pas de clavier, il n'a que des entrées et sorties. Il faut donc prévoir soi-même un moyen de communiquer avec la bête. La programmation est très proche du language-machine (c'est du C assez limité).Nous avons un indicateur de fonction avec 8 leds (niveau haut actif) et 8 boutons poussoirs qui sont lus via les mêmes lignes. Les leds indiquent les conditions de fonctionnement (menu principal) ou le mode de programmation activé.
Les boutons poussoirs ont des leds qui indiquent qu'une fonction est activée (menu principal). Il y a également un mode de fonctionneemnt manuel où le thermostat est mis dans une position et n'est plus modifié. La fonction Tboost est utilisée pour augmenter momentanément le chauffage pour couper le froid (sans modifier la température de consigne). Au bout de 10 à 15 minutes le servo moteur retourne à sa position normale (fonctionnement automatique normal). Quand on appuie sur la fonction PID, on arrive à un second menu.
Les leds des boutons 2, 3, 7 en 8 peuvent être allumés, ils indiquent que la fonction est sélectionnée et peut être modifiée par les boutons ++ et --. La led 6 clignote pour indiquer qu'on se trouve dans le menu pid. Le second menu permet la modification des paramètres su servo-système:
Les 8 lignes permettent à la fois de commander les leds et de lire l'état des boutons poussoirs. Une fois par seconde toutes les leds sont éteintes et allumées une par une. A ce moment, l'entrée analogique est lue. Si le bouton correspondant est enfoncé, on obtient une valeur positive. L'utilisation d'une entrée analogique permet éventuellement de lire une seconde rangée de boutons (en utilisant une autre série de résistances, mais il n'est pas fait usage de cette possibilité. Après la lecture des boutons, les lignes sont à nouveau utilisées pour commander les leds, l'interruption est à peine visible et forme une indication que le programme tourne normalement. En mode programmation, les touches ++ et -- sont scannées plus rapidement pour permettre une modification plus rapide des paramètres. DisplayNous utilisons un écran LCD à commande sérielle à 9600 baud, 4 lignes de 20 caractères. Le contenu de l'écran ne change que peu selon le mode de fonctionnement: celui-ci est indiqué par les leds. Il s'agit d'un exemple d'affichage à droite.
ElectroniqueL'electronique est décrite sur une page séparée
Ports Arduino
Servo loop et température du bruleurPour corriger éventuellement la position du thermostat, je dois savoir si le brûleur est en fonctionnement ou non. Il n'y a pas de feed-back du thermostat à l'arduino: je dois utiliser un capteur supplémentaire. Le tuyau d'évacuation des gaz brûlés est assez fin et chauffe rapidement. En 5 à 10 secondes, le capteur peut déterminer une modification.L'importance de ce réglage est expliquée par la situation suivante: nous avons une température t16 (nuit), mais il ne fait pas vraiment froid dehors et la température de la pièce ne descend pas à la valeur de consigne. Une régulation sans intelligence tenterait constamment de réduire la position du thermostat, ce qui n'est pas le but. Quand il y a alors une demande de chaleur, le thermostat se trouve à la position minimale et il faut deux minutes pour qu'il passe à une position moyenne (cette lenteur est prévue pour réduire les dépassements (overshoot)). Un autre exemple: je rentre le soir, il fait très froid et la température de consigne met plus de 20 minutes à être atteinte: cela ne sert à rien de modifier la position du thermostat si le bruleur travaille déjà à haute puissance. Il n'est pas nécessaire d'avoir une mesure précise de la température de la buse: ce qui est important, c'est de savoir si le bruleur est en fonctionnement ou non (et éventuellement en mode de fonctionnement à haute puissance).
Arduino et APIOn voit bien que l'arduino est en fait un API miniature, il ne lui manque qu'un interface plus solide pour en faire un automate programmable industriel (sorties et entrées numériques avec des relais). La programmaton en boucle sans fin ressemble également à la programmation d'un Siemens Simatic (mais en plus simple).Un point négatif de l'arduino c'est qu'il ne permet pas de détecter un flanc, il faut utiliser une seconde variable. Simatic permet un PTC (Positive Transition Sensing) et NTC (Negative Transition Sensing). A droite les symboles LD (ladder diagram) les plus utilisés: on voit les contacts qui génèrent une seule impulsion positive lors d'un flanc positif ou négatif. On attend maintenant que quelqu'un produise un interface qui puisse transformer le LC en instructions pour l'arduino. Je crois que cela pourrait attirer plus d'amateurs vers l'arduino, qui hésitent à cause de la programmation en C. Pour permettre aux utilisateurs de faire leurs premiers pas, les examples sur le site d'arduino sont extrèmement simples, mais dès qu'il faut écrire un programme un peu plus complexe, cela coince. C'est ici que la programmation en ladder pourrait aider, par exemple pour les électriciens qui sont habitués de travailler avec des relais et des contacts. Le logiciel est décrit sur cette page. Il est encore en modification. |
Publicités - Reklame