Réaliser une veilleuse connectée

Réaliser une veilleuse connectée

IKEA fabrique de jolies veilleuses en forme de fantôme, mais le câble d'alimentation de ces "SPÖKA" est très fin. Évidemment, un enfant a arraché le câble de sa veilleuse et Yoctopuce a été appelé à la rescousse. Initialement, on pensait simplement réparer le câble d'alimentation, mais finalement, on a décidé d'améliorer cette veilleuse en la transformant en "veilleuse connectée" à l'aide d'un Yocto-Color-V2 et un YoctoHub-Wireless-SR.



Le but du jeu est de pouvoir configurer la couleur de la veilleuse depuis un smartphone et d'ajouter une fonction "réveil" à la veilleuse pour qu'elle change de couleur en fonction de l'heure de la journée. L’intérêt de cette fonction "réveil" est de permettre à un enfant qui ne sait pas encore lire de savoir s'il doit resté couché ou s'il peut aller réveiller ses parents.

Pour ce bricolage, nous avons besoin d'un Yocto-Color-V2 et un YoctoHub-Wireless-SR. Le Yocto-Color-V2 permet d'illuminer l'intérieur de la veilleuse de n'importe quelle couleur, et le YoctoHub-Wireless-SR permet à la veilleuse de se connecter au réseau WiFi. Contrairement à la version de base, cette veilleuse "IoT" ne possédera pas de batterie et est prévue pour fonctionner uniquement branchée à un chargeur de téléphone.

Pour avoir une veilleuse suffisamment punchy, nous avons utilisé un anneau de 12 NeoPixel au lieu des deux leds d'origine du Yocto-Color-V2. Cet anneau est disponible sur le site d'Adafruit pour moins de 8$. Au final, il s'avère que les deux leds d'origine du Yocto-Color-V2 suffisent largement.

Le hardware


La première étape est de démonter proprement la veilleuse pour récupérer la partie souple en forme de fantôme. Il faut simplement étirer la partie souple et extraire le plastique transparent qui contient l’électronique.

La veilleuse SPÖKA démontée
La veilleuse SPÖKA démontée



Le YoctoHub est malheureusement trop gros pour être caché à l'intérieur de la veilleuse. Nous avons donc créé un socle qui contient les deux modules Yoctopuce, sur lequel sera fixé le fantôme. A l'intérieur du socle, le Yocto-Color-V2 et le YoctoHub-Wireless-SR sont reliés à l'aide d'un Board2Board-127 et de Fix-2.5mm, pour être le plus compacte possible.

Un cylindre muni de deux lèvres est fixé sur le haut du socle et permet de fixer le fantôme. Enfin l'anneau de led est collé sur la partie supérieure du cylindre pour éclairer le fantôme de l'intérieur.

La vue en éclaté du socle de la veilleuse
La vue en éclaté du socle de la veilleuse



Ce socle est imprimé en 3D et assemblé à l'aide de 8 vis à tête fraisée de 3mm. Nous avons publié le modèle 3D du socle sur Thingiverse.

La veilleuse SPÖKA modifiée par Yoctopuce
La veilleuse SPÖKA modifiée par Yoctopuce



Le software


L'application est écrite en PHP et hébergée sur un serveur local (en l’occurrence un NAS QNAP). L'application est composée d'une interface web qui permet de configurer les heures de nuit et de réveil ainsi que les couleurs et animations que la veilleuse doit exécuter. La configuration est sauvée directement dans un fichier JSON au lieu d'utiliser une base de donnée.

L'interface web permet de configurer les animations pour la nuit et la journée
L'interface web permet de configurer les animations pour la nuit et la journée



L'autre partie de l'application web est le callback HTTP que le YoctoHub-Wireless-SR va utiliser. Le callback HTTP parse le fichier de configuration et applique la couleur ou l’animation prévue à l'objet YColorLedCluster. Le code est assez simple, et l'utilisation de l'objet YColorLedCluster a déjà été expliqué dans un précédent article;

/**
 * @param YColorLedCluster $ledCluster
 * @param object $allconfigs
 * @param object $currentConfig
 */

function applyPattern($ledCluster, $allconfigs, $currentConfig)
{
    $nbled = $ledCluster->get_activeLedCount();
    $speed = (int)$currentConfig->speed;
    $color1 = hexdec($currentConfig->color1);
    $color2 = hexdec($currentConfig->color2);
    $pattern = $currentConfig->pattern;
    if (($speed == (int)$allconfigs->last_color->speed) &&
        $pattern == $allconfigs->last_color->pattern &&
        $color1 == hexdec($allconfigs->last_color->color1) &&
        $color2 == hexdec($allconfigs->last_color->color2)
    ) {
        // no change
        return false;
    }

    switch ($pattern) {
        case 'off':
            $ledCluster->set_rgbColor(0, $nbled, 0);
            break;
        case 'static':
            $ledCluster->set_rgbColor(0, $nbled, $color1);
            break;
        case 'fade':
            $ledCluster->resetBlinkSeq(0);
            $ledCluster->addRgbMoveToBlinkSeq(0, $color1, $speed);
            $ledCluster->addRgbMoveToBlinkSeq(0, $color2, $speed);
            $ledCluster->linkLedToBlinkSeq(0, $nbled, 0, 0);
            $ledCluster->startBlinkSeq(0);
            break;
        case'blink':
            $ledCluster->resetBlinkSeq(0);
            $ledCluster->addRgbMoveToBlinkSeq(0, $color1, 0);
            $ledCluster->addRgbMoveToBlinkSeq(0, $color1, $speed);
            $ledCluster->addRgbMoveToBlinkSeq(0, $color2, 0);
            $ledCluster->addRgbMoveToBlinkSeq(0, $color2, $speed);
            $ledCluster->linkLedToBlinkSeq(0, $nbled, 0, $nbled);
            $ledCluster->startBlinkSeq(0);
            break;
    }
    $allconfigs->last_color = $currentConfig;
    return true;
}




Pour finir, il reste à configurer le réseau Wifi et l'URL du callback HTTP sur le YoctoHub-Wireless-SR.

Comme d'habitude, le code source complet est disponible sur GitHub:
https://github.com/yoctopuce-examples/spoka

Demo


Le Yocto-Color-V2 permet facilement de transformer n'importe quel luminaire en lampe connectée.

  



Maintenant, il ne reste plus qu'à espérer que les enfants arrivent à se rendormir :-)

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.