Table des matières:

Capteur de notification de machine à laver : 6 étapes (avec photos)
Capteur de notification de machine à laver : 6 étapes (avec photos)

Vidéo: Capteur de notification de machine à laver : 6 étapes (avec photos)

Vidéo: Capteur de notification de machine à laver : 6 étapes (avec photos)
Vidéo: Elle Était Coincée Donc Ce Policier L'aide 2024, Juillet
Anonim
Image
Image
Prototype
Prototype

Ce capteur de machine à laver se trouve au-dessus de ma machine à laver et utilise un accéléromètre pour détecter les vibrations de la machine. Lorsqu'il détecte que le cycle de lavage est terminé, il m'envoie une notification sur mon téléphone. Je l'ai construit parce que la machine elle-même n'émet plus de bip lorsqu'elle est terminée et j'en avais marre d'oublier de sortir le linge.

Le code peut être trouvé ici:

Liste complète des pièces:

  • WEMOS LOLIN32
  • Planche à pain demi-taille (pour le prototypage)
  • Boîte de projet ABS avec tableau matriciel 59x88x30mm
  • Sparkfun LIS3DH - Déploiement de l'accéléromètre à trois axes
  • 1x MOSFET canal P ZVP3306A, 160 mA, 60 V, ligne E à 3 broches
  • 1x Transistor BC549B TO92 30V NPN
  • 5mm LED Bleu 68 mcd
  • 1x résistance 100k 0.125W CF
  • 1x 330k 0.125W résistance CF
  • 2x 10k 0.250W CF Résistance
  • 1x 100 0.250W CF Résistance
  • Câble JST PH femelle à 2 broches (14 cm)
  • 4x M1219-8 Disque Aimant Néodyme 6x4mm

Étape 1: Prototyper

Prototype
Prototype

L'appareil utilise un microcontrôleur ESP32. Dans ce cas, j'utilise la carte de développement Lolin32 de Wemos que vous pouvez acheter sur AliExpress pour environ 7 $. L'accéléromètre est le Sparkfun LIS3DH - il est important que l'accéléromètre soit numérique plutôt qu'analogique comme vous le verrez plus tard. La batterie que j'ai prise d'un vieil ensemble de haut-parleurs Bluetooth.

L'ESP32 se connecte à l'accéléromètre via I2C. La première version du code a simplement interrogé les trois axes d'accélération (x, y et z) pour la valeur d'accélération mesurée toutes les 20 ms. En plaçant le prototype de maquette sur la machine à laver, j'ai produit le graphique ci-dessus qui montre les pics d'accélération au cours des différentes phases du cycle de lavage. Les pics où l'accélération absolue était supérieure à 125 mg (125 millièmes de gravité normale) sont indiqués en orange. Nous voulons détecter ces périodes et les utiliser pour déterminer l'état de la machine à laver.

Comment déterminer si la machine est allumée ou éteinte ?

L'un des objectifs de la construction de cet appareil était qu'il serait entièrement passif. C'est à dire. aucun bouton ne doit être enfoncé; ça marcherait. Il devrait également être de très faible puissance car il n'était pas vraiment possible de rallonger les câbles d'alimentation jusqu'à la machine à laver dans mon cas.

Heureusement, l'accéléromètre LIS3DH a une fonction où il peut déclencher une interruption lorsque l'accélération dépasse un seuil donné (remarque, cela nécessite l'utilisation du filtre passe-haut intégré de l'accéléromètre - voir le code sur Github pour plus de détails) et l'ESP32 peut être réveillé de son mode veille profonde via une interruption. Nous pouvons utiliser cette combinaison de fonctionnalités pour créer un mode veille à très faible consommation d'énergie déclenché par le mouvement.

Le pseudo code ressemblerait à ceci:

# Réveil de l'appareil

notification_threshold = 240 counter = 10 accelerometer.set_threshold(96) #96mg while counter > 0: if accelerometer.above_threshold(): counter++ else: counter-- if counter > notification_threshold: # cycle d'essorage final détecté sleep (1 seconde) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt() esp32.deep_sleep()

