P33 Ligthing contactless / "wireless"

De Wiki d'activités IMA
Révision datée du 23 février 2015 à 18:51 par Blafit (discussion | contributions) (Semaine 16 (02/02 - 08/02))

Présentation du projet

Contexte

Mesure et pilotage de la lumière en ON/OFF ou gradation d'une habitation via des gestes significatifs ou via un smartphone.

Cahier des charges

Le But de ce projet est de piloter l'éclairage d'une habitation, le produit devra donc s'alimenter en 220V (P+N) et rentrer dans une boite électrique encastrable standard NF. Le dispositif pourra aussi être caché dans le mur (placo) pour disparaître.

Il doit permettre à l'utilisateur de piloter via des gestes de la main l'éclairage (base Microchip MGC3130):

  • mouvement de la main du haut vers le bas pour éteindre
  • mouvement de la main du bas vers le haut pour allumer
  • rotation de la main pour augmenter ou diminuer la luminosité

L'utilisateur pourra récupérer l'information de consommation électrique sur son smartphone et pourra aussi allumer/éteindre ou faire une gradation tout cela en liaison Bluetooth Low Energy (Bluetooth 4.0).

Présentation des outils

Le PCB de la carte sera développé à l'aide du logiciel Eagle, qui est un logiciel de CAO (Conception Assistée par Ordinateur) de circuits électroniques.

La programmation du microcontrolleur PIC de la carte de démonstration sera faite à l'aide du logiciel MPLAB X.

J'utiliserai le logiciel IAR Embedded Workbench pour programmer la puce Bluetooth Low Energy (BLE) CC2541 de Texas Instrument.

Avancement du projet

Semaine 01 (22/09 - 28/09)

Prise de connaissance du sujet, début de réflexion sur la fonctionnalité du système dans son ensemble.

Semaine 02 (29/09 - 05/10)

Afin de pouvoir connaitre la position et le mouvement de la main, j'utiliserai une puce MGC3130 de Microchip (http://www.microchip.com/wwwproducts/Devices.aspx?product=MGC3130). Ce composant permet de suivre des mouvements dans un environnement 3D grâce à un champ magnétique. Il est contrôlé au moyen d'une communication I2C ou SPI et permettra de capter les mouvement jusqu'à environ 15cm, notre système pourra donc être totalement sans contact.

De plus, afin d'établir la communication BLE, mon choix s'est fait sur la puce CC2541 de Texas Instrument (http://www.ti.com/lit/ds/symlink/cc2541.pdf). Ce choix a été fait en comparaison avec le CC2540 car ce dernier consomme plus de courant et surtout ne comporte pas de bus I2C alors que j'utiliserai celui-ci pour la communication avec le MGC3130. L'avantage de cette puce BLE c'est qu'elle est basée sur un microcontrôleur Intel, le 8051 et permettra donc au moyen de ses entrées/sorties de contrôler tout le système sans la nécessité d'ajouter un microcontrôleur annexe. Ce qui sera un gain de place, de coût mais aussi de consommation.

Semaine 03 (06/10 - 12/10)

Notre produit aura pour but de contrôler un éclairage, or, il existe plusieurs types d'éclairages qui ne seront pas contrôlés de la même façon. Le problème se posera sur la gradation de lumière, car le ON/OFF ne sera en rien différents d'un éclairage à un autre.

  • Ampoule incandescente : c'était l'ampoule la plus courante, aujourd'hui en grande partie remplacée par des ampoules dites "à économie d’énergie". C'est la plus simple à contrôler en gradation car il suffit d'abaisser la tension à ses bornes pour qu'elle éclaire moins et vice versa.
  • Ampoule fluo-compactes (à économie d’énergie) : celle-ci comporte de l'électronique, son contrôle en gradation sera donc plus complexe.
  • Néon : il est généralement utilisé dans les entreprises, les parking, les grandes enseignes. Son fonctionnement est basé sur du gaz, ce qui rend sa gradation quasiement impossible.
  • Ampoule à LED : de plus en plus utilisé, sa gradation se ferait par une régulation en courant.

Il faut donc réfléchir au type d'éclairage visé et aux solutions à mettre en œuvre pour le contrôler.

Semaine 04 (13/10 - 19/10)

La communication entre le microcontrôleur et MGC3130 se fera au moyen du protocole I2C. Ce protocole permet au moyen de 2 fils de communiquer entre plusieurs périphériques, il permet nottement plusieurs maîtres et plusieurs esclaves. Ici aurons un maître, le microcontrôleur et un esclave : le MGC3130.

Description du fonctionnement du protocole I2C :

  • SDA : fil de transmission de données
  • SCL : fil de transmission de l'horloge, celle ci sera générée par le maître. Elle est généralement comprise entre 100kHz et 400kHz

Description de la trame de données (source : Wikipédia):

  • condition de START : le maître génère la condition de start afin de signifier le début de la communication. C'est un passage de la ligne SDA du niveau haut au niveau bas pendant que SCL est à niveau haut.
  • octet d'adressage (sur 7bits) : les 7 premiers bits servent à l'adressage à proprement parlé, le 8ème bit (R/W) permet d'indiquer si le maître souhaite lire ou écrire, 0 pour une écriture, 1 pour pour une lecture
  • acquittement : le récepteur force la ligne SDA à niveau "LOW" (0) pour signaler une bonne réception de l'octet (ACK) ou à "HIGH"pour signaler un problème dans la réception de l'octet (NACK)
  • pause : le recepteur peut forcer la ligne SDA à 0 pour signifier qu'il est déjà occupé.
  • data : données à envoyer, dans le cas d'une écriture ou données reçues dans le cas d'une lecture
  • acquittement
  • stop : le maître génère la condition de stop pour indiquer la fin de la communication. C'est un passage de la ligne SDA du niveau bas au niveau haut pendant que SCL est à niveau haut.

Semaine 05 (20/10 - 26/10)

Dans le cadre de mon CDD au sein d'INODESIGN j'ai créé une carte électronique de démonstration basé sur un PIC16F1713 et la puce MGC3130 accompagnée de quelques LEDs. Je vais donc pouvoir utiliser cette carte pour prendre en main la communication I2C avec le MGC3130.

Installation des outils necessaires au développement sur microcontrôleur PIC :

  • l'environnement de développement utilisé sera MPLAB X, qui est l'environnement officiel de Microchip, celui possède l'avantage de pouvoir être utilisé sur plusieurs système d'exploitations différents (Linux, Windows, OS X).
  • le programmateur sera le MPLAB ICD 3 de Microchip.

Afin de prendre en main les outils et la programmation sur microcontrôleur PIC, j'ai d'abord créé un petit programme afin de contrôler les différentes LEDs.

Semaine 06 (27/10 - 02/11)

Semaine 07 (03/11 - 09/11)

Test de communication I2C, pour faire ces tests j'ai utilisé le module USB vers I2C "C232HM-DDHSL-0". Peu de documentation est fourni avec ce module, néanmoins quelques exemple de code sont présents. J'ai modifié le code afin qu'il communique avec un module I2C très simple, il s'agit d'un driver de LED PCA9532 qui se trouve sur une petite carte électronique comprenant, deux PCA9532 afin de contrôler 8 leds RGB. Malheureusement les tests s'avèrent peu concluant, l'ordinateur ne peut ouvrir une communication I2C. Les drivers utilisé par ce câble étant assez spécifiques, nous avons décidé de commander une nouvelle interface USB/I2C avec laquelle une application de démo est fournie. Cette application permet de communiquer en I2C de manière basique et c'est cela que nous recherchons.

Semaine 08 (10/11 - 16/11)

Réception de l'"USB interface adapter" de Texas Instrument. Début des tests de communication avec la carte de LEDS.

En parallèle, j'ai installé l'environnement de développement Android (ADT) basé sur Eclipse afin de me familiariser avec la programmation Android.

Semaine 09 (17/11 - 23/11)

La communication I2C avec la carte à LED fonctionne bien. J'utilise le logiciel TI Fusion Digital Power Designer qui intègre un programme pour communiquer en I2C via l'USB Interface Adapter. La prise en main du module MGC3130 avec sa librairie GestIC n'est pas chose aisée, en effet la librairie est très fournie ce qui complexifie son apprentissage.

Semaine 10 (24/11 - 30/11)

Recherches sur les différentes façons de faire de la gradation sur des ampoules à incandescences, à économie d'energie et à led. Ces trois types d'ampoules étant celles que l'on trouve le plus dans le commerce. On ne trouve plus beaucoup d'ampoule à incandescence, mais mes recherches m'ont permis de voir que la gradation sur ce type d'ampoule était relativement aisé. En revanche, je n'ai pour le moment pas trouvé le moyen de faire varier l'intensité lumineuse sur des ampoules basse consommation ou des ampoules à LED.

Semaine 11 (01/12 - 07/12)

Recherches sur les différentes solutions pour faire varier l'intensité lumineuse d'ampoule à économie d'energie. Mes recherches m'ont ammené à la conclusion que la manière la plus simple de faire la partie gradateur de mon circuit été de faire un gradateur pour lampe à incandescence/halogène.

Pourquoi ce choix ?

Tout d'abord ce type de gradateur est simple à mettre en oeuvre et peu cher, de plus je sais qu'il existe une manière de faire varier l'intensité lumineuse sur des ampoule basse consommation mais je n'ai pas encore trouvé le moyen. Le prix des variateurs "tout type d'ampoule" que l'on peut trouver dans le commerce est élevé (environ 100euros). Cela signifie que son développement dans notre système aurait un coup élevé et ça n'est pas le but recherché dans le produit final (à l'heure d'aujourd'hui). Pour finir, il existe des ampoules basse consommation compatiblent avec les gradateurs standards, notre système serait donc compatible avec ces ampoules.

Semaine 12 (08/12 - 14/12)

Début de la conception du schéma électrique sous Eagle. Création de certains composants que je n'ai pas encore en librairie. Comme le convertisseur AC/DC Vigortronix VTX-214-001-103 qui permet d'avoir une tension continue de 3.3V à partir de l'alimentation secteur. C'est un composant essentiel de la carte puisque c'est grâce à celui-ci que je vais pouvoir alimenter toute la partie basse tension notamment le module Bluetooth Low Energy. Rédaction du rapport intermédiaire de projet.

Semaine 13 (15/12 - 21/12)

Fin de la rédaction du rapport intermédiaire de projet et soutenance.

Semaine 14 (19/01 - 25/01)

Afin de communiquer avec le MGC3130, j'ai fais un programme Arduino qui me permet de lire la trame envoyé (en I2C) au démarrage de la puce. Après plusieurs essais infructueux, je me suis demandé si la soudure du module sur la carte été bonne. On a donc soudé une autre carte de démo mais seulement avec le mininum pour pouvoir communiquer en I2C (pas de LEDS ni de microcontrôleur PIC). Ceci a résolu le problème, j'ai enfin pu lire la première trame. Celle-ci est une trame qui donnent les informations sur la version du firmware et de la librairie GestIC implantée.

Lien vers la datasheet de la librairie GestIC : http://ww1.microchip.com/downloads/en/DeviceDoc/40001718D.pdf

La trame reçu est la suivante : 84 00 00 83 00 63 80 fa 03 64 00 00 00 00 ....

En l'analysant d'après la datasheet :

  • Les 4 premiers octets forment le header.
    • 0x00 : le flag est à 0
    • 0x00 : le message a été transmis avec le numéro de séquence 0
    • 0x83 : l'identifiant du message est 0x83, c'est bien un message "Fw_version_info"
  • Les octets suivant forment le payload
    • 0x00 : c'est le FwValid, il indique 0x00 c'est à dire qu'il n'a pas de librairie GestIC valide d'installée dans la puce. Si une librairie GestIC était disponible nous aurions 0xAA.
    • 0x63 0x80 : c'est la version du hardware qui est donc 99.128
    • 0xfa : l'adresse de début des paramètres est 250 * 128 = 32000
    • 0x03 0x64 : library loader version : 100.3

Le problème est donc que nous n'avons pas de GestIC library installé dans la puce. Après de longues recherches pour trouver comment solutionner ce problème, en relisant la datasheet plus en détails, il semblerait que la puce ne soit pas livrée avec la librairie intégrée mais seulement un bootloader. J'ai décidé de contacter une personne de la société Microchip afin d'obtenir plus de renseignements sur la solution à adopter.

Semaine 15 (26/01 - 01/02)

Après relance du contact chez Microchip, celui-ci m'a envoyé auprès de ses contacts de Silica. J'attends donc une réponse de leur part, afin de pouvoir continuer sur la partie MGC3130. Parallèlement , de faire des recherches quant au schéma électrique.

Je travaille aussi avec le module BLE au travers d'un projet pour la société Inodesign.

Semaine 16 (02/02 - 08/02)

Après relance du contact chez Silica, celui-ci m'a indiqué que le support pour le MGC3130 est aux US et m'a donc invité à lui refaire ma demande dans la langue de Shakespeare. J'ai aussi continué l'élaboration du schéma électrique mais aussi le développement d'un application Android de démonstration, celle-ci permet de contrôler une sorte de bargraph (composé de 5 leds)afin de simuler la gradation. La carte utilisée est une carte de la société INODESIGN, celle-ci est composée d'un module CC2541 et de quelques leds.

Le fonctionnement de l'application est très simple, au démarrage, elle va regarder si le bluetooth est activé et ouvrira un pop-up afin de l'activer s'il ne l'était pas. Puis il suffira d'appuyer sur le bouton "scan" en haut à droite afin de scanner les gradateurs se situant aux alentours. Un menu option (3 petits points) apparaîtra alors et permettra de sélectionner notre gradateur, la barre de gradation ainsi que le champs de valeur seront ne seront alors plus grisés afin d'être utilisé. Il suffit ensuite de bouger la barre ou d'entrer une valeur pour que les leds s'allument. Aucune leds correspondant à une valeur de 0 à 50 et 5 leds à une valeur entre 200 et 255.

Android 1.png Android 2.png Android 3.png 3 leds.png

Notre système n'est pas toujours détectable par un périphérique, afin de le rendre détectable il suffit d'appuyer sur le bouton poussoir et la led au milieu s'allumera alors, lorsque la connexion sera effectuée c'est la led rouge qui s'allumera. Puis lorsque l'on aura commencé à envoyer des valeurs elles ne seront plus utilisées que pour l'indication de gradation et non de statue de connexion.

Attente connexion.png

Semaine 17 (09/02 - 15/02)

Le schéma de la carte électronique finale est terminé, celui-ci se divise en 3 parties :

  • Basse tension 3.3V : celle-ci comporte le module bluetooth low energy (cc2541) et le module de suivi de gestes. Le CC2541 embarquant un microcontrôleur 8051, c'est lui qui gérera toute la carte. Il communiquera avec le MGC3130 par un bus I2C, on utilisera 2 IO pour gérer des leds de notifications ainsi qu'une IO pour la gradation, un autre IO sera utilisée en interruption externe (son but sera expliqué dans la partie "zero crossing"). La puce MGC3130 sera relié à des électrodes afin qu'il puisse générer et mesurer le champs électrique nécessaire.
  • Partie filtrage secteur : notre carte électronique utilisant la tension 230V du secteur, un filtre est nécessaire afin d'éviter des propagations de parasites que ce soit dans le sens secteur -> montage ou dans le sens inverse, de notre montage vers le secteur. De plus, nous utiliserons un triac afin de "découper" la tension secteur et celui-ci est source de parasites. Nous allons devoir filtrer des courants des deux modes différents, à savoir, les modes différentiel et commun.

Afin de filtrer les courants parasites de mode différentiel, j'utiliserai un condensateur de type X2 qui sera connecté entre la phase et le neutre, j'y ajouterai une résistance en parallèle afin de décharger la capacité plus rapidement.

Pour les courants de mode commun, j'utiliserai une paire de condensateur de type Y. Ceux-ci seront reliés à la terre, ce qui permettra d’amener les courants parasites de mode commun à la terre. Afin de parfaire ce filtrage, une inductance de mode commun est obligatoire.

En plus du filtrage, une varistance est utilisée afin de protéger notre circuit contre les surtensions, on y ajoutera une diode transil placée après l'inductance de mode commun afin de filtrer les dernières surtensions pouvant encore apparaitre.

Nous connecterons le convertisseur AC/DC (230V -> 3.3V) en sortie du filtre.

  • Partie gradateur : pour la partie gradation de lumière, nous utiliserons un montage à base de triac. Le principe de fonctionnement va être de découper la tension secteur, le but sera de ne laisser partie qu'une partie de la tension secteur afin d'allumer l'ampoule avec plus ou moins de puissance. Pour déclencher le triac, j'utiliserai un optotriac, ce qui permettra d'avoir une isolation galvanique, indispensable à cause de la tension secteur. La partie émettrice de l'optotriac est reliée par le biais d'une résistance à une IO du CC2541. La partie réceptrice sera donc reliée par le biais d'une résistance à la gâchette du triac. L'utilisation d'un triac requiert d'y ajouter, en parallèle, un filtre snubber, celui-ci ne serait pas indispensable pour le triac utilisé puisqu'il est indiqué snubberless. Le filtre snubber permet de filtrer les parasites générés par le triac. L'ampoule sera placée en sortie de ce montage.
  • Partie zéro-crossing : le fonctionnement du triac est tel que lorsqu'on le déclenche, il laisse passer le courant jusqu'au prochain passage par 0. Par conséquent, il va falloir détecter ces passages par zéro afin de commander le triac au bon moment. Ce montage sera assez simple, il sera basé uniquement sur des résistances et un optocoupleur. L'optocoupleur permet une isolation galvanique indispensable, la tension secteur sera relié par le biais de résistances à l’émetteur de l'optocoupleur. Nous avons determiné approximativement la valeur des résistances par calcul (un courant de 2mA étant suffisant pour déclencher l'optocoupleur) puis nous avons fait des tests afin d'observer l'allure de l'impulsion générée par les passages par zéro, plus on augmente la résistance plus la largeur de l'impulsion est grande et moins la mesure sera précise. Cette impulsion déclenchera une interruption qui démarrera un timer.
Fonctionnement global

Pour résumer, le fonctionnement global de la carte sera le suivant :

  • détection du passage par 0
  • lancement d'un timer plus ou moins long en fonction de la luminosité souhaitée, plus le retard sera long et moins la lampe éclairera.
  • à la fin du timer on déclenche le triac qui sera ouvert jusqu'au prochain passage par 0 puis nous recommencerons.
  • l'utilisateur pourra faire varier l'intensité lumineuse par gestes ou par bluetooth.

Semaine 16 (16/02 - 22/02)

Routage de la carte électronique, ce routage n'est pas simple puisqu'il faut prendre en compte les contraintes liées au 230V. La contrainte la plus compliquée est d'avoir toujours 3mm entre tout ce qui touche au 230V et le reste de la carte mais aussi entre la phase et le neutre. Pour arriver à rentrer dans les dimensions d'un interrupteur, la carte ne devra pas excéder 65mm*65mm, ce qui amène une contrainte supplémentaire non négligeable.

Afin de pouvoir respecter ces contraintes, j'ai du modifier quelques composants afin de les trouver en CMS, puisque tous les composants (hormis les leds et le bouton poussoir) devront se situer sur le côté bottom de sorte d'avoir le côté top pour les électrodes. Je n'ai malheureusement pas pu tout trouver en CMS, c'est le cas du convertisseur AC/DC qui n'existe pas en CMS. Ceci amène comme problème qu'il faudra mettre un revêtement isolant sur le top afin qu'un utilisateur ne puisse pas "toucher" la tension secteur.

Il aura fallu la semaine complète pour router cette carte afin d'obtenir un résultat satisfaisant, le placement des composants vu compliqué à trouver au vu du respect des contraintes. Ce placement est très précis puisqu'un déplacement de moins d'un quart de mm( pour beaucoup de composants) suffit à ne plus avoir les 3mm.

Durant cette semaine j'ai aussi eu la réponse de Silica en ce qui concerne le MGC3130, celle-ci confirme que la puce n'est livrée qu'avec un bootloader. Afin de la programmer il faut le Hillstar I2c USB bridge, celui-ci ne se trouve qu'avec le kit de développement Hillstar que l'on peut trouver pour 160€. Je n'aurais donc malheureusement pas le temps programmer la puce avant la date de rendu du projet, mais ceci sera repris par la suite au sein de l'entreprise.

Rédaction du rapport de projet.

Semaine 16 (23/02 - 27/02)

Fin de la rédaction du rapport.

Tournage de la vidéo.

Soutenance.

Rendus

Rapport intermédiaire : Fichier:Rapport Benjamin Lafit.pdf