Système de protection contre les fuites



Je veux partager mon expérience dans la création d'un appareil qui était non seulement intéressant à mettre en œuvre, mais qui pouvait également être bénéfique. Peut-être que quelqu'un dira qu'il était possible de faire quelque chose de plus simple, mais ce n'est pas notre façon ...

Tout a commencé avec le fait qu'après la réparation de l'appartement un problème potentiel a été découvert. En cas de fuite quelque part, il ne sera pas possible de se rendre aux grues pour entrer dans l'appartement sans certains efforts physiques et dextérité, car la trappe de fermeture des grues n'est pas très bien installée. Par conséquent, en cas de besoin urgent (accident) de fermer rapidement les robinets ne fonctionnera pas. Il était nécessaire de faire quelque chose avec cela, et une solution est apparue - pour saisir l'opportunité à distance, c'est-à-dire sans ouvrir la trappe, arrêtez l'alimentation en eau. Et en prime, pour mettre en œuvre tout ce qui peut être fait confiance avec l'électronique.

Voici à quoi ressemble l'appareil.



Principales caractéristiques:
  • Coupez l'alimentation en eau indépendamment en cas de fuite
  • Coupez l'alimentation en eau "en mode manuel" - sur le panneau avant il y a un "bouton rouge" et un interrupteur à bascule à deux positions
  • Affichage des relevés de compteur sur son propre écran
  • Afficher d'autres informations utiles sur l'écran

Ce n'est pas possible, mais prévoit:
  • Travaillez à partir d'une source d'alimentation de secours. Maintenant, en cas de panne de courant - l'appareil est inutile
  • Travailler avec des capteurs de fuite sans fil
  • Nettoyez vous-même les robinets. Afin de ne pas «devenir acide», il est conseillé de les ouvrir / fermer une fois par mois
  • Avertissez-vous des événements sur un smartphone et soyez contrôlé par "air"

Il ne peut pas (et même si cela est très nécessaire):
  • Avoir plusieurs canaux pour lire différents capteurs de fuite câblés, maintenant tous les capteurs (5 pièces) sont connectés en parallèle
  • Gérez les grues individuellement. Il y en a deux (un sur l'eau chaude, le second sur l'eau froide), et ils sont connectés en parallèle
  • Contrôle de rupture des capteurs

Voici une description des composants et de leur fonction (prix en date de juillet 2015).

Bien sûr, j'avais également besoin d'un programmeur / émulateur, j'ai utilisé celui-ci: ARM Emulator, prend en charge ARM7, ARM9, ARM11, Cortex-M3 core, ADS, IAR, STM32, interface JTAG, version V8 à double tampon . Parmi les fonctionnalités, il est possible de mentionner qu'en plus des fils standard pour la programmation SW , j'ai dû lui appliquer la tension d'alimentation actuelle de la puce programmable, 3,3 volts dans mon cas. Il est nécessaire que le programmeur comprenne les niveaux de tension des valeurs logiques. Sans cela, la puce programmable ne voulait pas être détectée. En outre, ce programmeur a la capacité d'alimenter un appareil programmable, une broche est fournie pour cela, la tension est activée / désactivée par l'utilitaire JLink.exe.

Plus sur le fer


Microcontrôleur


Le cerveau de tout le système est un microcontrôleur 32 bits de ST soigneusement soudé par des travailleurs chinois dans des usines chinoises à une carte qui est «compatible» avec Leaf Maple Mini .
À propos de Leaf Maple Mini
eta4ever
,
«» , …

Dispose de 48 conclusions. Le cœur fonctionne à 72 MHz, a intégré SRAM - 20 Ko et Flash - 128 Ko. Plus de détails ici . Ces paramètres encouragent certainement l'utilisation d'outils et d'outils de haut niveau, c'est-à-dire ce sont FreeRTOS , écran couleur graphique, C ++, etc. (et pas deux LED et assembleur). En général, ne vous refusez rien ... sauf C ++, mais ce n'est pas un problème de puce.
Pourquoi?
C++ , , , . , C++ , , , , .. STM32CubeMX , FreeRTOS. , .

Utilisation des conclusions du microcontrôleur. De là, vous pouvez deviner à quoi est connecté.


Afficher




Le module avec un écran TFT de 320x240 pixels construit sur un contrôleur compatible avec ILI9341 est responsable de l'affichage des informations; il fonctionne par SPI à la fréquence maximale possible pour ce bundle (18MHz). SPI n'est connecté au microcontrôleur que dans une seule direction, la sortie de lecture des données du module d'affichage reste suspendue en l'air, car Je n'ai pas proposé cette fonctionnalité, mais je l'ai enregistrée sur les jambes libres du microcontrôleur. Le transfert de données fonctionne sur DMA .

Un connecteur pour connecter une carte SD est soudé au module à l'arrière, je n'ai pas testé de travailler avec une carte SD et le connecteur n'est pas impliqué dans ce projet.

Module RTC et EEPROM




L'horloge du module est implémentée avec une puce DS3231. Je n'ai pas causé de problèmes particuliers, le seul inconvénient était que toutes les valeurs (date, heure) sont stockées dans des registres au format BCD , lorsque deux chiffres décimaux sont reflétés dans un octet (dans les quatre bits supérieurs - le chiffre le plus significatif, dans le bas - le chiffre le moins significatif) . Par exemple, la valeur «38 minutes» est stockée en tant que valeur décimale 56 (il s'agit de «38» dans la notation hexadécimale). Il n'a pas été possible de savoir s'il était possible de passer au format binaire.

Le module a sa propre batterie, donc à chaque fois que vous perdez de l’alimentation, vous n’avez pas à régler l’heure et la date. De plus, le microcircuit AT24C32 est soudé sur la carte du module, ayant jusqu'à 32768 bits EEPROM! Autrement dit, il s'agit de 4 Ko de mémoire non volatile. L'horloge et la mémoire se trouvent sur le même bus I2C. À l'heure actuelle, la mémoire est utilisée uniquement pour stocker les paramètres de l'appareil, la valeur actuelle des lectures des compteurs et autre chose. finalement occupé ... 25 octets. Plus tard, il sera utilisé pour garder des journaux de divers événements, et éventuellement pour garder des statistiques de consommation (je ne sais pas pourquoi, mais il y aura une occasion de programmer l'affichage des graphiques).

En plus des contacts du bus I2C et de l'alimentation, il y en a deux de plus sur la carte. "SQW" est le signal du réveil qui peut être programmé via les registres et "32K" est la fréquence générée par le DS3231 pour les autres appareils. Ce projet ne s'applique pas.

Module avec capteur d'humidité




Il sert de tampon entre le monde extérieur et le microcontrôleur. Les fils allant aux sondes au total ont une longueur d'environ 10 mètres, sans écran. Fils téléphoniques conventionnels à deux fils. En cas de coup statique, j'espère que seul ce module mourra, mais pas le microcontrôleur. Il est capable de mesurer la résistance entre deux électrodes et de donner ces informations sous forme analogique (tension de 0 à tension d'alimentation) et numérique (0/1, le module dispose d'une résistance variable qui peut être ajustée à la limite de fonctionnement).

Il y a eu des problèmes mineurs avec ce module. Lors de l'application et de la suppression de la tension d'alimentation, le module à la sortie numérique a signalé un déclenchement, cela peut également être vu par le clignotement de la LED pendant une fraction de seconde (sur la carte du module, une LED est installée en parallèle avec la sortie numérique). Le microcontrôleur a réussi à lire un signal anormal lorsque l'alimentation du système a été appliquée / réinitialisée (problème n ° 1). La solution a été mise en œuvre en sautant de courtes impulsions de fonctionnement, en prévision d'une condition fixée pendant un certain temps.

La résistance variable a un très petit angle de réglage, auquel je n'ai pas pu trouver la frontière entre l'absence de faux positifs et une bonne sensibilité (problème n ° 2). Il a ensuite été implémenté en lisant le signal analogique via le microcontrôleur ADC. Dans le même temps, il est devenu possible de définir la limite de réponse dans les paramètres de l'appareil en tant que paramètre. La possibilité d'ajuster le niveau de réponse est désormais considérée comme superflue, et il est probablement préférable de coder en dur la valeur limite.

Il a été remarqué qu'après plusieurs minutes de fonctionnement (échauffement?), Le module a soudainement commencé à signaler un fonctionnement spontané (problème numéro 3, combien d'entre eux?!).

À la frontière des réponses anormales, l'intensité de la lueur LED (sur le module) augmente ou diminue progressivement, comme si elle était contrôlée par un générateur PWM, il est clair que c'est du bruit et c'est de la haute fréquence, on pourrait en attendre la même chose à la sortie «numérique» du module (problème n ° 4 )

Je précise que tous ces problèmes ont été résolus lors de la mise en œuvre du signal analogique du module.

Les sondes (parties de capteurs situées directement dans des lieux d'accumulation d'eau en cas d'accident) sont réalisées à partir de moyens improvisés. Il s'agit d'étain (acier) et d'une petite boîte de jonction ronde, modifiée mécaniquement au type souhaité et avec des fils soudés à l'intérieur. Lorsque de l'eau pénètre entre les paires d'électrodes, la résistance diminue et est considérée par le contrôleur comme une «fuite».



Les tests en laboratoire ont montré que le produit remplit bien sa fonction et n'est pas un maillon faible du système.

Nutrition


L'ensemble du système fonctionne à partir de la charge du téléphone - 5 volts, 2A (ici avec une marge). Sur la carte Maple Mini, un régulateur de tension de 3,3 volts est installé, la tension d'entrée peut aller jusqu'à 12 volts, les caractéristiques du stabilisateur le permettent, mais une tension aussi élevée n'est pas pratique à utiliser, plus à ce sujet ci-dessous.

Avec un stabilisateur, 3,3 volts vont également à la puissance des modules RTC, TFT et au module de mesure d'humidité. Les grues sont connectées via l'ensemble interrupteur d'alimentation ULN2003AN, directement à partir de l'alimentation, c'est-à-dire travailler à partir de 5 volts, moins la chute sur les touches. ULN2003AN n'utilise que deux des sept canaux.

Bien sûr, il est conseillé de remplacer l'alimentation par une autre, avec une tension légèrement supérieure, car parfois, lors de la fermeture des grues, l'une d'elles dans une position presque extrême en raison du fonctionnement de sa propre remorque (deux pièces sont installées dans le corps de la vanne, pour déterminer les positions extrêmes), s'arrête pendant une fraction de seconde, puis un «rebond» se produit (en raison du jeu dans les engrenages de la boîte de vitesses ), puis une tentative répétée de serrer la vanne à boisseau sphérique et ainsi de suite jusqu'à ce que le contrôleur supprime la tension d'alimentation du servo variateur.

Le vendeur sur le site dispose d'informations que les grues doivent fonctionner à partir de 5 volts, dans ce cas la tension est moins fournie. Le logiciel est conçu pour que pour ouvrir et fermer les robinets, la tension ne soit fournie que pendant un certain temps (6 secondes), période pendant laquelle les robinets doivent avoir le temps de s'ouvrir ou de se fermer. Il convient de noter que cet effet n'affecte pas la fermeture incomplète du robinet, comme ce moment survient après que le robinet a complètement coupé le débit d'eau. Il est également possible de mentionner que trop de tension aux servos (appliquée à 9 volts pour l'expérience) les fait se déplacer par inertie plus loin (après le déclenchement du fin de course) et buter contre la position extrême avec le bruit caractéristique d'un impact.

Vannes à boisseau sphérique servo


Les vannes d'arrêt semblent fiables, mais la partie électronique a dû être finalisée.



Si vous regardez le circuit de commande de la grue, vous remarquerez qu'il est contrôlé par une tension positive. Le "moins" général et deux fils "plus" de puissance du signal, l'un pour la fermeture, l'autre pour l'ouverture. Mais ULN2003AN ne peut pas fonctionner dans ce mode; dans ce cas, lorsque la clé est ouverte, la sortie gérée est connectée au moins. La solution est de changer la polarité de contrôle de la grue elle-même. Pour ce faire, j'ai dû échanger les signaux de la "bande-annonce", car en raison d'un changement de polarité, le moteur électrique a tourné dans la direction opposée (par rapport au circuit d'origine), tandis que les positions extrêmes sont maintenant dans des directions opposées. En conséquence, nous avons une grue avec un «plus» commun et deux «inconvénients» de contrôle. Exactement ce qui est nécessaire!

Grues avec servos en conditions de "combat".



Lectures des compteurs


Bien sûr, aucune donnée n'est stockée dans le compteur lui-même, ce qui pourrait être lu par deux fils qui en sont retirés. Ce n'est qu'une chaîne avec un interrupteur à lames et un aimant situé sur une roue en rotation. Les mesures avec un multimètre n'ont montré la présence d'aucune résistance ou capacité électrique dans le circuit. Dans mes compteurs, le circuit (avec ouverture ultérieure) du commutateur à lames se produit à un débit d'un litre d'eau. Quelque part, il y avait des informations sur les compteurs, dont le signal est formé tous les 10 litres. Ceux. ils sont différents.

Le microcontrôleur est nécessaire pour lire ces impulsions. L'interface utilisateur de l'appareil, bien sûr, fournit la valeur initiale.

De problèmes existants: en l'absence d'électricité, la consommation d'eau ne sera pas prise en compte. Il y a un défaut matériel, il est nécessaire de le réparer - faites une alimentation de secours sur les batteries, cela est également nécessaire pour les fonctions principales de l'appareil, sinon l'appareil ne pourra pas fermer les robinets si nécessaire.

De là, les deux tâches suivantes se présentent:
  1. . , , « », , () / . , ( ), «», , (, ), , FreeRTOS.
  2. , , « ».
    Fermez les robinets?
    , , , , , 11 , , «» , , «» , !

Les contrôles


Encodeur


Situé à côté de l'écran et conçu pour naviguer dans le menu. Rotation - passez à l'élément de menu suivant / précédent, appuyez sur - sélectionnez / activez un élément de menu.

"Bouton rouge"


Le moyen le plus simple pour fermer les robinets est d'appuyer sur le bouton rouge. Bien que cela ne devrait pas être utile, car quelque temps auparavant, l'appareil lui-même devait tout faire. Mais juste au cas où, le bouton existe. Presse répétée, appui long, double clic, etc. pas compté, seulement la première presse et c'est tout. Le mode «urgence» est activé, il ne peut être désactivé que par un élément de menu spécial.

Interrupteur à bascule marche / arrêt


Ils peuvent également être désactivés par des taps, mais peuvent également être ouverts, bien sûr, si le système n'est pas en mode «crash». Il peut être utile pour l'arrêt temporaire de l'approvisionnement en eau.

LED tricolore


Ici aussi, tout est simple. Pour indiquer le mode actuel: vert - tout est en ordre, rouge - tout n'est pas en ordre, bleu - les robinets sont bloqués à l'aide de l'interrupteur à bascule (voir paragraphe ci-dessus). Le mélange des couleurs n'est pas utilisé, trois suffisaient. Mais ici, un problème s'est posé. La lueur est si forte qu'elle éblouit lorsque vous regardez l'écran. 470 ohms pour chaque couleur n'était pas suffisant. Corrigé par programme. Lorsque l'écran est dans un état actif (et il est actif lorsque vous utilisez les commandes et pendant un certain temps), cette LED est éteinte.

Conclusion


L'appareil fonctionne, des tests périodiques montrent qu'il fonctionne correctement. Il ne gèle pas, il n'est pas buggé. Bien que je sache où il y a des erreurs potentielles mais non critiques dans le code, cela n'est pas abordé dans cet article.

Sources, projet Keil uVision 5, fichier de projet pour STM32CubeMX

Source: https://habr.com/ru/post/fr382065/


All Articles