Capteurs pour maison intelligente

Nous avons fait une armoire de commande pour la maison ici , développé un contrôleur ici .

La lumière peut être allumée / éteinte depuis le téléphone, les notifications de fuite d'eau, l'inclusion de l'arrosage arrivent aux télégrammes et Dieu sait toujours quoi.

Mais tout ce système est loin d'être une maison intelligente, ce n'est qu'une extension de vos bras et de vos jambes, et la seule aide en est que vous n'avez pas besoin de sortir du lit pour éteindre les lumières.

Cet article traite de ce qui peut rapprocher votre maison de la smart, et vous l'avez deviné - c'est le développement de capteurs. Ce sont des yeux, des oreilles et un peu plus pour votre maison. Sur la base des informations des capteurs, il est déjà possible d'écrire des scripts automatiques qui revitaliseront la maison et vous aideront tranquillement et rendront votre vie plus confortable.

Le marché dispose désormais d'une grande variété d'appareils de ce type, provenant d'éminents fabricants et d'origine inconnue. Et si cela ne vous dérange pas beaucoup, vous pouvez les utiliser, mais il y en a un mais, voire plusieurs mais. Tout d'abord, la plupart d'entre eux utilisent leurs protocoles propriétaires et ne fonctionnent qu'avec leurs hubs. Et à tout moment, l'API de ces concentrateurs peut devenir fermée, et le contrôle ne sera possible que via l'application du fabricant (rappelez-vous l'histoire de Google Nest), de sorte que toute votre automatisation se bloquera à un moment donné.

Deuxièmement, tous les fabricants, sans exception, essaient d'en tirer un profit, et comme ce n'est pas un phénomène massif, vous devez sortir, et chaque capteur est fabriqué dans son propre boîtier séparé avec sa propre batterie. Et maintenant, comptons, vous avez 5 chambres dans chacune, je voudrais avoir un capteur de température, de mouvement, de lumière et de CO. Pas un tapis compliqué. les calculs conduisent à 20 cases au plafond. Premièrement, ce n'est pas beau, et deuxièmement, dans un an ou deux, il faudra changer les piles de ces capteurs en une demi-journée avec une échelle et un tournevis, cassant très probablement quelques attaches et faisant tomber le tournevis plusieurs fois sur le stratifié. Oui, et troisièmement, lorsque l'un des capteurs tombe en panne dans quelques années, vous ne pourrez pas acheter le même, et très probablement les anciens concentrateurs ne prendront pas en charge les nouveaux capteurs (le profit est important) et vous devrez changer tous les capteurs et les réintégrer dans votre le système. Quel moyen de sortir est de regarder quelque chose de l'open source, ou de le faire vous-même, au moins le code sera toujours avec vous. Donc, à la lumière de ce qui est décrit, le développement de sa boîte à capteurs n'est pas une tâche exagérée.

Donc, en développant mon capteur, j'ai essayé d'éviter le «mais» décrit ci-dessus:

  1. Nous regroupons tous les capteurs dans un seul boîtier
  2. Nous faisons de l'énergie câblée (construire à partir de zéro)
  3. Nous réalisons des interfaces selon des protocoles standards

Passons maintenant à la façon dont un tel appareil devrait fonctionner.

Il existe deux options possibles, et elles dépendent de l'environnement dans lequel l'appareil est utilisé, dans un système à commande centralisée, dans un système distribué ou en général en tant qu'appareil indépendant.

La première option est plus simple car seules les données brutes des capteurs sont nécessaires, puis le contrôleur central, qui interroge l'appareil, décide quoi en faire, un exemple d'un tel appareil est un capteur de fumée de bureau. Par exemple, les données du capteur ont dépassé un certain seuil, tandis que le contrôleur central sait que le mode armé est désormais activé et qu'il est donc nécessaire de déclencher une alarme.

La deuxième option suppose que l'appareil lui-même doit savoir dans quel mode il se trouve actuellement, pouvoir convertir les données brutes des capteurs, prendre une décision concernant l'information de l'utilisateur. Le développement d'un tel appareil, bien sûr, nécessite plus d'efforts à la fois en termes d'écriture d'un programme et en termes d'élaboration de la convivialité.

À l'origine, j'avais prévu de fabriquer l'appareil selon la deuxième option, et j'ai posé deux canaux de communication - mqtt et modbus. Mqtt via WIFI pour jouer et modbus via RS-485 pour se connecter au système de contrôle domestique.

Mqtt via WIFI n'est pas difficile à faire grâce aux bibliothèques lua ESP8266 et l'algorithme est assez standard:

  1. au premier démarrage ou si vous ne pouvez pas vous connecter au WIFI, vous devez créer un point d'accès à partir de ESP8266
  2. déployer un petit serveur web dessus avec les paramètres WIFI et les paramètres du serveur mqtt (peut être fait gratuitement sur Amazon par exemple)
  3. enregistrer toutes les données saisies dans la mémoire ESP8266
  4. après le redémarrage, essayez de vous connecter à mqtt via le WIFI domestique

Cependant, lorsque la question s'est posée d'intégrer l'appareil dans le système domestique via Modbus, j'ai commencé à manquer les données brutes des capteurs, et finalement j'ai mis toutes les données brutes dans la table Modbus également. Par exemple, il semblerait qu'un événement inutile d'un capteur de mouvement, dans le mode désarmé, puisse même être utilisé pour toutes sortes de fonctions de maison intelligente.

Le tableau Modbus est le suivant:
Description du type N
0. -r - état du sensortag (1 - mode inactif / 2 - inactif sur protection / 3 - mode protection)
1. -r - raison de l'alarme du champ binaire (bit 1 - gaz / 2 - température / 3 - mouvement)
2. -r - détection de mouvement en état de repos et de protection (0/1 - pas de mouvement / mouvement)
3. -r - concentration de gaz (valeur brute de adc)
4. -r - température en degrés C
5. -r - valeur lumineuse prétraitée (pièce de nuit <17 / pièce sombre <50 / crépuscule <150 ensoleillée <250)
6. -r - valeur lumineuse (valeur brute de adc)
7. -r - nombre d'événements d'alarme dans ce cycle de vie
8. -r - nombre de redémarrages sensortag
9. -r - non utilisé
10 -wr- activation de l'alarme (0 - passer au ralenti / 1 - passer à l'alarme)
11. -wr- sensibilité au mouvement (0 - 100%, signifie 0 - le plus sensible)
12. -wr- limite de concentration de gaz

De plus, comme toujours, cela se résume au développement de la carte et du logiciel. Et dans ce cas, le développement de la carte a été plus difficile pour moi, car il y a une partie analogique (puissance, reliure des capteurs de mouvement et CO) avec laquelle je ne suis pas très sympathique, et il n'y a pas grand chose à écrire sur les logiciels, car tout y est vraiment simple. C'est-à-dire non seulement mais ordinaire, j'ai lu la lecture de l'ADC, les ai convertis, les ai traités (en utilisant la méthode de la fenêtre coulissante sur tous les canaux) et les ai mis dans un tableau. Il ne serait pas mauvais de compenser la température du signal du capteur PIR. en été, lorsque la température ambiante est supérieure à +30 degrés, le capteur a une réponse beaucoup plus faible. Donc, dans cet article, je voudrais décrire le développement de la carte elle-même et faire un peu attention à la convivialité.

Commençons par le tableau, voici ce que vous devez faire pour ce faire:

  1. choisir un microcontrôleur et des capteurs (capteur pir, lumière, température, CO)
  2. choisissez le pilote rs-485 pour la communication modbus
  3. ESP8266 pour la communication mqtt (que choisir)
  4. sélectionnez LED RGB pour visualiser l'état de l'appareil
  5. développer des modules de puissance
  6. développer un schéma de circuit, reproduire et fabriquer des cartes

Le choix d'un microcontrôleur n'est pas difficile, il vous suffit d'atteindre la boîte avec les devboards et d'obtenir une seule carte - cela suffira. Mais sérieusement, je ne peux pas me vanter de la connaissance de nombreuses familles de microcontrôleurs, donc je connais STM32, ATSAM et AVR. J'ai choisi ce dernier, et uniquement parce que je n'avais que quelques Arduino Leonardo qui traînaient et manquaient l'ancien MK2. Je ne mentionnerai pas que l'AVR tire ses pieds à la fréquence du quartz, et cela m'est utile, et qu'il a une large gamme de périphériques et un ADC assez rapide, il est beaucoup plus important pour moi qu'il ait un boîtier TQFP et je peux le souder moi-même, sans microscope et danser avec des tambourins . Si le choix d'un microcontrôleur est une question de dix minutes, alors le choix des capteurs n'est pas une mince affaire. Nous devons d'abord réfléchir à la façon de les connecter, à la façon de traiter leurs signaux et à la manière dont ils vont s'influencer mutuellement. Si certains capteurs peuvent être pris dans l'ensemble Arduino et qu'ils coûtent un sou, alors avec d'autres, plus rares, vous pouvez bricoler plus longtemps et dépenser plus. De plus, la sélection des capteurs était également limitée par mes critères supplémentaires:

  1. Les capteurs peuvent être connectés comme vous le souhaitez, mais pas via I2C. Voilà comment cela n'a pas fonctionné pour moi d'implémenter I2C de manière fiable sur des microcontrôleurs, où la prise en charge de ce bus est à moitié matérielle et à moitié logicielle (comme dans AVR). Il est arrivé que cela fonctionne, cela fonctionne pendant un mois, puis il se déclenche, et aucune séquence de récupération n'aide, il a donc été décidé d'utiliser autant de capteurs analogiques que possible connectés à l'ADC et d'utiliser SPI uniquement pour la température (à propos, l'amitié est forte et fiable).
  2. Ils étaient suffisamment fiables et n'ont pas changé leurs caractéristiques pendant la durée de vie (je l'ai défini comme 10 ans)
  3. Ils étaient disponibles sur notre marché, afin de ne pas gâcher les commandes du Mauser, etc.

À la suite de toutes les recherches, nous obtenons cet ensemble:

  1. Capteur PIR - D203S
  2. Capteur de lumière - GL5516
  3. Capteur de température - LM95071
  4. Capteur de CO - TGS5141

Et si avec les trois premières positions, je pense que personne n'aura de questions, alors pourquoi le TGS5141 est-il nécessaire tout de suite n'est pas clair. Vous dites probablement - "pourquoi une chose si chère, parce qu'il y a des capteurs de CO de centimes de l'ensemble Arduino de type MQ-7." En effet, je les ai expérimentés et, par conséquent, je les ai refusés pour plusieurs raisons. Premièrement, il s'agit d'un capteur catalytique, et il chauffe, ce qui affecte considérablement la température dans le boîtier de l'appareil et ne permet pas de compensation de température pour le signal du capteur PIR. Deuxièmement, la sensibilité du MQ-7 laisse beaucoup à désirer, même dans la spécification de 10 à 1000 ppm, mais en réalité, c'est encore plus triste, et il n'y a pas de stabilité de capteur à capteur. Troisièmement, la durée de vie du capteur lui-même n'est pas claire, je suppose que ses caractéristiques changeront considérablement au fil des ans précisément parce qu'il est catalytique. Et maintenant, sur les avantages de l'électrochimique TGS5141 - il ne chauffe pas, la sensibilité est de 0 à 5000 ppm (avec une caractéristique linéaire), une durée de vie garantie de 10 ans, une petite taille et bien d'autres avantages. Je pense que le choix est évident si vous voulez vraiment faire une chose valable, et non un métier frivole.

Nous avons choisi un microcontrôleur, des capteurs, il est maintenant temps de savoir comment dire à l'utilisateur ce que nous voulions. Comme je l'ai écrit plus tôt, j'ai deux canaux de communication pour cela, rs-485 modbus et mqtt via WIFI. Ce qui permet d'utiliser mon sensororteg en tant qu'appareil individuel, et donc important, c'est l'indication de l'état, en quelque sorte, sur l'appareil lui-même, par exemple, les LED.

Après avoir décidé du concept, vous pouvez faire un peu attention au reste de la base de l'élément. 485th driver J'utilise ADM2587E, la puce inclut non seulement le driver lui-même, mais aussi l'isolement galvanique du transformateur selon RX, TX et DE, moins seulement dans le prix. Nous utiliserons ESP-07 pour la communication mqtt via WIFI, ici, je pense, aucun commentaire n'est nécessaire, car seul le paresseux n'a rien fait sur l'ESP8266. J'ai dû bricoler davantage avec l'affichage visuel, pour cela j'ai décidé d'utiliser des LED sk6812 RGBW. Comme il s'est avéré avec AVR, leur gestion n'est pas très simple, leur timing est assez difficile, j'ai donc dû ajouter certaines parties du code assembleur, qui n'était pas initialement prévu. Mais le résultat se justifiait, il s'est avéré informatif et magnifique, surtout si vous brillez avec ces LED au bout de l'anneau en plexiglas. Cette indication m'a été suggérée par un employé qui avait déjà mangé un chien à ce sujet (merci à Sasha).



Après avoir expérimenté un peu avec la luminosité, il est devenu clair qu'un niveau de luminosité n'est pas ma décision - il est difficile de voir le jour et très lumineux la nuit. Par conséquent, j'ai dû faire un changement dans la luminosité de la lueur de ces LED en fonction de l'éclairage de la pièce. Eh bien, c'est tout, vous avez compris l'indication, vous avez pensé, mais non, la chose la plus difficile pour moi a été d'inventer des motifs lumineux et des timings pour eux.

Je me suis arrêté à cette option:

  • bleu lent - inactif, communication via wifi uniquement (Modbus manquant)
  • bleu rapide - passage du mode inactif au mode alarme, communication via wifi uniquement (Modbus manquant)
  • vert lent - inactif (communication Modbus OK)
  • vert rapide - passage du mode inactif au mode alarme (communication Modbus OK)
  • rouge lent - mode alarme
  • rouge rapide - alarme de mouvement
  • jaune rapide - alarme de gaz



Nous avons compris l'indication, la section suivante est le pouvoir.

Comme je l'ai dit plus tôt, j'ai un 24V basse tension dans ma maison, donc la puissance des modules sera exactement cela. Pour l'avenir, je dirai qu'après avoir fabriqué la première planche, j'ai dû refaire beaucoup de nutrition. Ensuite, je suis devenu convaincu que vous devez lire attentivement les spécifications des convertisseurs abaisseurs, en particulier les endroits où les nuances de câblage sont décrites. Sur la base des résultats de la recherche, je me suis arrêté sur le convertisseur abaisseur MCP16311 et il s'est avéré très difficile, seulement après avoir fait exactement ce qui était écrit dans les spécifications - cela a fonctionné. Mais ce n'était pas le plus gros problème, car il s'est avéré plus tard, changer la luminosité des LED a provoqué une petite baisse de puissance, ce qui serait suffisant pour gâcher le signal du capteur D203S, il a été possible de surmonter ce problème avec des condensateurs supplémentaires dans le circuit de fonctionnement du capteur et dans le circuit convertisseur abaisseur. Après avoir tout débogué à l'aide de mqtt (via ESP8266), j'ai connecté rs-485 et là encore une panne m'attendait, à la sortie de l'opamp dans le canal du capteur D203S j'ai encore vu des ordures, et ces ordures correspondaient clairement à l'échange sur rs-485. En général, il s'est avéré pour surmonter cela avec un convertisseur LDO supplémentaire pour toute la partie analogique, puis le bonheur est venu.

Et si vous combinez tout ensemble, vous obtenez l'image suivante:



Et si tout cela est pris et soudé, cela ressemble à ceci:



Ils ont soudé le tableau, imprimé le boîtier, tout assemblé, accroché au plafond, les données sont entrées dans le système. Imaginons donc comment appliquer ces données dans un système domestique intelligent, en plus, bien sûr, de pouvoir envoyer des alarmes aux télégrammes. Je n'ai encore rien fait, sauf le premier point, mais j'ai lancé les scripts suivants:

  • inclusion de lumière dans les escaliers, si cette lumière n'est pas allumée, si du mouvement apparaît dans n'importe quelle pièce, plus il fait sombre maintenant, plus la nuit
  • ouverture automatique de l'obturateur du premier étage, s'ils sont fermés, si c'est déjà le matin et qu'un mouvement est détecté dans le salon pour la première fois en une journée
  • ouvrir les volets de ventilation si la concentration de CO dépasse n'importe quel niveau et les fermer si le niveau de CO a baissé (en fait dans une pièce avec une cheminée)
  • ouvrir les volets de ventilation si la température a dépassé une certaine limite et les fermer en conséquence sinon
  • arrêt automatique du volet du premier étage si les volets sont ouverts et si des détecteurs de mouvement ont fonctionné dans la rue la nuit et que la maison est surveillée.

Alors complément, nous rendrons la maison plus intelligente ...

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


All Articles