Un enregistreur de données et évènements autour de son compteur d'électricité

Introduction

Ce document se propose de décrire une application à base de microprocesseur destinée à afficher et à enregistrer des données et des évènements produits par le compteur d'électricité ou le réseau électrique. Les données sont enregistrées sur un support mémoire de type carte SD (SD = Secure Digital) (mémoire utilisée dans les appareils de photos numériques) afin de pouvoir être facilement transportées et exploitées sur une autre machine.

Pour ce faire, on utilise les informations présentes dans le signal de téléinformation produit par les compteurs électroniques et le signal de télécommandes émis périodiquement sur le réseau électrique.

Attention: c'est un projet en cours de réalisation !!!

Prérequis

Le signal de téléinformation n'est disponible que sur les compteurs électroniques. Il est ensuite nécessaire de tirer une ligne du genre ligne téléphonique entre le compteur et le montage en respectant les instructions du document [1].

Caractéristiques

Schéma et description matérielle

On notera pour commencer que l'enregistreur été implémenté dans un ancien boitier modem et qu'une partie de ses composants ont été réutilsés. Il s'agit du circuit d'alimentation et du circuit de réception du modem, celui ci ayant des caractéristiques sensiblement semblables à celles nécessaires pour la réception du signal de téléinformation.

L'objectif de l'alimentation est de fournir du 3.3 Volts, ceci est imposé par la carte SD. Un régulateur à découpage MC34063 permet de le réaliser avec peu de composants, tout en permettant de réutiliser, sans autre modication, le circuit d'origine. Un strap permet de faire fonctionner l'alimentation en 5 volts. Utilisée au début du projet (avant l'installation de la carte SD), cette fonctionnalité s'est avérée inutile par la suite.

Un enroulement supplémentaire d'une soixantaine de spires a été bobiné à la main, pour permettre le prélèvement du signal de télécommande. Un potentiomètre en ajuste le niveau à l'entrée du convertisseur A/D.

Le signal de téléinformation, provenant du compteur électrique, est appliqué à l'entrée du compteur/timer T0 du microprocesseur. Le transfo T2 effectue l'isolement galvanique demandé par le document [1]. Les éléments de protection du modem sont conservés, ils peuvent être utiles en cas ligne longue et en cas d'orage.

L'interface de la carte SD ne comporte que, un support et quelques résistances de polarisation. Elle est directement connectée à l'interface SPI du microprocesseur. Un transistor a pour but d'alimenter ou non la carte SD. Une recommandation des spécifications sur la carte SD [7] indique qu'il faut éviter de laisser les entrées ouvertes lorsque le circuit est alimenté.

Tant qu'on y est, on rajoute quelques leds pour afficher la couleur du jour tempo.

Enfin, le microprocesseur utilisé est un AVR atmega644. Sa caractéristique principale dans le contexte de ce projet c'est d'avoir 64 Koctets de mémoire flash. A l'heure où j'écris plus de 32 Koctets sont utilisés.

photo de l'enregistreur

Logiciel

Le logiciel intégre le logiciel de décodage des trames tempo décrites dans la page Récepteur de télécommandes pour le signal Tempo EDF. Quelques modifications ont été apportées pour permettre de travailler en non bloquant et donc laisser les autres fonctions travailler à leur tour.

La fonction de décodage de la téléinformation a aussi été décrite dans la page Utiliser son PC pour relever son compteur d'électricité. Dans ce projet la demodulation ASK était matérielle et nécessitait un uart pour lire l'information. Ici, ces fonctions existent bien encore, mais elles sont réalisées en logiciel et décrites dans la page Démodulation ASK par un microprocesseur.

Le logiciel contient un mini interpréteur de commandes permettant d'inter réagir à partir de la liaison série et un terminal. Il donne accès, entre autres, au bootloader qui permet de télécharger le code dans la mémoire flash du micro. On peut aussi rapatrier les fichiers stocker sur la carte sd.

Puisque on dispose de la date et de l'heure, il est possible de déclencher des actions à une date donnée. Cette fonction existait déjà dans la réalisation tempo, mais est sans douteà repenser.

Horloge temps réel

Lorsque que l'on veut enregistrer des données, il semble essentiel de commencer par d'enregistrement de la date et l'heure de l'évènement. La date et l'heure, c'est juste un mot de 32 bits incrémenté toutes les secondes avec une stabilité suffisante puisque provenant d'un oscillateur piloté par quartz. De plus, on profite de la réception des séquences tempo pour réactualiser cette heure.

Mais en cas de coupure de courant, cette information est perdue puisque le système s'arrête. On aurait pu utiliser le timer 2 du processeur pour réaliser une horloge temps réel. Mais la ressource est déjà utilisée et la fonction a été reportée vers un processeur auxiliaire dont le rôle est de maintenir l'heure même en cas de coupure de courant.

Une interface I2C permet de communiquer par messages avec ce processeur. Au reset, par exemple, on lui demande l'heure et après une réception tempo et en cas de décalage on lui envoie une remise à jour.

Si la gestion de l'heure par un mot de 32 bits est très simple pour la programmation, il n'en reste pas moins que ce n'est pas tès lisible pour un utilisateur et des fonctions de conversion sont nécessaires. Elles sont réalisées par les fonctions u8tm_mktime, u8tm_gmtime qui sont analogues aux fonctions gmtime, mktime de Linux, mais la taile des champs de la structure U8Tm est réduite au minimum: voir le fichier u8tm.h.

Des commandes simples, come D, y, h permettent, par la liason série, de lire la l'heure et la date, de modifier la date, de modifier l'heure. Mettre à jour la date avant de mettre à jour l'heure.

Interface FatFs

l'interface FatFs est un produit tout fini de Monsieur ChaN au Japon, voir [5]. Il consiste en une bibliothèque de fonctions pour gérer des fichiers dans un système fe fichier de type FAT, système utilisé sous Msdos. Elle est écrite pour les AVR dans les fichiers fatfs.c, fatfs.h, integer.h initialement ff.c et ff.h (je les ai renommés !). Un fichier de configuration ffconf.h permet d'ajouter ou retirer des fonctionnalités pour s'adapter au niveau du projet.

Il fournit également 2 autres fichiers diskio.h et mmc.c qui implémente l'interface de bas niveau entre FatFs et, dans le cas présent, MMC/SD sur le port SPI du microprocesseur. Le fichier mmc.c est à modifer pour s'adapter au processeur et aux ports E/S utilisés.

Lorsque l'application a quelque chose à écrire, elle ouvre le fichier du jour dans le répertoire du mois. Si le fichier ou le répertoire n'existe pas il est créé. Elle appelle, ensuite, la fonction d'écriture puis de fermeture du fichier tout à fait comme sur n'importe quel OS. Merci Monsieur ChaN.

Commandes d'accès par la liaison série:

Utilisation de carte SD

La carte SD a besoin d'être formatée avant d'être utilisable. Le logiciel FatFs permet un formatage certainement suffisant pour y écrire des fichiers mais insuffisant pour pouvoir monter et donc utiliser le disque SD sous linux. Pour compenser cela, Linux possède une commande mkdosfs qui va faire le formattage d'une façon plus complète. Il suffit d'insérer la carte dans un lecteur de carte, lui même insérer dans une prise USB et de lancer la commande suivante:

mkdosfs -n DLOGGER /dev/sdb1

L'option -n permet de donner un nom au volume, ici DLOGGER. C'est sous le nom /media/DLOGGER que sera monté le volume ultérieurement à chaque insertion et c'est dans ce répertoire que l'on retouvera tous les répertoires et fichiers créés sur la carte.

Support de carte SD

L'utilisation d'une carte SD se fait mieux dans un support. Or les supports sont difficiles à trouver et quand on les trouve, c'est toujours à des prix défiant toute non concurrence. Un jour en cherchant des supports, mon gogol préféré m'a envoyé vers cet article SD/MMC card fits in floppy edge-connector qui m'a convaincu d'essayer avec le même genre de connecteur.

connecteur pour carte SD

La première chose à faire, c'est d'enlever les contacts. Il suffit de pouuser la petite languette qui retient le contact et en même temps de pousser le contact d'arrière vers l'avant.

Ensuite si on présente les contacts de la carte en face de l'emplacement des contacts du connecteur, on constate que les guides de contact de la carte sont en face des guides de contact du connecteur et empêche la carte de rentrer. Le reste du travail consiste à limer les guides du connecteur pour permettre à la carte de rentrer librement. Couper pour enlever l'inutile, percer si nécessaire...

Remettre les contacts du coté des guides limés. Ne pas enfoncer complètement le premier et couper le 9 ième par la moitié avec une pince coupante.

Insérer votre carte en la regardant du coté contacts.

carte dans le support

Outils de développements

Le logiciel est développé sur un systeme Linux Fedora FC13. Pour ce faire, il est nécessaire de disposer d'un compilateur spécifique pour les AVR et installer les paquets suivants, qui ne sont pas installés par défaut :

Une fois le programme compilé, il peut être téléchargé dans la mémoire flash du microprocesseur à l'aide du logiciel pgrm et sa fonction terminal permet d'en controler le fonctionnement. Attention cependant la première fois il faut procéder autrement : voir les pages relatives à pgrm.

Le schéma est créé avec gschem qui fait partie de la suite gEDA. Si vous souhaitez modifier le schéma, vous en aurez sans doute besoin ainsi que la bibliothèque de symboles gedasym.

Compilation

Vous avez besoin des outils de développement précédemment cités:

tar zxvf dlogger-yyyymmdd.tar.xz
cd dlogger-yyyymmdd
make

A investiguer

Dans le montage présenté, le prélèvement du 50 Hz est fait par un enroulement supplémentaire d'environ 60 spires sur le transfo. Ceci n'est pas évident à réaliser sans démonter le transfo. L'idée serait donc d'utiliser l'ADC en différentiel avec un gain de 10, ce qui permettrait de réduire le nombre de spires à 6, ce qui est déja plus réalisable sans démontage.

Références Documentaires

  1. Spécification techniques du signal de téléinformation.
  2. Utiliser son PC pour relever son compteur d'électricité.
  3. Récepteur de télécommandes pour le signal Tempo EDF.
  4. Démodulation ASK par un microprocesseur.
  5. FatFs Generic File System Module.
  6. Présentation et liens sur la carte SD à wikipedia.
  7. SanDisk Secure Digital Card - Product Manual.

LICENSE

The Dlogger software is licensed under the terms of the GNU General Public License as published by the Free Software Foundation. See the file "COPYING" in the "dlogger" directory.

Download