Bonjour,
Voici la problématique, je possède deux serres chauffées et pilotées électroniquement. Elles sont situées à une trentaine de mètres de mon domicile. je souhaitais pouvoir contrôler les températures en plusieurs endroits depuis un PC, une tablette ou un smartphone et ce, en temps réel.
J'ai opté pour la partie détection de température et transfert d'information pour les éléments suivants :
-
pour l'équipement matériel:
-
un arduino pro mini 3.3V 8mHz
-
un module RTC DS3231 pour la définition du temps
-
un module NRF24L01+ pour le transfert par radio à 2.4GHz
-
un adaptateur réducteur de tension 12v--> 3.3v pour le transducteur NRF24L01+
-
des capteurs ds18b20 cablés et étanches. Etant pour certains constamment immergés, je les ai renforcés avec un bout de gaine thermo-rétractable recouverte d'une couche de vernis pour extérieur.
-
une boîte de dérivation étanche de 11.5cm x 11.5cm bon marché et de taille adaptée aux plaquettes de CI.
-
une plaquette de circuit imprimé prégravée (aliexpress) présente des zones reliées pour 2, 3 et 4 connexions
-
une embase femelle jack
-
une alimentation réglable 3-12v avec jack (dispo chez conrad, amazon, etc.)
-
une diode type 1N4007 pour protéger le dispo car le risque d'inversion de polarité au niveau de l'alim est possible
-
une résistance 4.7kw (pour le pullup du ds18b20, ne pas oublier)
-
un condensateur de quelques dizaines de mF à placer impérativement sur l'alimentation du nrf24 car les appels en courant sont importants
au niveau soft :
-
Sur l'IDE arduino et soit son éditeur natif soit Sublime Text avec le plugin Deviot
-
pour les bibliothèques arduino :
#include <Time.h> // gestion temps
#include <TimeLib.h> // gestion temps
#include <Wire.h> // nécessaire pour gérer le module RTC DS3231
#include <SPI.h> // nécessaire pour gérer le module nrf24
#include <nRF24L01.h> // nécessaire pour piloter nrf24 (version TMRh20)
#include <RF24.h> // nécessaire pour piloter nrf24
#include <OneWire.h> // nécessaire pour gérer les capteurs ds18b20
#include <DallasTemperature.h> // nécessaire pour gérer les capteurs ds18b20
#include <LowPower.h> // nécessaire pour mettre en sommeil le MCU
#include <RTClibExtended.h> // nécessaire pour piloter le module RTC DSs3231
Le principe est le suivant : le MCU associé au transceiver NRF24 envoie les données fournies par les capteurs DS18b20 au récepteur. (ici toutes les 5 mn) Les cadences d'envoi sont assurées par le module RTC. Il n'y a pas de vérification de la bonne réception, les émetteurs fonctionnant à puissance max, il n'y a pas de problème de réception.
Le récepteur est donc réglé (ainsi que les bases de données) sur la cadence imposée par l'émetteur. L'expérience montre que cette hypothèse est bien vérifiée.
La réception est basée :
-
au niveau matériel sur :
-
un esp8266 (plusieurs types ont été utilisés sans différence de fonctionnement)
-
un NRF24L01+
-
un adaptateur réducteur de tension 12v--> 3.3v pour le transducteur NRF24L01+ j'ai aussi utilisé des dispos indépendants nécessitant un câblage moins simple et pratique;
-
une boîte de dérivation étanche de 11.5cm x 11.5cm
-
une plaquette de circuit imprimé prégravée (aliexpress)
-
une embase femelle jack
-
une alimentation réglable 3-12v avec jack
-
une diode type 1N4007 pour protéger le dispo car le risque d'inversion de polarité au niveau de l'alim est possible
-
un condensateur de quelques dizaines de mF à placer impérativement sur l'alimentation du nrf24 car les appels en courant sont importants
-au niveau soft :
-
Sur l'IDE arduino et soit son éditeur natif soit Sublime Text avec le plugin Deviot
-
pour les bibliothèques arduino :
#include <SPI.h> // nécessaire pour le module nrf24
#include <nRF24L01.h> // nécessaire pour piloter nrf24 (version TMRh20)
#include <RF24.h> // nécessaire pour piloter nrf24
#include <WiFi.h> // pour gérer la transmission WiFi
#include <ESP8266WiFi.h> // pour gérer le module esp8266
#include <WiFiUdp.h> // pour gérer la transmission des données vers la base influxdb
#include <ThingSpeak.h> // pour gérer la transmission vers le cloud de thingspeak
Concernant les stockages et visualisations des données, j'ai utilisé d'une part thingspeak (bien documenté fonctionne sans souci en s’appuyant sur les exemples donnés) C'est un site ou l'on peut stocker et visualiser gratuitement (en nombre limité) les données produites localement.
J'ai utilisé d'autre part un serveur local installé sur un rapsberry 3b+. j'ai opté pour un transfert de flux utilisant le protocole udp et une base de donnée influxdb. La visualisation est réalisée au moyen du visualisateur de graphe grafana interfaçable de manière simple avec udp/influxdb.
Les deux serres sont équipées des mêmes émetteurs. Elles envoient donc sur un seul récepteur situé dans la maison leurs données. Celles-ci sont vues soit au moyen de thingspeak soit au moyen du serveur local sur raspberry.
L'intérêt du premier cas est que l'on peut contrôler en temps réel le comportement des serres, n'importe où sur la planète si l'on possède une liaison sur le net. Son défaut est que l'on reste dépendant d'un fournisseur qui peut à tout instant changer de politique et imposer de payer l'hébergement (ou simplement fermer boutique). la seconde solution évite cet écueil mais ne permet pas d’accéder à ses données hors du réseau local, l'autre intérêt est une grande sécurisation : les données ne sortent pas de la maison. La combinaison des deux solutions est un bon compromis.
Voici une capture d'écran de ce que donne grafana avec toutes mes données, visualisable en bloc, l'une par une, deux par deux avec possibilité de moyenne glissante, de soustraction, entre autres, etc.
Merci au forum et aux tutoriels arduino, à la réactivité des membres actifs et à tous les sketches trouvés ici ou là sur la toile
Cordialement