gestion de serre automatique

bonjour à tous ma petite femme m a demander de lui faire un automate pour sa serre, gerer l humidité de l air, l humidité de la terre, la temperature et l ensoleillement

pour la partie programme je devrait arriver a gerer, la question est plustot choix et cablage de sonde, pour savoir si il y a des truc specifique à savoir

j'ai pris ça pour l humidité de l air:
https://www.amazon.fr/gp/product/B00K67XRFC/ref=ox_sc_act_title_2?smid=A368I6KXHKTBPA&psc=1

ça pour l humidité de la terre:
https://www.amazon.fr/gp/product/B075DFYC2W/ref=ox_sc_act_title_3?smid=A3OREX2CY7D0RU&psc=1

et j ai des sondes de temperature type DS18B20

l'idée c est un arduino mega, une carte de relais, un ecran

Donc DHT-11 pour l'humidité de l'air --> vous comptez installer un vaporisateur/Brumisateur ou un ventilo/chauffage sinon à quoi ça sert de savoir que l'air est trop ou pas assez sec ?

au passage le DHT11 n'est pas au top, pour le même prix on a le DHT22 qui donne de l'info moins souvent mais qui est plus précis et offre une plage plus large. Si pour la plage de T° ce n'est pas trop ennuyeux, sa précision à 2° n'est quand même pas top.. et pour l'humidité c'est aussi un peu limité

DHT-11
20-80% avec 5% précision
0-50°C temperature avec précision de ± 2°C
1 échantillon par seconde

DHT-22
0-100% humidité avec 2-5% accuracy
-40°C à 80°C temperature avec précision de ± 0.5°C
1 échantillon toutes les 2 secondes

Vos "Module Capteur De Détection d'Humidité" vont s'oxyder rapidement, donc prévoir d'en acheter un lot de 20 en chine et la lecture va dériver dans le temps... pas simple donc à maintenir une info correct

Les sondes DS18B20 compenseront sans souci la faible précision du DHT11 en température.
Pour l'hygrométrie 5% de précision c'est très suffisant pour un jardin amateur.

Il faut prévoir un petit écran LCD pour afficher tout ça, une alim, une mesure de lumière.

Au sujet de l'oxydation, il est possible d'alimenter le capteur seul en alternant la polarité, une mesure dans un sens, une mesure dans l'autre sens.
Par contre le module comparateur est à laisser de côté.
Il faut mettre une résistance en série avec le capteur et l'alimenter par 2 sorties de l'ARDUINO. Le point milieu est relié à une entrée analogique.

ICI un topic sur le forum MYSENSORS où j'ai donné quelques réponses sur le sujet.

@+

oui j ai prevu ventilo brumisateur capteur de luminosité et ecran

j attend de tout recevoir pour attaquer et concevoir un truc simple a ba de relais pour piloter des prises en 220v

hbachetti:
Au sujet de l'oxydation, il est possible d'alimenter le capteur seul en alternant la polarité, une mesure dans un sens, une mesure dans l'autre sens.
Par contre le module comparateur est à laisser de côté.
Il faut mettre une résistance en série avec le capteur et l'alimenter par 2 sorties de l'ARDUINO. Le point milieu est relié à une entrée analogique.

ICI un topic sur le forum MYSENSORS où j'ai donné quelques réponses sur le sujet.

@+

salut j ai compris ton installation de la sonde par contre j ai pas compris au final quel est le bon code à appliquer sur la sonde pour faire cette alternance?

Dans la loop() la fonction measure() est a appeler deux fois :

measure(6, 7, 0);
measure(7, 6, 0);

Les pins 6 et 7 alimentent la sonde. La pin analogique 0 réalise la mesure.
Dans le cas présenté, la mesure est effectuée sur deux entrées analogiques :

measure(6, 7, 1);
measure(7, 6, 0);

Soit il y a deux sondes, soit c'est une erreur.

@+

bon le bac est fait et integrer dans la vitrine, la pompe a eau en 220 est en marche avec son systeme d irrigation

me reste plus qu a recevoir les differents capteur pour attaquer le programme

donc je vais faire une premiere boucle en loop pour:

regler l heure/date
regler l heure de debut de soleil
regler l heure de fin de soleil (le top aurait été de planifier ça sur des periode de date pour allonger ou raccourcir les temps)
regler le seuil de luminosité avant que la lampe prenne le relais dans la periode d ensoleillement
regler la temperature voulu
regler le temps de ventilation souhaité pour regul
regler l hydrometrie de l air voulu
regler le temps d'activation du brumisateur pour regul
regler l hydrometrie de la terre voulu
regler le temps d'arrosage pour regul

ensuite la boucle loop, fera des tests des sondes pour savoir ou elle se situe à intervalle espacé et faire une regul tranquille

on test chaque sonde toutes les 10mn/15mn environ? si 2 ou 3 tests donnent le meme resultat on confirme et on actionne?

je crois me souvenir qu il y a une limite de temps maximum d utilisation de l arduino?

comment pourrait on faire pour savoir a l avance cette limite, ou bien le faire rebooté tout seul, tout en conservant les parametres qu il avait en cours

vtec35:
je crois me souvenir qu il y a une limite de temps maximum d utilisation de l arduino?

Disons comme tout appareil électronique... sans doute vous avez quelques années devant vous s’il n’est pas plongé dans l’eau de votre système, ou soumis directement à du 220V... bref - non pas spécifiquement de limite

je parlais des variable ou chrono style date et heure a partir de l allumage de l arduino

Millis() retourne à zéro au bout d’une cinquantaine de jours mais ça ne pose aucun problème si vous codez proprement ( avec des soustractions, pas d’additions)- surtout si vous avez une RTC « correcte » (genre DS3231 ou DS3234)

codez proprement.....

je sais que vous aimez pas ma façon de faire

je ne ferais que des boucles a etat

Je ne pense pas que J-M-L ai voulu dire que ton code est dégueulasse, cela ne lui ressemble pas.
Mais c'est un pro qui aime le travail bien fait et qui voit des risques que nous ne voyons pas quand nous codons.

Je vais essayer d'expliquer avec un langage d'un non "pro".
Ce qui peut poser problème c'est le débordement : exemple dans un octet après 254 il y a 255 mais après 255 il y a 0.
(Je pense que) Ce que J-M-L te dit c'est que du fait des mécanismes de la soustraction binaire il n'y a pas de soucis quand on fait une soustraction, ce qui n'est pas le cas quand on fait une addition.

Du fait du type de variable que renvoi millis() (long integer) le "débordement" se fait tout les 56 jours environ donc tant que tu fais appel à millis() à une fréquence inférieure à ces 56 jours tout se passe bien.

ÉDIT: oui 68tjs effectivement

Je n’ai aucun jugement sur votre façon de faire, « coder proprement » n’est pas destiné à vous en particulier, c’était un vous générique. Je vous présente mes excuses si vous vous êtes senti visé, ce n’était pas du tout l’objectif

Un unsigned long représente au Max 4,294,967,295 (2^32 - 1). si c’est un nombre de millisecondes. si vous divisez par 1000 (ms) x 60 (minute) x 60 (Heure) x 24 (jour) ça fait 49 jours Et une fraction de jours (17h 2 minutes 47 secondes et 295 millisecondes)

Si vous avez

const unsigned long periodeAttente = 120000ul; // 2 minutes
unsigned long dernierChrono;

et que vous voulez tester dans votre machine à état si le moment est venu de déclencher une opération car la période d’attente est passée il ne faut pas faireif (millis() >= dernierChrono + periodeAttente) {...} car votre addition dans le second membre de la comparaison va revenir à zéro quand le dernier chrono sera proche des 50 jours fatidiques le fait d’ajouter periodeAttente va faire un overflow sur votre second membre et dernierChrono + periodeAttente retourne proche de 0 alors que millis() et proche des 50 jours donc forcément supérieur et vous déclenchez tout de suite donc sans attendre votre periodeAttente

La bonne façon de coder cela est d’effectuer une soustraction et faireif (millis() - dernierChrono >= periodeAttente) {...}dans ce cas tout va bien marcher, même si millis() a bouclé et est retourné vers 0 car la soustraction va rester en unsigned long et donc ça fonctionne

Voilà :slight_smile:

a non non je confirme je code pas proprement ^^

vtec35:
a non non je confirme je code pas proprement ^^

:slight_smile: :slight_smile: :slight_smile:

si vous voulez une base de code pour démarrer, éventuellement regardez ce que j'avais posté dans les "projets finis"

Contrôleur de T°, Humidité avec pilotage manuel ou automatique

merci je vais regarder

qq questions, est il fonctielle avec un ecran qui a les boutons intégré?

genre:Shield Afficheur LCD - compatible Arduino - SHIE1602A 3701046301560 | eBay

je viens de lire le detail, il manque juste qq notions pour parfaire la chose

differencier la gestion de l humidité de la terre de celle de l air (brumisateur et arrosage)
gerer l eclairage via un capteur de luminosité et une plage horaire
si l'on gere la notion de date, on dois pouvoir instaurer une notion de saison (durée d ensoleillement variable)

conçernant la gestion de l humidité du sol, avez vous pris en compte l histoire de la corosion, et l alternation de la polarité de la sonde?

comment gerer vous les rebonds d'information?

si l'information est pres du depasse le seuil, il y a declenchement, mais si elle fait du rebond, il y a t il un filtre?

merci de vos reponses

merci

Le code est plus pour un modèle / les idées - il faudra bien sûr adapter à vos besoins

Pour les boutons j’ai fait au plus simple pour ce code d’exemple donc j’utilise une librairie qui élimine les rebonds - vos boutons intégrés fonctionnnt différemment, faudra just intégrer leur fonctionnement pour qu’au lieu d’appeler la fonction tick() vous appeliez votre bout de code qui déclenche le bon call back

Comme je l’explique le code d’automatisation est ultra simpliste, ce qui compte c’est le fait qu’il existe cette fonction qui est appelée régulièrement et qui doit fournir l’intelligence. à vous de mettre ce que vous souhaitez dedans en fonction de vos capteurs et logique