VoltGraph: Le maton du secteur
Pour suivre les variations de tension
Si vous êtes en bout de ligne, loin du transformateur de votre fournisseur d'énergie électrique, ce maton vous montre et enregistre les chutes de tension de votre réseau de distribution, surtout lorsque les éléments à accumulation des voisins se mettent en route dans les heures creuses, ou quand le paysan d'à côté lance son turbo pour décharger le foin . En plus des inconvénients sur certains appareils sensibles , vous avez une puissance contractuelle, en KW/h qui doit vous être fournie (Ce module n'a aucune valeur juridique, mais ça peut inciter à demander une mesure analytique du réseau par un service agrée ).
Simplement en le branchant sur une prise normale, on obtient un bargraph des variations de tension sur plusieurs échelles : 3, 6 12, et 24 heures ... Un bouton poussoir nous fait voyager dans l'affichage et permet également la remise à zéro des données enregistrées. Tout ça sur un afficheur 4 lignes 20 caractères dont la partie droite montre la tension lors de la dernière mesure, la variation positive ou négative par rapport à la précédente, avec extinction du rétro-éclairage si il n'y a pas eu d'écart, dans un soucis de limiter la pollution visuelle. Ce dernier se rallume dès qu'une différence est à nouveau constatée.
L'échelle des mesures est indiquée en bas à droite : c'est le temps qu'il faut pour remplir les 16 cellules. La résolution verticale se partage pour une valeur minimum de 210 volts et maximale de 240 volts. Il est bien évident que si il y a nécessité à élargir cette gamme de mesure, c'est facilement accessible dans la déclaration des variables en début de programme. Mon prototype est monté sur un adaptateur pour rail DIN et enfermé dans un local réservé aux électriciens. Si il devait être à portée de personnes, il conviendrait de le capoter par un double isolement, car certaines parties du fusible et porte fusible sont reliées à des tensions dangereuses afin d'éviter les contacts accidentels .
Comment ça marche ? ==> Le Schéma
Je vais m'abstenir de faire la liste et la description du matériel utilisé, car ceux qui me lisent régulièrement, les retrouvent dans mes autres montages et les descriptifs y sont maintes fois commentés. Pour résumer, il n'y a là que des composants familiers et leur fonction est racontée en faisant le tour du propriétaire: alors allons-y !
Tout commence en bas à gauche, le secteur arrive sur un transformateur, via un fusible de protection de 250mAT (F1), dont le but est d'abaisser la tension, pour retrouver au secondaire de celui-ci une valeur de 9 à 12 volts. Rien de précis à ce niveau car l'adaptation se fera plus loin. Un pont redresseur (B1) charge un condensateur électrochimique de forte valeur 4700µF/25v (C5) pour nous fabriquer un courant continu lisse de U√2 . Deux fonctions pour ce dernier : alimenter la totalité du montage après passage sur un régulateur 5 volts 7805 en TO220 (IC2) avec ses deux condensateurs de stabilisation C5 (220nF) et C7 en sortie (100nF) , et son dissipateur thermique. L'autre fonction, c'est de fournir une tension non régulée, pleine de variations, à l'image de ce qu'est le secteur, qui est ajustée au centième de la valeur de celle du réseau en tournant le potentiomètre de 50K(R5), puis qui sera échantillonnée en 1023 pas, par l'entrée analogique (ADC0) du microcontrôleur. Une diode Zener de 4,7 volts (D1) est là pour veiller à ce que cette entrée n'ait jamais un niveau supérieur à la tension d'alimentation.
Sur la partie gauche de IC1 (ATMEGA328P), une résistance de 10K (R4) maintient l'entrée reset (PC6) inactive en la portant au potentiel VCC . Seul le POR (Power On Reset ) est utilisé à la mise sous tension . Le cadencement, paramétré en horloge externe, est fait par un quartz de 16 MHz (Q1) tiré par ses deux condensateurs de 18pF (C1-C2). Comme on utilise une entrée en analogique, il faut lui donner une référence et c'est le rôle du condensateur de 100nF (C3) sur l'entrée AREF qui , via une régulation interne, stabilise ici la valeur de la tension d'alimentation comme telle. Sur la partie droite du microcontrôleur, la sortie LED (PC5) gère l'allumage ou l'extinction du rétro éclairage à travers une résistance de base de 4K7 (R2) pour rendre conducteur ou pas un transistor BC547 (T1), qui tire les cathodes des leds de l'afficheur à la masse avec une limitation en courant de 100 Ohms (R1). Les sorties PD0 à PD7 s'occupent de l'afficheur câblé en parallèle mode demi-octet, ainsi que du pilotage de la validation (E) et la discrimination instruction / caractère (RS). Le contraste des cellules du display est ajusté par la polarisation de l'entrée VO grâce à une résistance ajustable de 10K(R3) .
La pinuche PD2 ( INT0) est une entrée traitée en interruption pour prendre les changements d'état du bouton poussoir S2. Chaque changement, avec un anti-rebond logiciel, provoque un arrêt de programme et le renvoie à une action définie pour passer en mode 3-6-12-24 heures ou effacer les données enregistrées lors de l'appui à la mise sous tension. Voilà, vous savez tout sur le schéma ...
La Réalisation du Circuit :
Le circuit est réalisé avec EAGLE en simple face comme je le décris dans mes pages . Les dimensions dépassent les formats autorisés par la version gratuite, mais pour de la retouche ou modification ça passe sans soucis. Un seul strap et tous les composants sont dit "traversants" ce qui fait que tous sont sont montés côté bakélite. Le bouton poussoir est placé juste sous le coin supérieur droit de l'afficheur, ce qui permet d'utiliser le trou comme guide du canon plastique d'appui. Deux entretoises assurent la fixation de celui-ci sur le bas et la barrette sécable de connexion pour le haut; c'est suffisant ! Le transformateur est standardisé mais si il devait y avoir un problème d'approvisionnement, rien n'oblige à utiliser ce modèle et cette tension; il suffit de retoucher un peu l'empreinte du composant pour l'ajuster. Comme précisé plus haut, je n'ai pas inclus ce circuit dans un boîtier, mais dans un support de rail DIN. Libre à chacun de faire comme il le souhaite .
Le Logiciel qui fait marcher la machine :
Comme d'habitude, c'est l' IDE Arduino qui m'a servi à développer puis à compiler et exporter un fichier hex à graver dans l'ATMEGA328P, avec un programmateur genre Dataman ou autre. Les commentaires sur chaque ligne du programme nous renseignent sur le cheminement suivi pour l'élaboration. On ne va pas re-commenter ce qui est déjà fait mais simplement s'attarder sur les points particuliers .
Les valeurs mini/maxi qui définissent l'échelle :
#define MIN_VAL 210 //La valeur minimale affichée sur le graphique
#define MAX_VAL 240 //La valeur maximale affichée sur le graphique
Le raccordement de l'afficheur:
LiquidCrystal lcd(6, 5, 4, 3, 1, 0); //Pin LCD: RS,E, D4-D7,RW=0V,
GButton butt1(BTN_PIN);
Validation d'interruption sur un changement d'état:
attachInterrupt(2, isr, CHANGE); // Declenche l'interruption sur un changement d'etat
Effacement des données si le bouton est pressé à la mise sous tension:
if (!digitalRead(BTN_PIN)) { //Réinitialiser les paramètres lors de la mise sous tension avec le bouton maintenu enfoncé
for (byte i = 0; i < 128; i++) base_array [i] = 0; //Efface les données
update_all (); //Ecrit des 0 en EEprom
Calcul de la valeur de la tension appliquée sur l'entrée A0:
value = round (analogRead (A0))*5/10.23; //Résolution sur 5 volts / 1023 pas * tension lue * 100 = valeur
Traçage des colonnes et préparation des données en vue de l'affichage :
void get_data () { //Traçage des 16 colonnes du diagramme sur l'écran
for (int i = 15; i >= 0; i--) {
drawPlot(0, 3, 16, 4, MIN_VAL, MAX_VAL, (base_array[i * interval]));
}
delta = ((base_array[0]) - (base_array[15 * interval])); //Calcul de l'écart (changement de tension) pour l'intervalle sélectionné
screen_data (value, delta, (interval * 3)); //Et affichage d'informations du texte sur l'écran
}
La fabrication des caractères spéciaux (copiée sur un site Russe ) :
void initPlot() {
// Symbols pour graphique : http://maxpromer.github.io/LCD-Character-Creator/
byte row8[8] = {0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};
byte row7[8] = {0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};
byte row6[8] = {0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};
byte row5[8] = {0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};
byte row4[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111};
byte row3[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111};
byte row2[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};
byte row1[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111};
lcd.createChar(0, row8);
lcd.createChar(1, row1);
lcd.createChar(2, row2);
lcd.createChar(3, row3);
lcd.createChar(4, row4);
lcd.createChar(5, row5);
lcd.createChar(6, row6);
lcd.createChar(7, row7);
}
Calcul de la proportion de remplissage des cellules :
infill = floor((float)(plot_array[i] - min_val) / (max_val - min_val) * height * 10);
fract = (infill % 10) * 8 / 10; // Trouver le nombre de bandes restantes
infill = infill / 12;
for (byte n = 0; n < height; n++) { // pour toutes les lignes du graphique
if (n < infill && infill > 0) { // tant que nous sommes en dessous du niveau
lcd.setCursor(i, (row - n)); // remplir les cellules
lcd.write((byte) 0);
}
if (n >= infill) { // Si le niveau est atteind
lcd.setCursor(i, (row - n));
if (fract > 0) lcd.write(fract); // remplir des cellules fractionnaires
else lcd.write(16); // si les cellules fractionnaire == 0, remplir avec du vide
for (byte k = n + 1; k < height; k++) { // tout ce qui est au dessus est rempli de vide
lcd.setCursor(i, (row - k));
lcd.write(16);
}
break;
Les Réglages des Potentiomètres :
Avant l'insertion du microcontrôleur, et avant de brancher le circuit, il convient de prérégler le potentiomètre multi tours R5 (50K) en plaçant le curseur en position médiane, car si par malchance il est trop du côté de la ligne positive, il risque de fumer et de claquer également la diode Zener de 4,7 volts (D1). Ce préréglage étant effectué hors tension, à l'ohmmètre, on peut maintenant raccorder le circuit au secteur, toujours sans l'ATMEGA328. Les vérifications d'usage étant faites, on met un multimètre aux bornes de la D1 en DC et un dans la prise en AC. La valeur lue sur la prise est à reporter au 1/100éme sur l'autre voltmètre en ajustant le potentiomètre R5 ! Exemple : si la tension est de 235 volts AC sur la prise, on règle en tournant à 2,35 volts DC aux fils de la Zener . Le premier est réglé !
N'oublions pas de prérégler l'ajustable de contraste R3 (10K) à environ 3/4 de la course, sinon on ne voit rien sur l'afficheur et on cherche une panne ou un défaut qui n'existe pas, quand l'ATMEGA328P est inséré après programmation : c'est du vécu ! Il suffit après d'en pousser la luminosité à notre goût sans saturer les caractères .
L'Utilisation :
Le circuit terminé et réglé, on le laisse minimum 3 heures sur le secteur pour remplir l'écran de données, puis les dernières entrées chassent les premières au fur et à mesure que le temps passe ... On peut voyager dans les 4 menus pour apprécier la stabilité du secteur (ou pas !). J'ai mis ma valeur mini à 210 et maxi à 240 volts, mais rien n'empêche d'affiner la résolution en limitant ces valeurs dans la partie déclaration de variables du programme ... L'effacement des datas se fait en maintenant le bouton pressé pendant la mise sous tension .
Les Fichiers de réalisation :
Voltgraph (949.56 Ko)
Avec un survolteur-dévolteur, pour exagerer les écarts de tension...
Ajouter un commentaire