Besoin d'aide pour pilotage de pompe via sonde

Bonjour à toute la communauté française !!!

Je suis en train de bricoler un petit circuit d'arrosage de pompes commandé par une Arduino UNO.

J'ai plusieurs questions d'ordre pratique et de code :wink: :

1/ Je souhaite mettre plusieurs sonde hydrométrique sur ma carte, mais j'ai un souci, comment on fait pour alimenter 4-8 sondes alors qu'il y a qu'une sortie 5 V + 2 sortie GND ????

2/ J'ai commencé à écrire mon code, mais je n'arrive pas à mettre deux délais différent dans mon programme à savoir 1 fréquence de mesure hydrométrique (1x / h) et 1 durée d'arrosage....

Comment on peut programmer plusieurs durée ?

=> Mon code :

int PinAnalogiqueHumidite0 = 0;     //Broche Analogique AO de mesure d'humidite
int PinAnalogiqueHumidite1 = 1;     //Broche Analogique A1 de mesure d'humidite
int PinAnalogiqueHumidite2 = 2;     //Broche Analogique A1 de mesure d'humidite
int PinAnalogiqueHumidite3 = 3;     //Broche Analogique A1 de mesure d'humidite
int PinDigitalRelais = 2;          //Broche Digatale D2 du relais de la pompe

int Sonde1;  //Humidite su sol, mesure analogique
int Sonde2;  //Humidite su sol, mesure analogique
int Sonde3;  //Humidite su sol, mesure analogique
int Sonde4;  //Humidite su sol, mesure analogique


void setup() {
  Serial.begin(9600);  //Connection serie à 9600 baud
  pinMode(PinAnalogiqueHumidite0, INPUT);       //pin A0 en entre©e analogique
  pinMode(PinAnalogiqueHumidite1, INPUT);       //pin A1 en entre©e analogique
  pinMode(PinAnalogiqueHumidite2, INPUT);       //pin A2 en entre©e analogique
  pinMode(PinAnalogiqueHumidite3, INPUT);       //pin A3 en entre©e analogique
  pinMode(1, INPUT);
  pinMode(2, INPUT);
  pinMode(6, OUTPUT);
}

void loop() {
  Sonde1 = analogRead(PinAnalogiqueHumidite0);
  Sonde2 = analogRead(PinAnalogiqueHumidite1);
  Sonde3 = analogRead(PinAnalogiqueHumidite2);
  Sonde4 = analogRead(PinAnalogiqueHumidite3);
  Serial.print("Sonde 1 = ");
  Serial.println(Sonde1);
  Serial.print("Sonde 2 = ");
  Serial.println(Sonde2);
  Serial.print("Sonde 3 = ");
  Serial.println(Sonde3);
  Serial.print("Sonde 4 = ");
  Serial.println(Sonde4);
  delay(3600000); //delai entre 2 mesures 3600000ms = 60 min

 
if (analogRead(Sonde1) >= 380)
  {
    digitalWrite(6, LOW);   // Pompe eteinte
     }

else if (analogRead(Sonde2) >= 380)
  {
digitalWrite(6, LOW);   // Pompe eteinte
  }

else if (analogRead(Sonde3) >= 380)
  {
digitalWrite(6, LOW);   // Pompe eteinte
  }
 
else if (analogRead(Sonde4) >= 380)
  {
digitalWrite(6, LOW);   // Pompe eteinte
  }
  
 else 
  {
    digitalWrite(6, HIGH);   // Pompe allumée
     delay(300000); //duré©e d'arrosage  300000ms = 5 min
  }

}

