Pèse personne wifi

Objectif : (tenter de) bricoler un pèse personne bon marché et le transformer en wifi afin de suivre l’évolution de mon poids. Comme je n’ai pas de réseau dans la salle de bain, le plus simple et le plus économique est d’utiliser un esp8266.

balance_wifi

Je me suis très largement inspiré de ce que j’ai trouvé sur le net, notamment sur SquixTechBlog. Je suis parti du modèle de balance le moins cher trouvé ce jour là chez Conforama, un « Homex BAL 5000 MP » qui doit exister sous d’innombrable désignations.

Pour lire le poids, deux alternatives : soit je tente de suivre l’électronique jusqu’à ce que j’arrive après l’amplification du signal des capteurs de pression, soit je pars des capteurs de pression que je relie à un convertisseur du type HX711 comme on trouve sur ebay. Ensuite le signal sera traité par un micro contrôleur et affiché. Il faut bien sur prévoir une phase de calibrage pour être le plus juste possible.

Qu’y a-t-il dans cette balance ?

DSC_0007DSC_0008

Pas grand chose en fait : Quatre capteurs reliés à un PCB et son affichage LCD. Les fils de ceux du bas passant dans le tube central. Le circuit est marqué HB2319 rev I avec une date au 3 janvier 2008. Le LCD est juste posé sur le PCB…

Je remarque que ce sont les câbles rouges qui sont notés E+ E- S+ S-, je m’en servirai pour le signal. Première étape, on dessoude les câbles du PCB qu’on n’utilisera pas, et on les assemble sur le module HX711 qui est un amplificateur de signal.

Les quatre capteurs seront numérotés arbitrairement 1, 2, 3, 4.
Les fils blancs sont joints deux à deux : 1+2 et 3+4
Les fils noirs sont joints deux à deux : 1+4 et 2+3Les fils rouges sont connectés au HX711 dans l’ordre suivant : 1>A+ 2>E+ 3>A- 4>E-

hx711_bb

Le HX711 est connecté à l’ESP8266-12 comme suit : DT>GPIO12 et SCK>GPIO14

Chargement de la bibliothèque HX711 pour arduino que je vais utiliser ici :

Premier test sous l’environement Arduino :

Ça à l’air de fonctionner et j’obtiens des valeurs cohérentes, bien que fluctuant un peu.

Réalisation

Prototypage en cours
Prototypage en cours
ESP8266 sur plaque, prêt à être enfermé dans son boitier.
ESP8266 sur plaque, prêt à être enfermé dans son boitier.

Le principe de fonctionnement de mon pèse personne est :

Initialisation

Initialisation de l’écran. Ici un écran OLED que j’utilise avec la bibliothèque SSD131x. À noter que cet écran est en codepage IBM850…

Initialisation du capteur HX711

Initialisation du Wifi

Lecture du poids

Lecture du poids et boucle jusqu’à qu’on ait un poids stable > 0 kg.

Choix de la personne

Je passe le poids lu par MQTT à node-red qui interroge la base de donnée. La requête retourne la liste des utilisateurs (préalablement rentrés sous mysql) triés par la différence entre le poids lu et le poids archivé pour chacun. À priori, la personne en train de se peser est celle qui a l’écart le plus petit .

On soumet la liste des personnes à l’utilisateur qui peut la faire défiler avec un appui bref sur le bouton, et en choisir une avec un appui long. Un message MQTT est alors généré avec le n° de la personne et le poids, ce qui permet à node-red d’archiver le poids dans la base de données.

Finition

Il me reste à alimenter le tout par une pile (actuellement avec du 5v USB convertis en 3.3v) et à faire un support « propre » pour le boîtier.

Code

Voici le code. Il est codé avec les pieds donc très largement perfectible !

Node-red

Schéma node-red
Schéma node-red

Deux actions sont gérées par Node-Red, l’interrogation de la base de données pour trouver la personne la plus probable reliée au poids passé, et la mise à jour de la base de données.

Base de données

Elle est constituée (entre autre!) de deux tables :

Interrogation de la base de données

On reçoit un message mqtt « balance/dde_personne », avec le poids qui a été lu sur la balance, et que l’on passe à la création de la requète SQL, puis qu’on injecte à mySql

Mise en forme des résultats (j’utilise le caractère « | » comme séparateur)

Émission d’un message mqtt « balance/liste » contenant les personnes triées dans l’ordre de probabilité de correspondance

Mise à jour de la base de données

Mise à jour:

Le circuit est désormais alimenté sur 2 piles 1.5v AA grâce à un TPS61200 qui permet d’avoir du 3.3v à partir d’une tension de 0.3v à 5.5v.

Et enfin, voici une vidéo de la bête en fonction sur son support définitif

balanceBalance Wifi (esp8266) from fheredero on Vimeo.

8 réflexions au sujet de « Pèse personne wifi »

  1. Ola Francois,

    Tout d’abord, merci pour cet excellent article!
    S’il vous plaît, je voudrais savoir comment les paramètres node-red et sql seraient?
    Merci

    1. J’ai mis à jour l’article dans la partie Node-Red. Vous pouvez me dire si c’est suffisant pour vous

      1. Oui, oui, cela a beaucoup aidé.
        juste une chose de plus .. essayez de créer DB et ça ne marche pas très bien 🙂

        merci mec

  2. Bonjour,

    Super projet. J’utilise également le HX711 pour un projet différent. SI j’ai bien compris, tu l’alimentes en 3.3V ? As tu observé une dérive dans le temps si tu laisses un poids constamment sur la bascule ?
    Cordialement,
    Aurélien

    1. Oui, c’est bien le cas.
      Ici je boucle tant que je n’ai pas 2 mesures identiques, puis je conserve ce poids. Mais effectivement, dans mes tests préalables, j’ai constaté cette dérive dans le temps. Et tout le circuit est en 3.3v.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

This site uses Akismet to reduce spam. Learn how your comment data is processed.