jeudi 16 juin 2022

Contrôle de Niveau d'Eau Connecté

 

Contrôle de Niveau d'Eau Connecté

 

Dans un article précédent j'ai présenté la réalisation d'un surpresseur.

Ce surpresseur est alimenté en eau de pluie. Comme il est situé en cave, ainsi que les réservoirs, et qu'aucune possibilité d'évacuation du trop-plein n'est possible, j'ai décidé de lui adjoindre un circuit de contrôle du niveau dans le réservoir.

Ce circuit a trois fonctions :

  • pouvoir contrôler le niveau d'eau à distance
  • fermer ou ouvrir l'arrivée d'eau à l'aide d'une vanne motorisée
  • gestion du manque d'eau dans le réservoir

Le choix des réservoirs hors sol est motivé uniquement pas le coût beaucoup plus faible (120€ pour 1500 litres) et la facilité de mise en oeuvre, par rapport à une solution à base de cuve enterrée (300€ pour 1500 litres, sans les travaux).

Avec une cuve enterrée, en général, une évacuation du trop-plein est prévue, et le dispositif décrit ici n'a aucun intérêt, sauf bien sûr si l'on veut connaître le niveau d'eau sans avoir à soulever le couvercle.

Avant tout, dans tous les cas, la couverture WIFI à l'endroit où se trouve la cuve doit être vérifiée, car ce montage utilise un ESP8266 (WEMOS D1 MINI). Dans mon habitation, le système est en cave, et le niveau du signal est correct (-83dBm).

Si l'ESP8266 ne parvient pas à se connecter à la box, il est possible de le configurer en point d'accès avec un SSID de son choix, on pourra ainsi consulter le niveau en se connectant à ce SSID avec son téléphone.

Malgré la taille réduite de ce projet un certain nombre de sujets seront abordés :

    • mesure de distances à l'aide d'un capteur à ultrasons
    • implémentation d'un serveur WEB ASyncWebServer
      • utilisation des templates
      • servir un fichier JavaScript
      • servir des images
    • utiliser la classe Ticker
    • reconnexion automatique au réseau WIFI

Ce projet pourra également être utilisé pour mesurer la quantité de liquide restant dans une cuve quelconque, fioul par exemple.

1. Description

1.1. Le capteur

Il existe plusieurs possibilités :

1.1.1. Capteur à contact

On peut monter un ensemble de capteurs de niveau de ce type le long de la paroi de la cuve :

Cela implique pas mal de câblage si les capteurs sont nombreux.

1.1.2. Capteur de pression

On peut également utiliser un capteur de pression :

Mais la pression dans un réservoir d'eau est faible, environ 0.1 bar pour une hauteur de 1 mètre, difficilement mesurable, à moins de disposer d'un capteur ultra-sensible. L'autre inconvénient est qu'un capteur de ce type pourra difficilement être monté sur une cuve enterrée.

1.1.3. Capteur à ultrasons

Il reste une solution : le capteur à ultrasons, fixé sous le couvercle du réservoir. Il en existe plusieurs modèles :

1.1.3.1. HC-SR04

Celui-ci est le plus connu :

Capteur HC-SR04

Le problème est que la condensation sous le couvercle du réservoir est importante, et il serait étonnant qu'un capteur de ce type résiste bien longtemps. Mais on peut prévoir une rehausse suffisamment aérée pour qu'il ne souffre pas trop de l'humidité.

Ce capteur donne d'excellents résultats de mesure.

1.1.3.2. JSN-SR04T

En cherchant un peu j'ai découvert qu'il existe un modèle étanche, utilisé souvent comme capteur de distance pour fabriquer des radars de recul pour véhicule :

Capteur JSN-SR04T

Le capteur est déporté à l'aide d'un câble, et la carte électronique peut être installée au sec, à côté d'un ARDUINO ou d'un autre microcontrôleur.

Un des avantages de ce module est que l'on peut l'alimenter sous 3.3V ou 5V.

Il ne m'a pas donné satisfaction. Voir plus loin : 5. Essais

1.1.3.3. DYP-A02YY

Ce troisième modèle, étanche également, est aussi sur la liste des candidats :

Capteur DYP-A02YY

Le câble est court, il nécessitera une rallonge. Son prix est assez élevé, une vingtaine d'euros, par contre son fonctionnement est aussi satisfaisant que celui du HC-SR04.

1.2. Le microcontrôleur

Comme je désire pouvoir consulter facilement le niveau d'eau, le microcontrôleur choisi est une carte WEMOS D1 MINI, disposant du WIFI :

Le but est d'en faire un serveur WEB, consultable à distance.

A noter : le logiciel est petit et peut aisément se contenter de 1Mb de mémoire FLASH. Une WEMOS D1 MINI LITE suffit amplement.

1.3. La vanne

La vanne est un modèle motorisé :

Elle se commande à l'aide de trois fils, en 230V : 

  • jaune : neutre
  • bleu : ouverture
  • marron : fermeture

Pour ouvrir ou fermer il suffit d'appliquer du 230V sur le fil bleu ou marron pendant une dizaine de secondes.

Une vanne de ce type équipe déjà mon arrosage automatisé depuis plus de 5 ans. Je ne peux que constater sa grande fiabilité.

Elle est commandée par deux relais du type SONGLE SRD-05VDC-SL-C :

Bien entendu, si l'on a besoin d'une simple surveillance de niveau, sur une cuve enterrée par exemple, sans commande de vanne, la vanne et ses relais sont inutiles.

1.4. Sécurité

Afin d'apporter une sécurité supplémentaire, un capteur de niveau optionnel est installé en haut du réservoir :

 

Lorsque le niveau maximal est atteint, le contact ILS se ferme, et le microcontrôleur ferme la vanne.

