Un arrosage automatique 5 à 6 points

Bonjour à toutes et à tous

Merci de votre aide

Je cherche un montage et un programme Arduino pour conduire 5 ou 6 petites pompes par avec relais indépendants , un arrosage automatique avec sonde d’humidité pour plusieurs pots de fleur .

Merci d’avance de vos suggestions

Cordialement Philippe

➜ il doit y avoir pas mal de post dans le forum qui parlent de cela. Commencez par fouiller ici

il y a aussi de nombreuses réalisations postées sur internet.

Bonjour. Avez vous les pompes ? Si non, il vaut peut être mieux avoir une pompe et 6 électrovannes. Cela dépend du débit souhaité.

Des programmes sont facilement trouvable avec sonde d’humidité. Il faut ensuite programmer un démarrage de la pompe si un seuil est franchi.

bonjour

merci pour les réponses

oui j’ai des petites pompe c’est pour arroser 5 petites serre ou pots de fleurs .

Je souhaiterais les commander via des relais avec une alimentation de 6 volts .

Sur ce site j’ai récupérer un programme mais pour une seule pompe .

https://projetsduino.com/3129/mesurer-lhumidite-du-sol-avec-arduino-et-un-hygrometre-fc-28/

Mais ce qui m’embête c’est de prendre 5 Arduino uno pour le montage .

et je sais pas modifier le programme pour 5 alimentations de pompes

Merci de vos suggestions

Cordialement Philippe

Ce serait totalement inutile.

Pour commencer une digression totalement personelle : je n'aime pas le format de la UNO et surtout ses connectiques Dupont peu fiables.
La même carte, avec le même microcontrôleur, existe dans un format diffèrent : la nano, elle a même deux entrées purement analogiques de plus.
La Uno pour le debogage passe, pour le définitif la nano est plus fiable à mon avis.

Chacun fait ses choix.

Pour ton « léger» soucis un seul microcontrôleur est suffisant.

Le conseil que je donne, tu en feras ce que tu veux, est de commencer par faire un programme pour une seule pompe.
Tu nous communiqueras ce programme que bien entendu, tu indenteras avant de le copier (dans l'IDE faire Ctrl T) et que tu placeras entre balises codes <CODE/> : icône dans la barre haute
image

Si tu as besoin d'aide pour ajouter une deuxième pompe tu recevras de l'aide.
Mais, c'est un conseil, fais déjà fonctionner une pompe.

Bonsoir,

A priori, pour commencer, ce n' est pas trés difficile je pense d’utiliser le code fournit sur le lien que tu as induqué.

Mais il faut réfléchir à une chose.

Si tu n’a que un seul Arduino et 5 (capteurs + relais) à 5 lieux différents et +/- éloignés, comment imagine tu l’interconnexion 1 Arduino vers 5 capteurs et 5 relais à 5 ou 6 endroits différents?

@matphil861

tout à fait d'accord, il y a suffisamment d'entrées/sorties (numériques autant qu'analogiques) pour réaliser les fonctions demandées.

c'est déjà le cas dans le code que tu fournis en lien, mais encore faut-il en comprendre le contenu.

... n'est pas si compliqué, ici tu as la définition d'une entrée :

#define solPin A0

il suffit d'en créer une autre avec «A1» par exemple... et refaire la même chose que dans le code d'origine afin de prendre en compte cette nouvelle entrée : c'est vrai, ça demande un peu de réflexion, mais c'est très formateur de «bidouiller» les codes des autres.

quand tu auras compris comment faire et exploiter les modifs, tu seras en mesure de créer une partie de ton propre code.

la seule chose qui (dans le code qui te sert de base) me chiffonne c'est que le sol présente une latence importante dans sa réaction à l'humidité :
comment peut-on réguler un arrosage, et donc maintenir une humidité (moyenne) constante avec un fonctionnement «tout ou rien» du système d'arrosage ?
il y a un moment où le sol est hyper sec et où on arrose, forcément trop longtemps, pour ensuite stopper l'apport d'eau et attendre la «sécheresse» pour à nouveau arroser... c'est genre «je gave» puis «je mets à la diète» !

m'enfin bon, apprends déjà à gérer plusieurs entrées/sorties, tu verras plus tard comment optimiser l'arrosage.

Tu remplacé une des Led pilotée par le programme par un des innombrables modules relais existants sur le marché et quï soient pilotables par une sortie digitale 5V.

Dans beaucoup de cultures potagères ou d’ornement, on recommande d’attendre que la couche supérieure du sol sèche avant d’arroser à nouveau assez abondamment. C’est ce qu’on appelle un arrosage profond et espacé. L’arrosage apporte alors assez d’eau pour humidifier le sol en profondeur et cette eau est progressivement utilisée par la plante pendant la période suivante.

L’idée de ce mode d’arrosage c’est de favoriser le développement de racines plus profondes. Lorsque l’eau pénètre profondément dans le sol, les racines se développent vers le bas pour l’atteindre. À l’inverse, des arrosages très fréquents et superficiels qui maintiennent l’humidité surtout en surface et encouragent des racines peu profondes. Ça rend souvent les plantes plus sensibles aux épisodes de sécheresse et permet donc d’ augmenter la tolérance au manque d’eau.

Cela dit - ce n’est pas vrai tout le temps: certaines plantes demandent une humidité plus constante, notamment les semis, bien sûr les plantes aquatiques ou celles dont le système racinaire reste naturellement très superficiel et bien sûr le sol ne doit pas rester saturé d’eau trop longtemps car les racines ont besoin d’oxygène pour respirer et un sol constamment détrempé peut provoquer leur asphyxie ou des maladies racinaires.

Faut trouver le juste milieu et ça dépend du sol et des plantes. Certains détecteurs d’humidité ont une sortie analogique ou une valeur numérique (I2C) - dans ce cas votre code peut être paramétrique et ceux qui sont en tout ou rien on un potard pour régler un seuil de sécheresse de la couche superficielle du sol…

Bonjour à tous et à toutes

Merci de votre aide

Voila ce que j'ai essayé de programmer

il y a sûrement des erreurs

#define solPin A0      //Broche analogique A0 capteur d'humidité du sol doit être connecté
#define solPin A1      //Broche analogique A0 capteur d'humidité du sol doit être connecté
#define solPin A2      //Broche analogique A0 capteur d'humidité du sol doit être connecté
#define solPin A3      //Broche analogique A0 capteur d'humidité du sol doit être connecté
#define solPin A4      //Broche analogique A0 capteur d'humidité du sol doit être connecté
#define solPin A5      //Broche analogique A0 capteur d'humidité du sol doit être connecté

#define relais 1 //Définit la broche numérique 1 pour le relais actionné .
#define relais 2 //Définit la broche numérique 2 pour le relais actionné .
#define relais 3 //Définit la broche numérique 3 pour le relais actionné .
#define relais 4 //Définit la broche numérique 4 pour le relais actionné .
#define relais 5 //Définit la broche numérique 5 pour le relais actionné .

//Déclare la variable entière humminsol (pour humidité minimum sol ou seuil) et l'initialise à 300.
//Cette valeur représente le seuil au-dessous duquel le sol est considéré comme trop sec.
int humminsol = 300;
//Déclare la variable entière sol qui sera utilisée pour stocker la lecture de la valeur analogique du capteur d'humidité du sol.
int sol;


void setup() {
  Serial.begin(9600);
  //Configure la broche de le relais (1 2 3 4 5) comme une sortie (OUTPUT).
  pinMode(relais , OUTPUT);
  //Configure la broche de le relais (1 2 3 4 5) comme une sortie (OUTPUT).
  pinMode(relais , OUTPUT);
}
void loop() {
  sol = analogRead(solPin);  //Lit la valeur du capteur d'humidité connecté à la broche A0
  Serial.print("sol = ");
  Serial.println(sol);
  //Si la valeur lue du sol (sol) est supérieure au seuil de 300 (humminsol)
  if (sol > humminsol) {
    digitalWrite(relais, HIGH);  //Le relais est actionné
    digitalWrite(relais, LOW);   //Le relais est éteinte
  }
  //Si la valeur lue du sol (sol) est inférieure au seuil de 300 (humminsol).
  if (sol < humminsol) {
    digitalWrite(relais, HIGH);  //1 pour le relais actionné
    digitalWrite(relais, LOW);   //La LED verte est éteinte
  }
  //Introduit un délai de 5000 millisecondes (5 secondes) avant la prochaine lecture
  delay(5000);
}
je n'ai pas encore essayé encore le montage j'attends vos suggestions .
merci d'avance 
cordialement Philippe  

euh

concrètement vous attendez quoi de ces define ???

chaque pot de fleur à sa sonde et avec un arrosage indépendant

en actionnant des relais je peux commander des pompes ou des électrovannes

mais je ne connais pas grand choses dans la programmation Arduino

je suis pas cador de la spécialité

merci de votre aide cordialement

ça se voit :

tu attribues plusieurs valeurs (1 à 5, par exemple) à la même étiquette (relais) ce qui fait que ton «mot-clé» relais «vaudra» 5 (la dernière valeur y attribuée)

il aurait mieux valu faire par exemple

#define relaisA 1 
#define relaisB 2 
#define relaisC 3 
«etc»

ainsi chaque «relais» aurait eu sa propre broche de commande (idem pour chaque «solPin»)
mais comme je n'ai pas lu le reste de ton code je n'ai peut-être pas compris où tu veux en venir ... mais ça me paraît clair :
...

...

Au-delà de la remarque faite ci-dessus concernant la syntaxe, il y a aussi le problème que la broche digital 1 est utilisée (tout comme la 0) pour la communication et le téléchargement. Donc, il est préférable de ne pas les utiliser dans ton code.

@matphil861 #define est destiné au compilateur.
Cela fait partie des directives que l'on met en début de fichier.
Quand le compilateur trouve dans le code la ligne :

#define solPin A0

le compilateur remplacera dans le code toutes les occurrences «solPin» par A0.

#define solPin A0    
...................     
#define solPin A5     

solPin prendra successivement la valeur A0 puis A1,......,A4, A5.
Le compilateur ne retiendra que la dernière valeur.
Ce n'est pas ce que tu voulais faire, d'où les conseils qui t'ont déjà été donnés.

Le langage pour programmer avec l'IDE Arduino c'est du C et du C++.
Il existe de nombreux tutos sur le C et C++ destinés aux débutants, je pense que tu y apprendras beaucoup plus que dans de la documentation Arduino.

Un exemple avec des tableaux (loin d’être parfait il faudrait rajouter des sécurités, une hysterese, et éventuellement regrouper le capteur et son relai dans une structure ou classe pour faire propre)

const uint8_t solPins[]    = {A0, A1, A2, A3, A4, A5};
const uint8_t relaisPins[] = {2, 3, 4, 5, 6, 7};
const byte numZones = sizeof solPins / sizeof *solPins;

int humminsol = 300;

void setup() {
  for (byte i = 0; i < numZones; i++) {
    pinMode(relaisPins[i], OUTPUT);
  }
}

void loop() {
  for (byte i = 0; i < numZones; i++) {
    int sol = analogRead(solPins[i]);

    if (sol < humminsol) {
      digitalWrite(relaisPins[i], HIGH);
    } else {
      digitalWrite(relaisPins[i], LOW);
    }
  }
  delay(5000);
}

Vu que le demadeur débute, voir l’utilisation de define, il y a des conseils plus urgents que de conseiller de faire ”propre” avec un classe.

C’est pour ça que je ne l’ai pas proposé dans le code et que j’ai mentionné d’autres points.