Réveil "Lever de Soleil"

Principe de fonctionnement

C'est un réveil qui simule le lever du Soleil, c'est à dire que quelques minutes avant de déclancher l'alarme, il éclaire avec une intensitée qui augmente progressivement.

Le réveil est construit autour d'un microcontrolleur MSP430G2553 compatible avec le MSP430 Launchpad de Texas Instrument.
Il possède un module de réception DCF77 qui permet le réglage automatique de l'heure.
L'affichage se fait par un écran LCD de 4 lignes de 40 caractères piloté par un controlleur HD44780.
L'éclairage est produit par un esemble de LEDs blanche dont la lumière diffuse à travers la face avant translucide du réveil.
L'alarme sonore est une mélodie jouée par deux haut-parleurs.

Principe de fonctionnement du réveil

Télécharger le schéma (in)complet du réveil : (pdf)(png)

Le microcontrolleur MSP430G2553

Le MSP430G2553 de TI est un microcontrolleur 16 bits à très faible consommation. Je l'ai choisi pour plusieurs raisons :

L'écran

L'affichage se fait par un écran LCD alphanumérique de 4 lignes de 20 caractères avec un controlleur HD44780. Pour une meilleure visibilité les chiffres de l'heure sont affichés sur une hauteur de 3 lignes par le biais de quelques caractères personnalisés. Les autres informations et les menus sont affichés sous forme de texte.

Pilotage de l'écran

Même si le MSP430G2553 possède plus de ports d'entrée-sortie que la plupart de ses congénères, il en manque encore un ou deux pour ce projet. En mode 4 bits, un afficheur contrôleur HD44780 a encore besoin de 6 signaux de commandes : D4,D5,D6,D7, RS (Data/Command) et E (Horloge). Pour de réduire le nombre de ports occupés sur le microcontrôleur, j'ai ajouté un registre à décalage série→parallèle MC14094(pdf) qui permet de contrôler 8 sorties numériques à partir de 2 entrées (au minimum Data et Clock)

Les lignes de données du HD44780 sont contrôlées par le biais du registre à décalage et l'horloge (E) reste contrôlée directement par le microcontrôleur. Cela permet de fournir les données à l'écran avant le front d'horloge.

Réglage du contraste

Ce type d'afficheur LCD possède une broche V0 (ou VE) qui permet d'ajuster le contrast de l'affichage, il est généralement suffisant de connecter une résistance variable entre cette broche et la masse pour régler le contrast. Cependant le contrast de l'écran que j'ai utilisé était encore très faible même lorsque V0 était connecté directement à la masse. Cela veut dire qu'il faut fournir à V0 une tension négative.

Cette tension négative est produite par un petit montage de type pompe de charges.

Fonctionnement d'un montage pompe de charges

L'entrée est connectée à une broche du microcontrolleur qui fournit une tension en créneaux oscillant entre +3V et 0V.

Le résultat d'un cycle est que l'armature supérieure de C2 se charge négativement et donc il apparait une tension négative (-U) à ses bornes. On comprend pourquoi ce montage s'appelle pompe de charges : L'oscillation de la tension aux bornes de C1 permet de pomper les charges dans le condensateur C2
Le raisonnement ci-dessus est fait sur des pseudo charges positives (les charges conventionnelles en électricité). Il ne faut pas oublier que ce sont les électrons négatifs qui conduisent le courant, l'explication ci-dessus reste tout de même valable si on change le sens des flèches !

Rétro-éclairage

Le rétro-éclairage est commandé par modulation de largeur d'impulsion (PWM pour Pulse Width Modulation) par le microcontrôleur. Cela permet de régler l'intensité lumineuse de l'affichage et des fondus lors de l'allumage et l'extinction du rétro-éclairage.

Mise à l'heure automatique (DCF-77)

J'ai récupéré un module de réception du signal DCF77 dans un vieux réveil (oui, j'ai démonté un réveil pour fabriquer un réveil !) et je l'ai intégré à ce projet. Le signal DCF77 est émis sur une fréquence porteuse de 77.5 kHz depuis l'Allemagne. Il est modulé en amplitude pour transporter l'heure légale basée sur une horloge atomique.

Les informations sont transmises sous forme binaire, à la vitesse de un bit par seconde. Au début de chaque seconde, l'amplitude de la porteuse est abaissée à 25% de son amplitude maximum, elle remonte à 100% après 100 ms pour transmettre un '0' ou après 200 ms pour transmettre un '1'. La 59e seconde n'est pas modulée pour marquer le début de la minute suivante. L'heure en elle-même est codée à partir de la 20e seconde. La page wikipedia donne toutes les informations sur le codage.

C'est le module de réception que s'occupe recevoir et traiter le signal, il fournit une unique sortie numérique dont l'état (0 ou 1) reflète l'intensité de la porteuse (25% ou 100%). Le microcontrolleur se charge ensuite de décoder l'information et de reconstituer l'heure. Il est important de vérifier les différents bits de parité du signal transmis pour être sûr de son intégrité (et éviter de régler une heure farfelue). Pour plus de détails sur le décodage DCF77, voir le code du firmware. En gros, chaque front descendant en provenance du module déclenche une interruption dans le microcontrolleur qui vérifie l'état du signal 120ms plus tard. S'il est à 0 alors le module transmet un 1 et s'il est revenu à 1, c'est que le module transmet un 0.

Eclairage — Lever de Soleil

L'éclairage qui simule le lever du soleil est produit par une dizaine de LEDs blanches dirigées vers la face avant translucide du réveil. Leur intensité est modulée par PWM à travers un transistor contrôlé par le microcontrolleur.

Commande des DELs d'éclairage

Son, mélodies

Les alarmes sonores sont des mélodies jouées à travers deux heut-parleurs placés sur les côtés du réveil. Pour simplifier la programmation et économiser du temps de processeur les notes sont produites par un signal carré à la fréquence adéquate. Le volume du son peut être approximativement réglé en jouant sur le rapport cyclique du signal carré (Je sais que c'est vraiment pas la bonne manière de faire les choses). J'ai ajouté un condensateur aux bornes des haut-parleurs pour essayer de rendre le son un peu moins carré

Il faut que j'essaye un de ces quatre de programmer des notes sinusoïdales par une sortie analogique (PWM+filtrage). Histoire de voir si le microcontrôlleur arrive à suivre

Alimentation de secours, pile de sauvegarde

Pour conserver l'heure lorsque le réveil est débranché, j'ai intégré une pile de sauvegarde qui permet au microcontrôlleur de continuer à compter le temps qui passe même lorsque l'alimentation est coupée. Cependant on ne peut pas continuer à faire fonctionner tous les périphériques du réveil à partir d'une pile CR2032. Il faut donc avertir le microcontrôlleur qu'il est sur batterie pour qu'il se mette en veille et n'essaye pas d'allumer une lumière.

Schéma du système de sauvegarde

C'est le rôle du système ci-dessus. Lorsque l'alimentation (+3V) est branchée, le microcontrôlleur est alimenté à travers D1 et la broche P1.4 est à 1 par D3. Si on débranche l'alimentation, la pile prend le relai et alimente le microcontrôlleur à travers D2, celui-ci est averti qu'il est sur l'alimentation de secours car la broche P1.4 passe à 0. Il peut se mettre en mode veille et ne se réveille que pour compter l'heure.

Photos

Vidéo

Dans cette vidéo, le temps de lever de Soleil (temps d'allumage des LEDs) a été réglé sur 1 minute pour faire une vidéo assez courte. En utilisation réelle, on utilise plutôt des temps de l'ordre de 20 minutes.