Ici aussi, si l'on a besoin d'une simple surveillance de niveau, sur une cuve enterrée par exemple, ce capteur est inutile.

1.5. Gestion du manque d'eau

Lorsque le réservoir est presque vide, il faut éviter que le pressostat puisse enclencher la pompe, car celle-ci tournerait indéfiniment.

Cette gestion peut également être confiée à ce montage, qui est équipé d'un relais de coupure du surpresseur. Ce relais est bistable, car j'ai horreur de laisser une bobine de relais sous tension en permanence, pour des raisons de consommation et de dissipation calorique.

Le modèle choisi est un OMRON G5RL-K1A-E-5DC (SPST). On peut également adopter un OMRON G5RL-K1-E-5DC (SPDT), en coupant les pattes NF (contact Normalemant Fermé).

Cette gestion peut aussi être réalisée classiquement à l'aide d'un flotteur à bille, en série avec le surpresseur, donc de manière totalement indépendante :


Pour les personnes possédant un surpresseur du commerce, cette gestion est normalement assurée par celui-ci.

2. Le schéma

Celui-ci est assez simple :


Le schéma est réalisé à l'aide de KICAD.

Le choix des GPIOs n'est pas fait au hasard. Ni GPIO0 ni GPIO2 ne peuvent être utilisées pour le pilotage des relais, car si elles sont ramenées à GND par les résistances de base des transistors pendant le démarrage, l'ESP8266 ne démarrera pas :

https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/

La carte accepte les trois modules JSN-SR04T, DYP-A02YY et HC-SR04.

Le connecteur du module JSN-SR04T est directement implanté sur la carte. Il sera donc relié à son capteur à l'aide du câble livré (longueur 2m). Il est alimenté sous 3.3V. Mais comme dit plus haut, ce capteur n'est pas assez fiable. Je conserve tout de même cette possibilité, au cas où une version plus fiable soit mise sur le marché.

Le module HC-SR04 ou DYP-A02YY est raccordé via un câble à 4 fils sur le connecteur J1. Il est alimenté sous 5V et un pont diviseur R5/R6 abaisse le signal ECHO à 3.3V, pour qu'il soit acceptable sans problème par l'ESP8266.

Les relais K1 et K2 permettent l'ouverture et la fermeture de la vanne. Le relais K3 permet de couper le surpresseur au cas où le niveau d'eau est trop bas. Il s'agit d'un relais bistable 16A, qui devrait être suffisant pour la majeure partie des pompes (3KW grand maxi).

Trois varistances 275V absorbent les surtensions éventuelles du moteur de la vanne et de la pompe.

Si l'on a besoin d'une simple surveillance de niveau, sur une cuve enterrée par exemple, sans commande de vanne, ni détecteur de niveau, il suffit de ne pas raccorder les relais et le capteur.

2.1. La réalisation avec PCB

Si l'on désire réaliser le PCB fourni dans le dossier KICAD, celui-ci intègre une alimentation HI-LINK HLK-PM01 5V d'une puissance de 3W, très courante : 3.50€ sur AliExpress :

La carte est étudiée pour être logée dans un boîtier pour rail DIN KRADEX Z110 :


Mais on peut utiliser n'importe quel boîtier ayant des dimensions intérieures d'au moins 100mm x 100mm.

2.2. La réalisation sans PCB

Pour une réalisation sans PCB, on peut adopter une alimentation USB fiable et la relier au connecteur USB de la D1 MINI :

MeanWell SGA12E05-USB 5V 2.4A

On pourra remplacer les 2 relais et leurs transistors de commande par un module du commerce :

 

Par contre il sera difficile de trouver un module relais bistable pour la gestion du manque d'eau. Il est facile d'en réaliser un :

Modules à relais DIY

Voir le paragraphe 3.2.1. Module relais bistable double bobine

Les connexions 230V, vanne, surpresseur et capteur pourront être réalisées en utilisant un bloc DOMINO ou un bornier à vis, qui pourront aussi accueillir les varistances :

Le module capteur et les modules relais peuvent être reliés à la D1 MINI par des fils DUPONT. Ce n'est certainement pas la solution la plus fiable, mais si l'on vérifie bien la bonne tenue des fils sur les connecteurs, elle peut l'être.

3. L'IDE ARDUINO

Il faut bien entendu installer le package ESP8266, si ce n'est pas déjà fait : 

https://arduino-esp8266.readthedocs.io/en/latest/installing.html

Ensuite il faudra installer les librairies suivantes :

ESPAsyncWebServer : https://github.com/me-no-dev/ESPAsyncWebServer 

NewPingESP8266 : https://github.com/jshaw/NewPingESP8266.git

Pour récupérer le projet voir plus bas :  7. Téléchargements.

4. Le code

Le code se compose de 6 fichiers :
  • commande de la vanne : valve.cpp + valve.h
  • mesure de distance : jsnsr04t.cpp.cpp + jsnsr04t.cpp.h
  • affichage à la console: debug.h
  • l'application : level-control.ino

4.1. AsyncWebServer

L'unique page HTML est créée non pas à l'aide de lignes de code, ni à l'aide d'une chaîne de caractères constante, comme on le voit souvent, mais à l'aide d'un fichier HTML stocké dans le système de fichiers SPIFFS. Ce fichier comporte des balises %VOLUME%, %REMAIN%, %VALVE% (volume total, volume restant, état de la vanne), qui seront remplacées par leur valeur par un template processor. Cet outil est fourni par le serveur AsyncWebServer.

Voici le template processor :

String templateProcessor(const String& var)
{
  if (var == "BOOT") {
    return timeBuffer;
  }
  if (var == "CONNECTIONS") {
    return String(connections);
  }
  if (var == "VOLUME") {
    return String(TOTAL_VOLUME);
  }
  if (var == "RSSI") {
    return String(WiFi.RSSI());
  }
  if (var == "REMAIN") {
    return String((int)remainingVolume);
  }
  if (var == "VALVE") {
    return valve.state() == IS_OPEN || valve.state() == IS_OPENING ? "/open.jpg" : "/closed.jpg";
  }
  return "";
}

Et voici le handler traitant l'URL principale :

  server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
    request->send(SPIFFS, "/index.html", "text/html", false, templateProcessor);
  });

Une seule ligne de code permet d'indiquer au serveur que la page /index.html située dans le système de fichiers SPIFFS doit être renvoyée au client, en la traitant au préalable à l'aide de la fonction templateProcessor().

Quand on a goûté aux templates il est difficile de s'en passer. On trouve beaucoup de tutoriels :

https://techtutorialsx.com/2018/07/22/esp32-arduino-http-server-template-processing/

4.2. Ticker

L'ouverture et la fermeture de la vanne motorisée dure une dizaine de secondes. Lorsque l'ouverture ou de fermeture est commandée, il faut activer un des deux relais pendant au moins dix secondes, avant de la désactiver.

Si cette temporisation est implémentée à l'aide de delay(), cela bloque le microcontrôleur pendant la durée de la temporisation, et le serveur WEB sera inaccessible. On pourrait envisager une implémentation à l'aide de millis(), mais cela implique d'appeler en boucle une fonction de surveillance du temps dans la fonction loop(). Ce n'est pas très élégant ni efficace, car cela mobilise une grande partie du temps CPU.

Nous allons voir comment coder cette temporisation de manière élégante à l'aide d'un timer. Prenons comme exemple l'ouverture :

Ticker timer;

void Valve::open(void)
{
  log_printf(">>>> OPEN VALVE (valve is %s)\n", valveStateName[m_state]);
  if (m_state == IS_CLOSED) {
    m_state = IS_OPENING;
    digitalWrite(OPEN_PIN, HIGH);
    timer.attach(OPEN_TIME, changeState, this);
  }
}

  • si la vanne est dans l'état IS_CLOSED
    • l'état de la vanne est modifié : IS_OPENING
    • la sortie OPEN_PIN est activée (commande du relais)
    • un timer de 20 secondes est démarré en lui donnant comme argument la durée, l'adresse de la fonction à appeler, et l'adresse de l'objet concerné (this)
Lorsque le timer arrive à échéance la fonction changeState() est appelée :

void changeState(Valve *v)
{
  if (v->state() == IS_OPENING) {
    v->isOpen();
  }
  else if (v->state() == IS_CLOSING) {
    v->isClosed();
  }
  timer.detach();
}

  • la méthode isOpen() est appellée
  • le timer est désactivé

void Valve::isOpen(void)
{
  log_println(">>>> VALVE is OPEN");
  m_state = IS_OPEN;
  digitalWrite(OPEN_PIN, LOW);
}

  • l'état de la vanne est modifié : IS_OPEN
  • la sortie OPEN_PIN est désactivée

Avec un ESP8266, Ticker est une manière très élégante d'implémenter des temporisations efficaces, sans pour autant surveiller le temps à l'aide des techniques ARDUINO habituelles (delay, millis).

4.3. Reconnexion automatique

La reconnexion au réseau WIFI est automatique, grâce à la mise en place de handlers dans la fonction Setup() :

  stationConnectedHandler = WiFi.onStationModeConnected(onStationConnected);
  stationDisconnectedHandler = WiFi.onStationModeDisconnected(onStationDisconnected);
  stationGotIpHandler = WiFi.onStationModeGotIP(onStationGotIP);

Voir cet article :

ESP8266 & ESP32 : Connexion au Réseau WIFI

4.4. Personnalisation

Le sketch comporte un certain nombre de constantes :

#define TANKS           3       // number of tanks
#define TOTAL_VOLUME    1530    // total tank volume
#define MAX_VOLUME      1400    // maximal tank admitted volume
#define MIN_VOLUME      200     // minimal tank volume
#define TOTAL_HEIGHT    100.0   // height of the tank in cm
#define TOP_RADIUS      45.0    // tank's top radius in cm
#define BOTTOM_RADIUS   35.0    // tank's bottom radius in cm
#define MIN_DISTANCE    22.0    // distance between tank's top level and JSNSR04T in cm. must be > minimal JSNSR04T distance

TANKS représente le nombre de réservoirs, 3 dans mon cas.

TOTAL_VOLUME est le volume total des réservoirs.

MAX_VOLUME est le volume d'eau maximal admis.

MIN_VOLUME est le volume d'eau minimal en dessous duquel il faut couper le surpresseur.

TOTAL_HEIGHT est la hauteur d'un réservoir.

TOP_RADIUS est le rayon supérieur du réservoir.

BOTTOM_RADIUS est le rayon inférieur du réservoir.

MIN_DISTANCE est la distance mesurée entre le capteur à ultrasons et la surface de l'eau, lorsque le réservoir est plein. S'il s'agit d'un JSN-SR04T elle ne peut être inférieure à 20cm, car c'est la distance minimale mesurable par ce capteur. Les autres capteurs acceptent une distance minimale de 2 à 3cm.

La mesure du volume d'eau est adaptée à des réservoirs coniques. Si l'on dispose d'un réservoir parallélépipédique, il suffit d'adapter le calcul effectué dans la fonction getVolume(). Toutes les dimensions sont exprimées en cm.

La fermeture de la vanne est ordonnée lorsque le volume d'eau est supérieur à MAX_VOLUME, et l'ouverture lorsque le volume d'eau est inférieur à 95% de MAX_VOLUME. Il s'agit d'un hystérésis, qui permet d'éviter de commander la vanne en boucle ouverture/fermeture si le niveau est aux alentours de la valeur de consigne, et donc de palier aux imprécisions de mesure.

Enfin, il faudra bien entendu remplacer les valeurs des variables ssid et password par ses propres identifiants d'accès au réseau WIFI :

const char* ssid = "........";
const char* password = "........";

4.5. Ressources WEB

Le projet comporte également un répertoire data, contenant un certain nombre de fichiers :

  • index.html : la page HTML
  • gauge.js : le code source de la jauge
  • open.jpg, close.jpg : les images

Ces ressources doivent être chargées dans la mémoire FLASH de l'ESP8266 à l'aide du menu "Outils/Sketch Data Upload".

Avant cela, si ce n'est pas déjà fait, il faut installer le plugin :
https://github.com/esp8266/arduino-esp8266fs-plugin

5. Essais

Un premier essai sur table permet de constater que l'on peut facilement mesurer une distance avec le capteur JSN-SR04T ou HC-SR04, et ceci avec le même code.

La mesure à l'aide du HC-SR04 s'avère beaucoup plus stable. D'autre part pour un objet situé à 30cm le JSN-SR04T annonce des valeurs aberrantes, ZÉRO ou supérieures à 2 mètres, de temps à autre. Mon exemplaire est-il défectueux ? C'est pour cette raison que les valeurs sont filtrées dans le code, seules les valeurs comprises entre 5cm et 150cm sont retenues.

La distance minimale mesurable par le JSN-SR04T est de 20cm. s'il est situé trop près de la surface de l'eau, la mesure sera égale à ZÉRO. Il faut donc pratiquer une ouverture de grand diamètre (15cm) dans le couvercle et surélever le capteur.

Après quelques heures de fonctionnement correct avec le JSN-SR04T, la distance mesurée est systématiquement ZÉRO. Je préfère abandonner le JSN-SR04T au profit du HC-SR04 ou du DYP-A02YY.

Capteur HC-SR04

La distance minimale mesurable par le HC-SR04 est de 2cm, moins problématique. Mais il faudra prévoir tout de même une rehausse bien aérée, afin qu'il ne soit pas trop exposé à l'humidité.

Il faudra probablement fabriquer un support adapté, avec deux trous de 11mm et le poser sur la rehausse, sans fermer celle-ci, afin d'éviter la condensation. Une application de vernis de tropicalisation est également conseillée.

Le DYP-A02YY, étanche, donne un résultat aussi bon que le HC-SR04. La distance de mesure minimale est de 3cm. C'est donc le capteur que j'ai choisi. Avantage supplémentaire : il n'aura pas besoin d'être rehaussé.

Pour le JSN-SR04T et le HC-SR04 j'ai utilisé une rehausse de 15cm de diamètre et de 12cm de longueur, et monté le capteur sur un support percé, posé sur cette rehausse. Comme le couvercle a une hauteur de 10cm, la distance entre le capteur et la surface de l'eau est donc de 22cm :

Sur une cuve enterrée, on fixera le capteur directement dans deux trous pratiqués dans le couvercle. En général l'ouverture d'accès est suffisamment haute et garantira une distance minimale de 50 à 60 cm entre le capteur et la surface de l'eau. Si ce n'est pas le cas il faudra également prévoir une rehausse.

Le problème avec une cuve enterrée est que certaines sont équipées d'un pré-filtre du type panier suspendu sous l'arrivée d'eau, dans l'ouverture d'accès, qui empêchera le passage des ultrasons. Si possible il vaut mieux déporter ce pré-filtre en amont, à côté de la cuve, afin de laisser l'ouverture d'accès libre.

6. Photos

Voici le montage que j'avais utilisé pour le JSN-SR04T. Une boîte de fromage blanc, en polyéthylène assez épais, sert de rehausse, après en avoir éliminé le fond. La rondelle découpée dans le couvercle est utilisée comme support pour le capteur. Il ne reste qu'à coller le tout, par exemple à la colle chaude :

Voici une photo du résultat sur le navigateur du smartphone :

A titre d'information, un objet JavaScript gauge est utilisé. Il provient de ce site :

https://www.cssscript.com/customizable-gauge-canvas/

Le fichier JavaScript gauge.js est déjà dans le dossier data du projet. Il n'y a aucun besoin de le télécharger.

Une image est affichée en dessous de la jauge, indiquant que la vanne est fermée. Une autre image sera affichée si elle est ouverte :

7. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/rainwater-tank

Cette page donne toutes les informations nécessaires :

https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

Le projet contient un répertoire level-control, dans lequel se trouvent les dossiers KICAD et ARDUINO.

8. Conclusion

Ce petit système fonctionne parfaitement bien, et ceci pour un prix de revient relativement modique, surtout si l'on n'a pas besoin de vanne d'arrivée d'eau, ni de capteur de niveau, ni de relais de coupure du surpresseur.

Il ne reste plus qu'à réaliser le PCB et intégrer celui-ci dans un boîtier. Quelques photos seront publiées sous peu.

Dernier point : j'espère en avoir convaincu plus d'un qu'utiliser AsyncWebServer était un bon moyen d'économiser son temps.


Cordialement
Henri




mardi 17 mai 2022

Electronique : les Dissipateurs Thermiques

 

Electronique : les Dissipateurs Thermiques


Lorsque l'on utilise un composant électronique de puissance (transistor, régulateur de tension, etc.) il est souvent nécessaire de l'équiper d'un dissipateur thermique afin d'évacuer les calories. Sans cette précaution, la puce pourrait subir des dommages.

Plus la différence entre sa tension d'entrée et de sortie sera élevée et plus le composant dissipera de la puissance. Nous pourrons calculer cette puissance comme ceci :

P = (Vout - Vin) * I

Pour un régulateur, Vout est la tension de sortie, Vin est la tension d'entrée et I est le courant.