Vous pouvez voir ici que nous utilisons un compteur pour détecter le nombre de secondes d'accélération que nous avons détectées pendant la période d'éveil actuelle. Si le compteur tombe à zéro, nous pouvons remettre l'appareil en veille. Si le compteur atteint 240 (le seuil de notification), cela signifie que nous avons détecté 4 minutes de vibration. Nous pouvons modifier les valeurs de ces seuils pour nous assurer que l'appareil détecte correctement le cycle d'essorage final. Une fois qu'une vibration suffisante est détectée, nous pouvons simplement dormir pendant 5 minutes supplémentaires (dans mon cas, c'est le temps qu'il faut pour que le lavage soit réellement terminé) avant d'envoyer une notification.

Étape 2: Envoi d'une notification via Blynk

Envoi d'une notification via Blynk
Envoi d'une notification via Blynk

Blynk est un service conçu pour permettre l'interaction avec les appareils IoT avec une application sur votre téléphone. Dans ce cas, j'utilise l'API de notification push qui est déclenchée par un simple HTTP POST à l'API Blynk.

Étape 3: mesurer la consommation d'énergie et estimer la durée de vie de la batterie

Mesurer la consommation électrique et estimer la durée de vie de la batterie
Mesurer la consommation électrique et estimer la durée de vie de la batterie

La puce ESP32 est annoncée comme ayant une très faible consommation d'énergie en veille profonde (aussi bas que 5 uA). Malheureusement, les circuits des nombreuses cartes de développement différentes offrent des caractéristiques de consommation d'énergie très différentes - toutes les cartes de développement ESP32 ne sont pas créées égales. Par exemple, lorsque j'ai commencé ce projet pour la première fois, j'ai utilisé le Sparkfun ESP32 Thing qui consommerait environ 1 mA d'énergie en mode veille profonde (même après avoir désactivé le voyant d'alimentation). Depuis, j'utilise le Lolin32 (pas la version Lite) sur lequel j'ai mesuré un courant de 144,5uA en mode veille profonde. Pour faire cette mesure, j'ai simplement câblé un multimètre en série avec la batterie et l'appareil. C'est certainement plus facile à faire lors du prototypage avec une maquette. J'ai également mesuré l'utilisation actuelle lorsque l'appareil est éveillé:

  • Sommeil profond: 144,5 uA
  • Réveil: 45 mA
  • Wifi activé: 150 mA

En supposant que j'utilise la machine deux fois par semaine, j'ai estimé les temps suivants pour le temps que le capteur passe dans chaque état:

  • Sommeil profond: 604090 secondes (~1 semaine)
  • Éveillé: 720 secondes (12 minutes)
  • Wifi activé: 10 secondes

A partir de ces chiffres, nous pouvons estimer combien de temps la batterie va durer. J'ai utilisé cette calculatrice pratique pour obtenir une consommation électrique moyenne de 0,2 mA. La durée de vie estimée de la batterie est de 201 jours soit environ 6 mois ! En réalité, j'ai constaté que l'appareil cesserait de fonctionner après environ 2 mois, il pourrait donc y avoir des erreurs de mesure ou de capacité de la batterie.

Étape 4: Mesurer le niveau de la batterie

Mesure du niveau de batterie
Mesure du niveau de batterie
Mesure du niveau de batterie
Mesure du niveau de batterie

J'ai pensé que ce serait bien si l'appareil pouvait me dire quand la batterie est faible afin que je sache quand la charger. Pour mesurer cela, nous devons mesurer la tension de la batterie. La batterie a une plage de tension de 4,3 V à 2,2 V (la tension de fonctionnement minimale de l'ESP32). Malheureusement, la plage de tension des broches ADC de l'ESP32 est de 0 à 3,3 V. Cela signifie que nous devons réduire la tension de la batterie de son maximum de 4,3 à 3,3 pour éviter de surcharger l'ADC. C'est possible avec un diviseur de tension. Câblez simplement deux résistances avec les valeurs appropriées de la batterie à la terre et mesurez la tension au milieu.

Malheureusement, un simple circuit diviseur de tension drainera l'énergie de la batterie même lorsque la tension n'est pas mesurée. Vous pouvez atténuer cela en utilisant des résistances de valeur élevée, mais l'inconvénient est que l'ADC pourrait ne pas être en mesure de tirer suffisamment de courant pour effectuer une mesure précise. J'ai décidé d'utiliser des résistances avec des valeurs de 100kΩ et 330kΩ qui chuteront de 4,3V à 3,3V selon la formule de ce diviseur de tension. Compte tenu d'une résistance totale de 430kΩ, nous nous attendrions à un appel de courant de 11,6uA (en utilisant la loi d'Ohm). Étant donné que notre utilisation actuelle du sommeil profond est de 144 uA, il s'agit d'une augmentation raisonnablement significative.

Comme nous ne voulons mesurer la tension de la batterie qu'une seule fois juste avant d'envoyer une notification, il est logique de désactiver le circuit diviseur de tension pendant le temps où nous ne mesurons rien. Heureusement, nous pouvons le faire avec quelques transistors connectés à l'une des broches GPIO. J'ai utilisé le circuit donné dans cette réponse stackexchange. Vous pouvez me voir tester le circuit avec un Arduino et une maquette sur la photo ci-dessus (notez qu'il y a une erreur dans le circuit qui est la raison pour laquelle je mesure une tension plus élevée que prévu).

Avec le circuit ci-dessus en place, j'utilise le pseudo-code suivant pour obtenir une valeur de pourcentage de batterie:

pourcentage de batterie():

# activer le circuit de tension de la batterie gpio_set_level(BATTERY_EN_PIN, HIGH) # Le niveau de la batterie est renvoyé sous forme d'entier compris entre 0 et 4095 adc_value = adc1_get_value(ADC_PIN) # activer le circuit de tension de la batterie gpio_set_level(BATTERY_EN_PIN, LOW) float adc_voltage = adc_value * 3.3 / 4095 le diviseur utilise des résistances de 100k / 330k ohms # 4.3V -> 3.223, 2.4 -> 1.842 expect_max = 4.3*330/(100+330) expect_min = 2.4*330/(100+330) battery_level = (adc_voltage-expected_min)/(expected_max -expected_min) renvoie battery_level * 100.0

Étape 5: le rendre plus joli

Le rendre plus joli
Le rendre plus joli
Le rendre plus joli
Le rendre plus joli
Le rendre plus joli
Le rendre plus joli

Bien que la version de la maquette fonctionne bien, je voulais la mettre dans un emballage qui serait plus propre et plus fiable (pas de fils qui peuvent se détacher ou court-circuiter). J'ai réussi à trouver la boîte de projet parfaite pour mes besoins, de la bonne taille, comprenant un tableau d'affichage, des supports de montage et des vis pour tout assembler. De plus, c'était très bon marché à moins de 2 £. Après avoir reçu la boîte, tout ce que j'avais à faire était de souder les composants sur le tableau d'affichage.

La partie la plus délicate de cela était peut-être d'installer tous les composants du circuit de tension de la batterie dans le petit espace à côté du Lolin32. Heureusement, avec un peu de poker et les connexions appropriées faites avec de la soudure, le circuit s'intègre parfaitement. De plus, comme le Wemos Lolin32 n'a pas de broche pour exposer la borne positive de la batterie, j'ai dû souder un fil du connecteur de la batterie à la carte à broches.

J'ai également ajouté une LED qui clignote lorsque l'appareil a détecté un mouvement.

Étape 6: Touches finales

Image
Image
La touche finale
La touche finale
La touche finale
La touche finale

J'ai super-collé 4 aimants en néodyme de 6 mm x 4 mm à la base de la boîte, ce qui lui permet de bien coller au dessus en métal de la machine à laver.

La boîte de projet est déjà livrée avec un petit trou pour permettre l'accès aux câbles. Heureusement, j'ai pu positionner la carte ESP32 près de ce trou pour donner accès au connecteur micro USB. Après avoir agrandi le trou avec un cutter, le câble s'adapte parfaitement pour permettre une charge facile de la batterie.

Si vous êtes intéressé par l'un des détails de ce projet, n'hésitez pas à laisser un commentaire. Si vous souhaitez voir le code, veuillez le consulter sur Github:

github.com/alexspurling/washingmachine

Conseillé: