Un humidificateur réseau en une après-midi

Un humidificateur réseau en une après-midi

Lorsque nous avons créé Yoctopuce, un des objectifs était de fournir une solution rapide, facile et fiable pour tous les bricolages de geek (contrôler la machine à café depuis son PC, être informé quand il faut aller chercher le courrier, etc.). D'autres solutions existaient déjà, mais aucune n'était suffisamment simple pour que tout fonctionne en une demi-journée. Cette semaine, nous avons dû mettre en place rapidement un système pour contrôler l’humidité d’une chambre, et nous n'avions qu’une demi journée pour réaliser la solution. Voici comment nous avons procédé...


Le problème

On veut maintenir entre 45% et 55% le taux d’humidité d’une petite chambre, qui en condition normale a un taux d’humidité d’environ 30%. Pour réaliser ce projet nous avons une demi-journée et un humidificateur très simple acheté dans le commerce.

Comme l’humidificateur ne possède aucun système de régulation ni minuteur, nous devons être capable de contrôler la mise en route et l’arrêt de l’humidificateur. Naturellement, il faut être capable de mesurer l’humidité de la pièce et de l’afficher. Il faut aussi que l’humidificateur soit toujours utilisable à la fin du projet, sans avoir besoin d'un diplôme pour trouver comment l'allumer.

Tous les composants nécesssaires
Tous les composants nécesssaires



Étape 1: contrôler l’humidificateur

Notre humidificateur est très basique: il ne possède qu’un seul bouton qui l’allume ou l’éteint. La solution la plus évidente est de le laisser toujours allumé et d’utiliser un Yocto-PowerRelay pour couper l’alimentation quand il faut le stopper. Malheureusement, si on coupe l’alimentation de cet humidificateur, il repasse automatiquement état OFF et il faut appuyer sur le bouton pour qu’il se mette en route. Il faut donc simuler la pression de ce bouton à l’aide d’un Yocto-Relay et par conséquent démonter l’humidificateur pour accéder au bouton. La première bonne nouvelle, c’est qu’il y a assez de place pour mettre un Yocto-Relay et faire sortir un câble USB.

L’humidificateur modifié par Yoctopuce
L’humidificateur modifié par Yoctopuce



Nous allons souder deux fils sur le bouton et les brancher sur le premier relais du Yocto-Relay. En activant le relais pendant un court instant, on va simuler la pression du bouton. Le problème de cette solution est que l’on n'est pas capable de détecter l'état de l'humidificateur. On pourrait garder dans notre programme l’état et le mettre à jour à chaque fois que l’on simule la pression du bouton, mais comment faire si quelqu'un presse sur le vrai bouton de l’humidificateur? La solution luxueuse serait d’ajouter un Yocto-Volt pour détecter la consommation de l’humidificateur mais il n’y a pas assez de place pour mettre un deuxième module.

Il suffit d'utiliser le fait que l’humidificateur est toujours éteint après une coupure de courant. Si on branche le second relais du Yocto-Relay en série sur le fil d’alimentation, on peut couper l’alimentation de l’humidificateur. Pour éteindre l’humidificateur quel que soit sont état, il suffit de couper l’alimentation pendant 1/2 seconde. Si au contraire on veux l’allumer, il suffit de l’éteindre avec cette méthode et de simuler la pression du bouton juste après. De cette manière, sans connaitre l'état initial de l'humidificateur, on peut toujours l'éteindre ou l’allumer de manière fiable. Il faut juste faire attention de bien connecter les fils du bouton sur la position B du relais et l’alimentation sur la position A du relais pour que l’humidificateur soit toujours utilisable même si le Yocto-Relais n’est pas branché à un PC ou Hub (A étant la positon par défaut des relais).

Le câblage du Yocto-Relay pour contrôler l’humidificateur
Le câblage du Yocto-Relay pour contrôler l’humidificateur



Étape 2: La connectique

Maintenant que notre humidificateur est contrôlable, il faut le connecter à quelque chose. Une des solutions serait d’installer un mini-PC dans la chambre et de le brancher par USB, mais cette solution n'est pas très pratique. Nous allons plutôt utiliser un YoctoHub-Wireless-SR, et brancher dessus:

  1. l’humidificateur modifié
  2. le Yocto-Meteo pour mesurer l’humidité
  3. un Yocto-MaxiDisplay pour afficher l’humidité.


Cette solution a l’avantage de consommer beaucoup moins qu’un PC et de prendre peu de place. Une fois tout branché, il suffit de configurer le YoctoHub-Wireless-SR pour se connecter sur le réseau Wifi de la maison pour que l’on puisse accéder à tous nos modules depuis n’importe où.

Le YoctoHub-Wireless-SR et tous les modules connectés
Le YoctoHub-Wireless-SR et tous les modules connectés



Étape 3: Le software

Au lieu de réaliser un programme qui va se connecter à nos modules, nous allons configurer un callback HTTP sur notre YoctoHub-Wireless-SR. L’intérêt de cette solution est qu’elle est très facile à mettre en œuvre: il suffit d’écrire un simple script PHP (ou Node.js ou Java). Certes, il faut que l’on ait accès à un serveur PHP, mais tout geek qui se respecte a au minimum un serveur PHP qui héberge un blog ou un forum, n'est-ce pas ?

Le code est très simple:

On initialise l’API en mode HTTPCallback.

 if (YAPI::RegisterHub("callback", $errmsg) != YAPI_SUCCESS)
    Error($errmsg);



On récupère l’objet pour tous nos modules Yoctopuce.

$humSenor = YHumidity::FirstHumidity();
$display = YDisplay::FirstDisplay();
$humPower = YRelay::FindRelay("hum_power");
$humSwitch = YRelay::FindRelay("hum_switch");



On allume ou éteint l’humidificateur en fonction de l’humidité de la pièce.

/**
 * Switch on or off the connected humidifier. We cut the power for 500ms to
 * reset the humidifier to his default state (OFF). Then to switch it on
 * we need to simulate the push of the power button.
 */

function setHumidifierState($on=False)
{
    global $humPower, $humSwitch;
    $humPower->pulse(500);
    if ($on) {
        $humSwitch->delayedPulse(500,100);
    }
}
...
$currentHum  = (int)$humSenor->get_currentValue();
if ($currentHum < MIN_HUMIDITY) {
    setHumidifierState(True);
} else if ($currentHum> MAX_HUMIDITY) {
    setHumidifierState(false);
}



Et l’on affiche l’humidité sur l’écran.

$width = $display->get_displayWidth();
$height = $display->get_displayHeight();
$layer4 = $display->get_displayLayer(4);
$layer4->reset();
$layer4->drawImage(0, 0, "drop.gif");
$lastHumText = sprintf("%d %%", $currentHum);
$layer4->selectFont('Large.yfm');
// draw lastHumText
$layer4->selectColorPen(0xffff);
$layer4->drawText($width, $height / 2, Y_ALIGN_CENTER_RIGHT, $lastHumText);



Bien entendu, il est possible de faire un script plus luxueux, en stockant les valeurs dans une base de données ou en affichant un graphique sur l’écran en plus de l’humidité. Vous pouvez télécharger notre script complet sur GitHub.

Conclusion

L’humidificateur modifié par Yoctopuce
L’humidificateur modifié par Yoctopuce



Et voilà, en une après-midi nous avons réalisé un projet fonctionnel sans grande difficulté. Bien évidemment, on pourrait améliorer plusieurs points (esthétique, envoyer une alerte sur un smartphone, etc..) en fonction du temps disponible. Mais l’objectif de base est rempli: à l'aide de quelques modules Yoctopuce, il est possible de contrôler soi-même par réseau presque n'importe quel appareil existant, même les plus simples.

Commenter 2 commentaires Retour au blog



1 - laupas Vendredi 14 mars 2014 23H45

Le yocto-relay n'est pas censé supporter au maximum 160v?

2 - martinm (Yocto-Team)Lundi 17 mars 2014 7H42

@laupas: L’humidificateur fonctionne en basse tension (24V) grâce à un adaptateur mural.

Yoctopuce, get your stuff connected.