Pour un transistor, Vout - Vin est la tension entre collecteur et émetteur, ou entre source et drain dans le cas d'un MOSFET.

Dans le calcul du dissipateur, il faudra considérer la résistance thermique du composant, qui peut varier entre 0.5°C/W pour les meilleurs et 5°C/W. Celle-ci est normalement précisée dans la datasheet du composant.

1. Calculer son dissipateur

La formule utilisée pour le calcul de la résistance thermique du dissipateur est celle-ci :

Rd = ((Tj - Ta) / P) - Rj

Tj est la température maximale, Ta est la température ambiante, P est la puissance à dissiper et Rj est la résistance jonction / boîtier du composant.

On peut éventuellement ajouter à Rj la résistance thermique de l'isolant électrique si l'on décide d'en intercaler un entre le composant et le dissipateur :

Plaquette isolante TO220

Attention : afin d'améliorer la conduction thermique entre le composant et le dissipateur il est fortement conseillé d'appliquer une fine couche de graisse thermique entre les deux. Dans le haut de gamme on peut citer celle-ci :

Arctic MX-4

Les plus petits dissipateurs font en général 25°C/W. Cela correspond à une dissipation de 3W pour un régulateur ayant une résistance thermique de 5°C/W. Au dessus de 25°C/W nous n'aurons pas besoin de dissipateur. Si cela ne vous rassure pas, choisissez le plus petit.

Sinon, il vous faudra trouver un dissipateur correspondant à la résistance thermique voulue.

Beaucoup de vendeurs précisent sa valeur :

GOTRONIC

AUDIOPHONICS

FARNELL et TME vous proposent un moteur de recherche

Sachez simplement qu'en matière de dissipateur, c'est comme pour les résistances ohmiques, une valeur plus faible de résistance thermique évacue mieux la chaleur, tout comme une résistance ohmique faible laisse mieux passer le courant.

Un dissipateur de 1°C/W sera moins chaud, à puissance dissipée égale, qu'un dissipateur de 2°C/W.

Si l'on achète des dissipateurs sur des sites chinois, la résistance thermique est rarement précisée. Il faudra faire une estimation par comparaison par rapport à d'autres dissipateurs ayant la même taille et dont on connait les caractéristiques.

On peut également la mesurer. Pour cela, il suffit de faire circuler un courant dans le composant, équipé du dissipateur à tester, et de mesurer sa température une fois que celle-ci est stabilisée. Il faudra s'équiper d'un thermomètre.

Si la puissance dissipée est connue, la résistance thermique sera obtenue à l'aide de la même formule que précédemment, en remplaçant Tj par la valeur de température mesurée.

2. Exemple pratique

Prenons comme exemple un régulateur de tension LM317. Ce régulateur a une température limite de 125°, et une résistance thermique jonction-boîtier de 5°C/W. La température ambiante sera de 35° maximum. Si nous avons 6W à dissiper, la résistance thermique du dissipateur sera :

Rd = ((125 - 35) / 6) - 5 = 10°C/W

La résistance que nous venons de calculer est une valeur limite à ne pas dépasser, sous peine de destruction du régulateur. Il vaut mieux prévoir une marge de sécurité. Egalement, si le montage est confiné dans un boîtier, des ouvertures d'aération sont indispensables.

Le dissipateur ML33 de chez GOTRONIC a une résistance thermique de 10°C/W. La marge est inexistante.

Pour cet exemple, je choisirais plutôt un dissipateur de ce type (un ML97 de chez GOTRONIC) :

Dissipateur 4.3°C/W

Si l'on considère que ce dissipateur est trop imposant, il faudra revoir la conception du montage, réduire la tension en entrée du régulateur par exemple.

3. KICAD

Pour ceux qui utilisent le logiciel de conception électronique KICAD, implanter un dissipateur sur un PCB est une opération simple :

Il faut tout d'abord ajouter le dissipateur au schéma. Pour cela il existe un composant schématique nommé HeatSink.

Ensuite, lors du choix des empreintes, il suffira de lui associer celle du dissipateur choisi. Si l'empreinte du dissipateur n'existe pas dans la librairie KICAD, il faudra la créer soi-même. Je ne vous cache pas qu'il est assez fastidieux de dessiner les ailettes d'un dissipateur.

4. Bonus

Je mets à disposition une petite librairie KICAD de 19 empreintes de dissipateurs, dessinées par moi-même :

https://bitbucket.org/henri_bachetti/kicad-libraries/src/master/library.pretty/HeatSinks.pretty/


Cordialement

Henri

mercredi 20 avril 2022

Electronique : La Bascule R/S



 

Electronique : La Bascule R/S


Faisant suite à l'article précédent, nous allons aujourd'hui étudier une bascule très simple : la bascule R/S. Historiquement il s'agit de la première bascule électronique.

Une bascule R/S est, en électronique, un moyen simple d'obtenir une mémoire à 1 seul bit. Elle se met à UN grâce à une impulsion sur son entrée S (SET), et se remet à ZÉRO grâce à une impulsion sur son entrée R (RESET).

1. Le schéma de base

On peut fabriquer une bascule R/S à l'aide de deux portes NON-ET (NAND) :

Au repos, les deux entrées R et S sont à UN, les sorties Q1 et Q2 sont dans un état indéterminé.

Il suffit d'un front descendant sur l'entrée S pour que la sortie Q1 passe à ZÉRO. La sortie complémentaire Q2 passe à UN.

Il suffit d'un front descendant sur l'entrée R pour que la sortie Q1 passe à UN. La sortie complémentaire Q2 passe à ZÉRO.

Il existe un cas pour lequel les deux sorties ne sont pas complémentaires : lorsque S et R sont toutes deux à ZERO, les sorties sont à UN. Il s'agit d'un état interdit.

Ce deuxième schéma est réalisé à l'aide de deux portes NON-OU (NOR). Cette bascule fonctionne sur des fronts montants.

Il suffit d'un front montant sur l'entrée S pour que la sortie Q1 passe à UN. La sortie complémentaire Q2 passe à ZÉRO.

Il suffit d'un front montant sur l'entrée R pour que la sortie Q1 passe à ZÉRO. La sortie complémentaire Q2 passe à UN.

Il existe un cas pour lequel les deux sorties ne sont pas complémentaires : lorsque S et R sont toutes deux à UN, les sorties sont à ZÉRO. Il s'agit d'un état interdit.

2. Application pratique

Voyons maintenant une application pratique : la commande d'une pompe.

Comme dans l'article précédent, imaginons que nous ayons une cuve d'eau à remplir. L'eau provient d'un puits. Un capteur de niveau est présent en haut de la cuve :


Il s'agit d'un capteur à contact sous ampoule (ILS), très fiable. Deux autres capteurs du même type sont montés dans le puits, en haut et en bas :

Afin de ne pas activer la pompe trop souvent, on désire qu'elle soit actionnée uniquement si le puits est plein.

Il y a donc deux conditions d'arrêt de la pompe : 

  • S1 est fermé : la cuve est pleine
  • S3 est fermé : le puits est vide
La pompe est un modèle 12V.

Voici le schéma retenu :


Nous retrouvons ici une bascule R/S :

  • l'entrée 1 de la porte NAND U1A représente l'entrée R
  • l'entrée 6 de la porte NAND U1B représente l'entrée S

La porte U1C permet d'interdire le fonctionnement de la pompe si la cuve est pleine. Sur le schéma, son entrée porte un petit nom : ENABLE

La porte U1D permet d'inverser le signal de commande car le IRF520 est un MOSFET canal N, un niveau HAUT permet de le rendre passant. On aurait pu tout aussi bien utiliser un MOSFET canal P à la place du canal N, en obtenant le même fonctionnement, sans inverser le signal.

Le choix du MOSFET canal N n'est pas anodin : ce sont les MOSFETs les plus courants et le choix est immense. De plus le CD 4011 comporte 4 portes, il en reste donc une que l'on peut utiliser pour l'inversion.

Par défaut, si les 3 capteurs sont ouverts, cela veut dire plusieurs choses :

  • SW1 ouvert : la cuve n'est pas pleine. La résistance R2 applique un niveau UN sur l'entrée ENABLE, autorisant le fonctionnement de la pompe
  • SW2 ouvert : le puits n'est pas plein. La résistance R1 applique un niveau UN sur l'entrée S
  • SW3 ouvert : le puits est vide. La résistance R3 applique un niveau ZERO sur l'entrée R, ce qui entraîne une coupure de la pompe

Les conditions de départ sont donc correctes : la pompe est coupée.

On peut remarquer également que l'état interdit ne peut pas exister. Si R et S sont à ZÉRO cela voudrait dire que SW3 est ouvert (le puits est vide) et que SW2 est fermé (le puits est plein), ce qui est impossible.

Voyons le fonctionnement des différents capteurs :

SW1 : s'il est ouvert, un niveau UN est présent sur l'entrée ENABLE, et autorise le fonctionnement de la pompe.

Si la cuve est pleine, SW1 se ferme et un niveau ZÉRO est présent sur l'entrée ENABLE, et interdit le fonctionnement de la pompe.

SW3 : s'il est ouvert (le puits est vide), un niveau ZÉRO est présent sur l'entrée R, et interdit le fonctionnement de la pompe.

Si le puits est en cours de remplissage, SW3 se ferme et un niveau UN est présent sur l'entrée R. Mais un front montant ne fait pas basculer la R/S et ne permet donc pas le fonctionnement de la pompe.

SW2 : s'il est ouvert un niveau UN est présent sur l'entrée S. Rien ne se passe.

Si le puits est plein, SW2 se ferme et un niveau ZÉRO est présent sur l'entrée S. C'est un front descendant, la R/S bascule et met en marche la pompe.

La pompe va donc fonctionner jusqu'à ce que le puits soit vide, SW3 s'ouvre et l'entrée R passe à ZÉRO. C'est un front descendant, la R/S bascule et arrête la pompe.

Bien entendu, si la cuve est pleine, SW1 se ferme et l'entrée ENABLE passe à ZÉRO, ce qui arrête la pompe. Il suffira donc de vider partiellement la cuve pour que la pompe se remette en route.

L'avantage d'un tel montage est, comme dans l'article précédent, sa simplicité et son faible coût. Ici, une pompe 12V est utilisée. Une diode de roue libre permet d'absorber la surtension générée par le moteur de la pompe lors de la coupure.

Une alimentation 12V complète le tout. Sa puissance dépendra principalement de celle de la pompe.

Si on le désire, on peut très bien remplacer la pompe par un modèle 230V, actionnée par un relais 12V ou 5V (comme dans l'article précédent), suivant ce que l'on peut trouver dans ses fonds de tiroir. Il faudra simplement choisir l'alimentation qui convient. Dans ce cas, un petit modèle de 3W sera amplement suffisant.

3. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/rainwater-tank

Cette page vous donne toutes les informations nécessaires :

https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

Le projet se trouve dans le sous répertoire pump-control.

4. conclusion

Ce petit exemple peut paraître un peu plus complexe que celui de l'article précédent, car il fait appel à une bascule. Les habitués d'ARDUINO trouveront certainement qu'écrire quelques lignes de code est plus simple. Mais il ne faut pas oublier un détail : un montage en logique câblée permet d'éviter certains désagréments des microcontrôleurs : le plantage, qu'un simple parasite peut parfois provoquer, et dans le cas présent, en cas de plantage, une inondation est à craindre.

Un autre avantage est qu'un montage de ce type peut être facilement alimenté par batterie + panneau solaire, car il ne consomme presque rien, mis à part le faible courant circulant dans les résistances. On peut d'ailleurs changer leurs valeur de 100KΩ par des 1MΩ, ce qui divisera par dix la consommation.

Avec un microcontrôleur, il faudra faire beaucoup plus d'efforts pour arriver au même résultat :

Certaines personnes seront plus à l'aise avec un ARDUINO, mais ce n'est pas forcément le cas de tout un chacun.


Cordialement

Henri


lundi 18 avril 2022

Electronique : Les Monostables

 

Electronique : Les Monostables


Il n'est pas nécessaire de disposer d'un microcontrôleur pour réaliser des temporisations. Différents moyens existent pour arriver à cette fin :

  • NE555
  • circuits monostables :
    • TTL : 74121, 74123
    • CMOS : CD4047, CD4098, etc.
  • circuits purement analogiques

Mais il existe aussi une possibilité assez méconnue : le monostable DIY réalisé à l'aide de portes logiques, NOR ou NAND.

1. Circuit monostable DIY


Sur ce schéma deux monostables sont représentés :

  • un monostable déclenchant sur front montant
  • un monostable déclenchant sur front descendant

1.1 Généralités

La sortie d'une porte NOR (NON-OU) est à UN tant que ses deux entrées sont à ZERO. Elle bascule à ZÉRO si une des deux entrées passe à UN, ou les deux :

Entrée 1     Entrée 2 Sortie
0 01
0 10
1 00
1 10

La sortie d'une porte NAND (NON-ET) est à UN tant que l'une de ses deux entrées est à ZERO. Elle bascule à ZÉRO si ses deux entrées passent à UN :

Entrée 1     Entrée 2 Sortie
0 01
0 11
1 01
1 10

1.2. Monostable déclenchant sur front montant 

Le premier monostable, bâti à l'aide de deux portes NOR, produit une impulsion de niveau HAUT de longueur fixe lorsqu'un front montant est détecté sur l'entrée.

Au repos, la sortie est à ZÉRO, grâce à la résistance R1. Un front montant fait basculer la sortie de U1A à ZÉRO et charge le condensateur C1 jusqu'à atteindre environ 40% de la tension d'alimentation. Pendant ce temps, l'entrée de U1B est à ZERO, sa sortie à UN. Lorsque le condensateur est suffisamment chargé la sortie de U1B re-bascule à ZÉRO.

1.3. Monostable déclenchant sur front descendant

Le deuxième monostable, bâti à l'aide de deux portes NAND (NON-ET), produit une impulsion de niveau BAS de longueur fixe lorsqu'un front descendant est détecté sur l'entrée.

Au repos, la sortie est à UN, grâce à la résistance R2. Un front descendant fait basculer la sortie de U2A à UN et charge le condensateur C1 jusqu'à atteindre environ 60% de la tension d'alimentation. Pendant ce temps, l'entrée de U2B est à UN, sa sortie à ZERO. Lorsque le condensateur est suffisamment chargé la sortie de U2B re-bascule à UN.

1.4. Implémentation

Ces circuits sont implémentés à base de portes logiques NOR et NAND CMOS, dont les avantages sont multiples :

  • large plage d'alimentation : 3V à 15V
  • consommation extrêmement faible : < 1µA

La valeur de la temporisation obtenue dépend des valeurs des couples condensateur / résistance, ainsi que des niveaux de commutation des portes logiques :

T = RC / 2

Avec les valeurs utilisées, 100µF et 100KΩ, la temporisation sera donc de 5 secondes.

Ces monostables ne sont pas redéclenchables, c'est à dire que si un nouveau front est détecté alors que la sortie est active, la longueur de la temporisation ne sera pas modifiée.

Pourquoi avoir choisi de réaliser ces temporisations sans avoir recours à des composants monostables spécialisés, alors que l'écart de prix est faible ? Un boîtier CD4001 ou CD4011 comporte 4 portes. Nous allons pouvoir utiliser les deux portes restantes pour un autre usage, par exemple inverser l'entrée ou la sortie :

Ces deux montages sont équivalents. Ils permettent d'inverser la logique sur l'entrée ou la sortie d'un monostable.

2. Application pratique

Voyons maintenant une application pratique : la commande d'une électrovanne motorisée :

Cette vanne 230V à trois fils est à raccorder comme suit :

  • un fil de neutre
  • un fil d'ouverture
  • un fil de fermeture

Il existe des modèles 12V ou 24V. La puissance nécessaire pour la commande est de 6W.

Le temps d'ouverture est de 15 secondes. L'électrovanne possède des capteurs de fin de course, ce qui fait que si la commande dure plus longtemps, il n'y a aucun risque de l'endommager.

Important : si le temps pendant lequel la commende d'ouverture est appliquée est trop court, elle ne pourra pas être commandée dans l'autre sens. Il faut donc impérativement que le temps de commande soit supérieur à 15 secondes.

Imaginons que nous ayons une cuve d'eau à remplir. L'eau provient de la toiture, par simple gravité. Un capteur de niveau est présent en haut de la cuve :

Il s'agit d'un capteur à contact sous ampoule (ILS), très fiable. Le capteur est ouvert au repos et fermé si la cuve est pleine. Si la cuve est pleine, il faut impérativement couper l'arrivée d'eau, afin d'éviter une inondation.

Sur ce schéma nous trouvons deux monostables, commandés tous deux par le capteur de niveau SW1 :

  • celui du haut permet d'ouvrir la vanne lorsque le capteur est ouvert
  • celui du bas permet de fermer la vanne lorsque le capteur est fermé

Le signal de sortie du monostable du bas est inversé en sortie afin de pouvoir commander le relais K2. On aurait pu tout aussi bien utiliser un transistor PNP à la place du transistor NPN Q2, en obtenant le même fonctionnement, sans inverser le signal.

A la mise sous tension, si le capteur est ouvert, la vanne s'ouvre, si le capteur est fermé, la vanne se ferme.

L'avantage d'un tel montage, outre sa simplicité et son faible coût, est d'être très tolérant par rapport à sa tension d'alimentation : 3V à 15V. On peut très bien l'équiper de relais 12V ou 5V, suivant ce que l'on peut trouver dans ses fonds de tiroir. Il faudra simplement choisir l'alimentation adéquate.

Ici, deux relais 5V sont utilisés, avec chacun leur transistor de commande et leur diode de roue libre. Deux varistances 275V permettent d'absorber la surtension générée par le moteur de la vanne lors de la coupure.

Une alimentation 5V 3W complète le tout. Une Hi-link HLK-PM01 conviendra parfaitement, ou un bloc secteur 5V / 500mA. Si la vanne est un modèle 12V, une alimentation 12V pourra fournir la puissance nécessaire à l'ensemble, mais il faudra choisir une alimentation un peu plus puissante : environ 10W.

3. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/rainwater-tank

Cette page vous donne toutes les informations nécessaires :

Le projet se trouve dans le sous répertoire valve-control.

4. conclusion

Ce petit projet en logique câblée permet de se rendre compte que l'informatique et les microcontrôleurs ne sont pas la seule voie possible lorsque l'on désire réaliser des montages simples.


Cordialement

Henri


mardi 15 mars 2022

ARDUINO : Centrale d'Alarme 2 Zones (2ème partie)

 


ARDUINO : Centrale d'Alarme 2 Zones (2ème partie)


Voici la suite de cet article :

ARDUINO : Centrale d'Alarme 2 Zones

L'article de la semaine dernière n'a cessé d'être remanié (que les premiers lecteurs aient la bonté de me pardonner), mais cela en valait la peine.

L'objectif de départ a été largement revisité. Pour résumer :

  • l'alarme compte maintenant deux zones de détection
  • le clavier est un modèle 12 touches au lieu de 16, ce qui a permis de libérer une entrée de la NANO pour la deuxième zone
  • l'alarme est capable d'accepter des détecteurs filaires du commerce, ce qui n'était pas vraiment prévu au départ

Pour comprendre le principe des zones il faut lire le paragraphe "1.1. Nombre de zones" de l'article précédent.

Le PCB est finalisé (47mm x 90mm) :

La carte ARDUINO est enfichée sur deux connecteurs du type pin-headers 15 broches femelle.

De haut en bas, à gauche :

  • le connecteur KF2510 d'alimentation
  • le connecteur clavier
  • le connecteur du lecteur RFID

De haut en bas, à droite :

  • le bornier de la sirène
  • le connecteur LED
  • le connecteur écran LCD
  • le connecteur du HC-SR501

En bas de la carte se trouve le bornier auxiliaire, avec, de gauche à droite :

  • 1 : entrée Zone 2
  • 2 : entrée Zone 1
  • 3 : sortie alarme
  • 4 : sortie LED
  • 5 : GND
  • 6 : +VCC

On voit que les entrées Zone 1 et Zone 2 sont reliées à la masse à l'aide de deux fils.

A gauche, on voit les deux nappes de raccordement pour le lecteur RFID et l'écran LCD. Elles sont fabriquées à l'aide de connecteurs multipoints communément appelés DUPONT.

On peut les trouver par exemple chez GOTRONIC (connecteurs et contacts sont vendus séparément), ainsi que la pince à sertir, mais on peut facilement trouver les mêmes produits sur AliExpress.

Les connecteurs bleus sont des pin-headers classiques au pas de 2.54.

Le connecteur KF2510 d'alimentation peut être remplacé par un pin-header 2 points au pas de 2.54. Attention dans ce cas au sens de branchement. Il n'y a pas de détrompeur, contrairement au KF2510.

Voici la centrale d'alarme après branchement :

Deux interrupteurs à levier ont été raccordés sur les entrées zone 1 et zone 2 pour les tests.

Tout fonctionne parfaitement bien. Quelques bugs résiduels ont encore été corrigés.

Les essais avec un PIR HC-SR501 donnent le résultat escompté.

J'attends de recevoir 2 détecteurs de mouvements du commerce, pour finaliser l'installation. En attendant, l'alarme sera mise en coffret dans une boîte de dérivation du genre Legrand Plexo d'environ 170x140x90. Si l'on adopte un boîtier plus petit, le lecteur RFID fonctionne bien lorsqu'il est placé sous le clavier, malgré l'épaisseur de celui-ci. Mais on peut utiliser aussi un clavier extra-plat :

L'alimentation sera une MeanWell RS-15-12, la plus petite de sa catégorie :

1.2A devraient amplement suffire pour la configuration envisagée :

  • 2 détecteurs de mouvements Bosch BDL2-WP12 : 11mA chacun
  • sirène : 400mA maxi

Photos

Voici quelques photos de l'alarme dans son coffret :

Fond du boîtier

La NANO et son alimentation 12V, vissées au fond du coffret.

Clavier, lecteur RFID et LCD, sous le couvercle

Le LCD est vissé sur des colonnettes plastique collées sous le couvercle du coffret.

Le clavier est fixé par 4 points de colle cyanoacrylate.

Le lecteur RFID est fixé à l'aide d'un morceau de PATAFIX.

Le logo RFID est imprimé sur un morceau de film plastique autocollant.

Pour l'instant, l'alarme est en test dans mon salon, avec deux détecteurs de mouvements et un buzzer à la place de la sirène (histoire de pouvoir faire des tests complets sans casque antibruit) :

Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/alarm-system

Cette page donne toutes les informations nécessaires :

https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html


Cordialement

Henri