3/ Je pense avoir bien écrit mon code pour les test "if" / "else", mon objectif est que la pompe se lance pendant 5 min si les 4 sondes hydrométrique me renvoie une valeur inférieure à 380 (ce qui correspond à un substrat sec..... Une âme charitable pour me dire si c'est bon ?

4/ Juste une question, Est-ce que les puces Arduino sont capables de générer un fichier "Plot" où il consignerait l'ensemble des arrosages déclenchés avec horodatage ?

Je vous remercie tout de votre attention et aide !

Salut,
et bien voilà un projet intéressant, c'est pour tes études comme je le pense ou pour ton jardin ? :slight_smile:

Je reprend tes questions une par une avec les éléments que tu as fourni mais cela reste générique. Il faudrait que tu nous en dises plus sur les références de tes sondes, sur la pompe ...etc... Une petite idée du schéma électronique permettrait de mieux comprendre ton projet. Idem pour le code que veux tu réaliser ?

1/ Il faut absolument connaître les caractéristiques de tes sondes. Les capacités d’alimentation de la carte Arduino sont limitées. Une alimentation extérieure sera nécessaire aussi pour la pompe. Sinon sur une sortie on peux dériver plusieurs fils encore faut-il faire attention à la consommation.

2/ Qu'est ce que tu veut dire par là?

Comment on peut programmer plusieurs durée ?

La fonction delay() arrête le code Arduino durant le temps défini, rien d'autre n'est exécuté. Une méthode non bloquante de travailler avec plusieurs capteurs est d'utiliser la fonction millis() décrite dans l'exemple "blink without delay" si tu n'est pas à l'aise avec l'anglais il y a le blog d'Eskimon

3/ Pour te dire "si c'est bon" il faut en savoir plus sur ce que te tu veux faire. Là si je ne me trompe ton code va allumer la pompe seulement si les quatre sondes sont < 380. C'est bon ?

4/ On peut faire plein de choses de ce genre avec l'Arduino : Enregistrement sur carte SD d'un fichier, Sortie au fil de l'eau sur un port Série, Écriture en base de donnée. Voilà donc la réponse est Oui ! :slight_smile: Mais ici aussi il faut en savoir plus.

Merci pour ta réponse !

Il s'agit d'un projet pour mon balcon, trop de pots et trop souvent absent de l'appartement pour avoir la meilleure végétation possible :wink:

Je vais essayer de répondre à tes questions :

1/ La sonde : Capteur d'humidité (http://seeedstudio.com/wiki/Grove_-_Moisture_Sensor), c'est une sortie Grove mais je vais la monter en direct Arduino.

Le relais : MODULE RELAIS - GROVE (Module Relais - Grove - Boutique Semageek), même topo que la sonde, montagne en direct arduino.

La pompe : Une petite Eheim Compact 300 (Puissance 5W - 220 v) qui sera branché en direct courant et plonger dans un petit bac récupérateur. (Aprés si ca marche bien, je changerais la pompe pour mettre une plus grosse)

2/ En gros, j'aimerais que la puce lance une lecture toute les heures. En fonction de ce résultat (le fameux quadruple if else) le relais lance la pompe pendant 5 min.

Donc si je comprends bien, je laisse delay(3600000); pour les sondes et je mets une fonction millis() pour la pompe, ce qui me donnerait le code suivant (enfin, si j'ai compris la fonction millis() ):

int PinAnalogiqueHumidite0 = 0;     //Broche Analogique AO de mesure d'humidite
int PinAnalogiqueHumidite1 = 1;     //Broche Analogique A1 de mesure d'humidite
int PinAnalogiqueHumidite2 = 2;     //Broche Analogique A1 de mesure d'humidite
int PinAnalogiqueHumidite3 = 3;     //Broche Analogique A1 de mesure d'humidite
int PinDigitalRelais = 2;          //Broche Digatale D2 du relais de la pompe

int Sonde1;  //Humidite su sol, mesure analogique
int Sonde2;  //Humidite su sol, mesure analogique
int Sonde3;  //Humidite su sol, mesure analogique
int Sonde4;  //Humidite su sol, mesure analogique


void setup() {
  Serial.begin(9600);  //Connection serie à 9600 baud
  pinMode(PinAnalogiqueHumidite0, INPUT);       //pin A0 en entre©e analogique
  pinMode(PinAnalogiqueHumidite1, INPUT);       //pin A1 en entre©e analogique
  pinMode(PinAnalogiqueHumidite2, INPUT);       //pin A2 en entre©e analogique
  pinMode(PinAnalogiqueHumidite3, INPUT);       //pin A3 en entre©e analogique
  pinMode(1, INPUT);
  pinMode(2, INPUT);
  pinMode(6, OUTPUT);
}

void loop() {
  Sonde1 = analogRead(PinAnalogiqueHumidite0);
  Sonde2 = analogRead(PinAnalogiqueHumidite1);
  Sonde3 = analogRead(PinAnalogiqueHumidite2);
  Sonde4 = analogRead(PinAnalogiqueHumidite3);
  Serial.print("Sonde 1 = ");
  Serial.println(Sonde1);
  Serial.print("Sonde 2 = ");
  Serial.println(Sonde2);
  Serial.print("Sonde 3 = ");
  Serial.println(Sonde3);
  Serial.print("Sonde 4 = ");
  Serial.println(Sonde4);
  delay(3600000); //delai entre 2 mesures 3600000ms = 60 min

 
if (analogRead(Sonde1) >= 380)
  {
    digitalWrite(6, LOW);   // Pompe eteinte
     }

else if (analogRead(Sonde2) >= 380)
  {
digitalWrite(6, LOW);   // Pompe eteinte
  }

else if (analogRead(Sonde3) >= 380)
  {
digitalWrite(6, LOW);   // Pompe eteinte
  }
 
else if (analogRead(Sonde4) >= 380)
  {
digitalWrite(6, LOW);   // Pompe eteinte
  }
  
else 
  {
    if(millis >= 300000)
    digitalWrite(6, HIGH);   // Pompe allumée
  }
}

3/ Bonne réponse, la pompe va alimenter les 4 pots en série, donc il faut que les 4 pots me disent "J'ai soif !"

4/ J'adore les limites de l'informatique qui n'est que l'imagination humaine. Mon but, ça serait d'avoir un journal de bord pour visualiser combien de temps j'ai arrosé en fonction des conditions climatiques (T°C par exemple....)

Haaa enfin un vrai projet !!! Bon hé bien il y a du travail en perspective car c'est une chose de monter une maquette mais s'en est une autre de faire fonctionner un système en 'production' 24x24 :slight_smile: Je ne vais sûrement pas suffire à la tache pour t'aider étant moi même pas mal débutant mais je peux commencer à "débroussailler" qq points :slight_smile:

1/ Il y déjà qq chose qui m’inquiète avec ton schéma c'est la consommation électrique. L’Arduino n'est pas taillé pour piloter un relais en direct. Les capteurs sont marqué 35mA en consommation et un pin Arduino est donnée pour 20 mA donc la aussi souci. Tu dis vouloir te passer de la carte Groove d'interface. Pourquoi ? Je ne connais pas cette carte mais il est possible qu'elle gère ce problème en ajoutant des transistors. Elle pourrait aussi régler le problème de connexion en cablage "propre". Il n'y a pas de description vraiment technique sur les sites que j'ai trouvé.

2/ Dans ce cas tu peut très bien utiliser delay() car tu ne compte pas arrêter la pompe avant les 5mn et à part pomper le script n'a rien d'autre à faire. Il suffit d'ajouter un autre délai puis d’arrêter la pompe.

else
  {
    digitalWrite(6, HIGH);   // Pompe allumée
    delay(300000)
    digitalWrite(6, LOW);   // Pompe éteinte
  }

Presque du gâchis d'utiliser un Arduino pour que cela mais je suis sûr que tu lui trouveras une autre utilitée plus tard. L'imagination est la seule limite :slight_smile: PS: Tu n'as pas tout compris de la fonction millis() essaie encore :slight_smile:

4/ Justement il faut quand même te décider pour quelque chose. La carte SD présente l'avantage de rester sur l'Arduino pour être relevée ensuite pas besoin de connexion avec un système extérieur. Le port Série ne demande pas de shield supplémentaires mais la dispo d'un PC en permanence ::slight_smile: L'accès Wifi avec enregistrement dans un serveur ajoute un coté high tech certain à ton projet :sunglasses:

Hello !

Je ne suis pas du genre à faire des projets de style aérien :wink:

1/ Pour le pilotage du relais, je me suis basé sur un tutoriel qui visiblement arriver à mettre un relais Groove sur un circuit 220 v (http://nagashur.com/blog/2013/03/27/utilisation-dun-relais-grove-sur-un-arduino-commandons-un-appareil-220v-depuis-notre-arduino/)

L'arduino Uno, je chope 50 mA sur la sortie 3,5 V, aprés faut voir si des pros passe dans le coin !

Pourquoi ne pas mettre de groove base shield, à cause de l'encombrement, mais si ca passe mieux pour les branchements, autant que je les prennes :wink:

2/ J'avais fait cette configuration mais quand je faisais la vision moniteur, ca me prenait en compte que le delay à 60 min.... A moins que c'est une erreur de frappe de ma part.

(En passant, tu as oublié le ";" à la fin de la ligne delay)

4/ L'ajout du lecteur de carte SD ne modifiera pas fondamentalement la structure du code et du montage.

Bonsoir,

Désolé pour l'erreur j'ai pas compiler pour vérifier :slight_smile:

Je pense qu'il faut travailler le coté alimentation. Dans le tuto en question ils sont un peu léger sur la description du câblage. Je ne suis pas arrivé a lire les caractéristiques du relais grove. Il faut savoir combien il consomme sur le 5V de l'Arduino et ajouter les 4 capteurs au max pour savoir si on tiens avec les caractéristiques du régulateur de l'Arduino. Il te faudra une alimentation extérieure pour la pompe de toute façon.

4/ C'est une question ou un choix ? :slight_smile:

Salut!
Je viens de lire vos échanges !

L'installation d'une carte SD est une bonne idée !

Pour la gestion du temps d'enregistrement des données et des actions de lectures synchronisé je recommande un module RTC "Real Time Coordonate".
Grâce a cela tu pourra programmé l'heure précise du relevé de tes donnée et piloté des actions à des temps bien plus précis ou enregistré l'heure des donnée sur événements -savoir a quelle moment une demande d'arrosage a été lancé et combien de temps a t'elle duré par exemple -. (sans dérive de temps).
https://www.elecrow.com/wiki/index.php?title=Tiny_RTC

Pour le pilotage des relais et de la pompe je rejoins landid.
Il vaux mieux interfacer pour ne pas griller ta carte par une sur consommation sur les broches.
pour la pompe une alim extérieur est incontournable.

Comment sont disposé tes pots et à quelle distances de la pompe ?

A plus.

Hello à vous deux !

1/ Quand vous dites interfacer les sondes et le relais, vous pensez à quoi exactement ? Branchement sur une base shield via les raccords Groove sans faire de bricolage ?

2/ Oui, la pompe a une alimentation externe directement sur une prise 220 v, je n'avais pas l'ambition d'alimenter la pompe avec la carte arduino :wink:

3/ Les pots sont côte à côte en rangs d'oignon et le montage arduino sera à 2-3 m maxi des pots....

Bonne idée pour le module RTC.... Mais le hic, c'est que je n'aurais jamais assez de port analogique pour brancher tout les modules :

  • Sondes x4 => 4 sorties analogiques,
  • Modules RTC x 1 => 2 Sorties analogiques

Alors que le base shield ne comprends que 4 sorties analogiques !

De plus, le lecteur de carte SD n'existe pas en groove ;-(

Je pense faire le montage de base pour être sur que tout marche et je ferais les additifs par la suite si j'ai le courage...

Salut!

L Arduino est équipé de 6 sorties Analogique. de A0 à A5.

Le shield n'exploite pas les broches 4 et 5 surement pour la libre exploitation en communications I2c.

Pourrais tu m'envoyer les référence de ton shield ? Tu devrais avoir un schéma de ton shield. Si non si tu observe ton montage il ne devrais pas y avoir de broches en A4 et A5.

Pour le shield de la carte SD j'ai utilisé celui ci.

Ce shield n'utilise pas les broches de l' I2C donc pas de souci pour la tans des donnée vers la carte SD.

Avis perso. Les module groove c'est cool !! mais pas très pratique pour la conception cela implique un shield qui verrouille parfois la mise en place d’éléments supplémentaire. Plutot partir sur des éléments standard et facilement brochable par filerie.

A plus!

Plop.

Autant pour moi, j'avais cru voir le relais ou le lecteur de carte en Analogique....

Le groove base shield est le suivant :

http://wiki.seeedstudio.com/wiki/Grove_-_Base_Shield_v1.2

Je suis d'accord avec toi, les modules groove ne sont pas terrible en modularité mais l'avantage est qu'au niveau alimentation électrique, tu n'es pas emmerdé à faire des branchements en série sur le GND ou le 5v de la carte...

Cependant, les sites français que j'ai regardé, trés peu propose tout ce que je veux en broche 2,5mm.

Ps : Par interfacage (pour relais et capteur) tu parlais bien de partir avec un base shield ?

Re ps : Afin de compenser la distance entre les sondes et la carte ARDUINO, je prévois de mettre des fils en rallonge. Ça se vend à part les broches groove ou il faut les démonter sur un câble existant ?
D'autre part, mon fournisseur me propose des bobines de fil souple 22AWG, bien ou pas ?

Salut,

Je te rejoins sur le grove pour la simplification du cablage. Pour le relais le module embarque aussi une diode de roue libre et un transistor ce qui ajoute a l'intégration. Mon inquiétude viens du fait que je n'ai pas trouvé le doc technique pour le relais ni pour le shield. Et donc pas de réponse sur la possibilité d'utiliser une alimentation différente du régulateur 5V embarqué sur la carte Arduino.

Plus en détail : Sur le 5V le régulateur et la carte Arduino peut délivrer 40mA par broche sans dépasser un total de 200mA pour l'ensemble. Axiome le plus répandu sur ce forum :slight_smile: Tes sondes consomment 35mA selon la doc donc tu peux utiliser le Grove shield pour les sondes. Ce qui nous fait 140 mA . Reste le relais ?? de toute façon il ne devra pas prendre plus de 40mA sur les 60mA restant. On parle maintenant de carte SD de module RTC ...etc..

Pourrais tu préciser ce que tu veux dire par ?

Cependant, les sites français que j'ai regardé, trés peu propose tout ce que je veux en broche 2,5mm.

Pour les sondes vu les caractéristiques décrites sur le site tu pourras faire des tests pour ajuster la valeur "sol sec". Le cable 22AWC devrait faire l'affaire maintenant comment va tu le "souder" sur la carte Grove shield ?

Salut.

Je pense que je vais faire le test avec une base shield avec le montage basique.
Une fois que çà marche, j'irais plus loin dans le projet....

Cependant, les sites français que j'ai regardé, trés peu propose tout ce que je veux en broche 2,5mm.

Par rapport à ma remarque, je rebondissais sur la remarque de Manumanu qui me proposait de prendre des éléments standard et facilement brochable par filerie.....

Du coup, si je cherche une sonde hydrométrique ou un relais standard, j'ai plus de mal à les trouver....

Pour les sondes vu les caractéristiques décrites sur le site tu pourras faire des tests pour ajuster la valeur "sol sec". Le cable 22AWC devrait faire l'affaire maintenant comment va tu le "souder" sur la carte Grove shield ?

Je pensais démonter des clips grove d'un petit câble pour les mettres sur les grands, mais je voulais avoir confirmation :slight_smile:

Salut;
T'emballe pas Nicolas_R !

Pour le moment réfléchis à la mise en place de ton matériels.

landid a raison sur la gestion des puissance de ton montage elle est primordial.

Je pense qu'il faut que tu temporise.

Il faut reprendre depuis le shield. Comment il est fait et qu'est ce qu'il fait. Car c'est par lui que tout passe.

A première vu le shield est alimenté via l'Arduino car il n'y a pas de d'alimentation extérieur possible. Donc toute la puissance des composants est délivré par l'Arduino.

landil tu dit que les capteurs d'humidité consomme 35mA. Mais d’après le liens c'est leurs maximum.
Il faudrait que Nicolas face des tests et mesures en condition sec et fortement humide.
.
Je ne connais pas l'intensité admissible d'une sortie analogique mais comme s'est une sortie la résistance à ces borne modifiera la tension en conséquence. Tout comme le fait un potentiomètre. De toute façon la sortie ana évalue la tension et pas l'intensité à ses bornes donc je confirme tu peut y aller !!

Attention il y a cette note d'utilisation avec la doc du capteur
Ce capteur n'est pas durci contre la contamination ou l'exposition du circuit de commande à l'eau et peut être sujet à la corrosion électrolytique à travers les sondes, il n'est pas bien adapté pour être laissé en place ou utilisé à l'extérieur.
Il faudra donc veillé a ne pas noyer les connections => ce qui implique un arrosage intermittent j'usqu'a arriver au seuil d'humidité voulu car la terre ou terreau n'absorbe pas immédiatement l'eau si elle est sèche.

J'ai un peu fouillé juste au cas ou et j'ai trouvé cela.

Je suis même sur qu'il est possible de remplacer le capteur par deux simple clou.

Monte déjà un proto de ton projet avec ce que tu as et tu verra bien pour la suite!!
Etapes par étapes. Mes de coté le SD.
Concentre toi sur la fonction première => mesuré + détecter = arroser.

A plus.

Ne jamais tirer sur les comêtes :wink:

J'y ai réfléchis à cette histoire de puissance fourni par l'arduino pour les sondes....
Mais la notion de consommation en mA ne s'applique uniquement si les 4 sondes fonctionnent de manière continue et en même temps.
Je pense qu'on pourrait inclure une temporisation entre chaque mesure des sondes de manière à lisser les pics de consommation des sondes.

Mais si cela marche sans mettre de temporisation, tant mieux :wink:

Concernant la résistance dans le temps des sondes, j'ai cru voir quelque part qu'on pouvait envelopper dans du papier d'alu ou de mettre de la peinture alu dessus.... Je ferais le test pour voir la perte de précisions....

@manumanu, j'ai déjà vu cette sonde, mais la présence de la carte secondaire n'est pas idéale dans le contexte de mon projet car cela implique de mettre des protections supplémentaire entre chaque pot !!!

La dernière question que je me pose, c'est comment on fait pour trouver les embouts blancs d'extrémité des câbles grove pour les sertir sur mes câbles de la bonne longueur ????
Faut t'il prendre des Bornier a vis - Grove pour faire un montage comme çà :

Sonde => Câble grove 5 cm => Bornier à vis => Câble22AWC => Bornier à vis => Cable grove 5 cm => Base shield => Carte arduino ?

Du coup, place à la commande et je vous tiendrais informé de l'avancement :wink: