IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

(projet arrosage) Question par rapport au programme de la pompe


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut (projet arrosage) Question par rapport au programme de la pompe
    Bonjour,

    J'ai un programme à effectué sur arduino pour un projet personnel qui consiste à arroser mes plantes car je suis à la retraite et cela m'aiderait beaucoup.

    J'ai un ami qui ma conseiller les équipements suivants: pompe 12v ,capteur d'humidité de sol ,carte arduino mega 2560 , alimentation et relais(interrupteur electronique) .

    J'ai donc plusieurs problèmes , lors de mon essais avec un programme que j'ai effectué , j'ai remarqué que ma pompe ne dépendais point du tout avec le programme arduino , il fonctionnait que avec le void setup et n'agit pas en fonction du void loop. Je pense que c'est du a mon montage (j'ai branche ma pompe sur le - de l'alimentation et sur le 2eme trous du relais)

    Mon second problème est que la pompe est trop puissante quand elle envoi de l'eau , j'ai donc réaliser ce programme avec des petites impulsions mais j'ai donc utiliser la fonction bool avec deux états. Le problème c'est que je ne sais pas si il manque des choses.(Le but c'est de pouvoir arroser quand c'est inférieur à 30 pourcent jusqu’à 45 pourcent mais à partir des 45 pourcent d’arrêter la pompe)

    Voici mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    int relay = 2;
    int capteur_Pin = A0;
    int valeur_de_humidite = 0;
     
    void setup(){
      // initialize digital pin 13 as an output.
      pinMode(2, OUTPUT); //relais
      Serial.begin(9600); //vitesse
    }
     
    void loop() {
    valeur_de_humidite = analogRead(capteur_Pin);
      delay(1000);
      Serial.print("Valeur mesuré par le capteur d'humidité = " );
      Serial.println(valeur_de_humidite);
     
      bool on_pompe = false;
     
      if (valeur_de_humidite < 307) {
                 on_pompe = true;
                 }
                 }
    else if (valeur_de_humidite > 460) {
                 on_pompe = false;
     
      if (on_pompe) {
          digitalWrite(2,HIGH);    // allumer
          delay(1000);
          digitalWrite(2,LOW);    // eteindre
          delay(1000);
          }
     
    }
    else if (on_pompe) {
       digitalWrite(2,LOW);    // eteindre
     
    }
    Merci pour votre attention

  2. #2
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 019
    Par défaut
    Bonjour Harry87

    Pour pouvoir mieux t'aider, il faudrait que tu indiques les références de ton relais et du capteur et, éventuellement, où tu as pris cet exemple.
    Fondamentalement, ton programme pouvait fonctionner, tu avais surtout un problème d'indentation et d'accolades.
    En conséquence, j'ai un peu "réaménagé" ton programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #define relay 2
    #define capteur_Pin A0
    int valeur_de_humidite = 0;
     
    void setup(){
    	// initialize digital pin 13 as an output.
    	pinMode(relay, OUTPUT); //relais
    	digitalWrite(relay, LOW);                             // Mettre le relais OFF
    	Serial.begin(9600); //vitesse
    }
     
    void loop() {
    	valeur_de_humidite = analogRead(capteur_Pin);
    	delay(1000);
    	Serial.print("Valeur mesuré par le capteur d'humidité = " );
    	Serial.print(valeur_de_humidite);
     
    	bool on_pompe = false;
     
    	if (valeur_de_humidite < 307) {
    		on_pompe = true;
    	}
    	else if (valeur_de_humidite > 460) {
    		on_pompe = false;
    	}
     
    	Serial.print(" Pompe ");
    	Serial.println(on_pompe ? "ON" : "OFF");	
     
    	if (on_pompe) {
    		digitalWrite(relay,HIGH);    // allumer
    		delay(1000);
    		digitalWrite(relay,LOW);    // eteindre
    		delay(1000);
    	}	
    	else {
    		digitalWrite(relay,LOW);    // eteindre
    	}
    }
    Je te laisses jouer au jeu des 7 différences .
    Une fois que cela fonctionne, chez toi, la prochaine étape sera de régler la durée d'impulsion et, pour cela, il te faudra un potentiomètre.

    A+
    Cordialement
    jpbbricole

  3. #3
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 933
    Par défaut
    Faudrait vraiment connaître le type de pompe, allumer et éteindre toutes les 1 seconde risque de mettre bcp de stress sur les composants

    Si le débit est trop important en sortie prévoir de limiter différemment par exemple en mettant une pomme d’arrosoir au bout du tuyau ou un filtre qui limitera l’entrée de l’eau dans le tuyau ou un tuyau de moindre diamètre (ou changer de pompe)

    @jpbricole pourquoi le delay(1000); juste après la lecture analogique ? Autant le mettre en fin de loop si on ne veut pas qu’elle tourne vite mais tel quel il va aussi influer sur le temps off de la pompe quand on pompe

  4. #4
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 019
    Par défaut
    Salut JayM
    Citation Envoyé par Jay M Voir le message
    @jpbricole pourquoi le delay(1000); juste après la lecture analogique...
    Parce que c'était dans le programme de @Harry87. Mon premier but était de "faire marcher" le programme ce genre de "détails", je les réservait pour plus tard.
    J'essaie, pour autant que ce faire se peut, de conserver le programme original pour autant qu'il soit fonctionnel, autrement je récrirais tout le programme à ma façon, ce n'est pas vraiment le but

    Cordialement
    jpbbricole

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 933
    Par défaut
    je pense que j'aurais quand même mis un commentaire à côté de cette ligne ou quitte à modifier le programme, carrément la virer

    mais bien compris, votre approche est chaque chose en son temps - pas de souci

  6. #6
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 661
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 661
    Par défaut
    Bonjour,

    Mon second problème est que la pompe est trop puissante quand elle envoi de l'eau , j'ai donc réaliser ce programme avec des petites impulsions mais j'ai donc utiliser la fonction bool avec deux états.
    La pompe fonctionne à courant continu ? Quelle intensité ?
    Sous 12V, et si la pompe le permet, je me demande s'il n'est pas possible de remplacer le relais par un pont en H que l'on utilise généralement pour piloter des moteurs pas à pas ou des moteurs à courant continu. L'idée est la suivante : utiliser un pont en H (du style https://store.arduino.cc/arduino-motor-shield-rev3) et le piloter avec un signal PWM. Il serait ainsi possible de régler le débit en jouant sur le rapport cyclique du signal de commande.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut
    Bonjour et merci beaucoup pour votre aide mes chers amis,

    Pour les références , j'ai utilisé une pompe LEX-WATER-PUMP2 (courant continu) , avec un capteur d'humidité de sol 101020614, un Module 4 relais 5 Vcc EF03006-5 ,un pic coudé (goutteur que j'ai mis à la fin de mon tuyau) puis j'utilise la carte arduino 2560 (Mega).

    Je me suis aidé d'un programme basique avec une led puis mon ami de longue date ma conseillé d'utiliser la fonction bool

    J'ai mis dans mon programme le delay(1000) qui permet d'afficher toute les 1 sec la valeur de l'humidité , cependant je pense que cela ne sert strictement à rien.

    En réalité je ne sais point a quoi sert la fonction bool sachant que j'ai rajouté false car mon ami me la conseiller mais que je suis confiner c'est un peu dure de lui demander.

    Aussi, j'ai essayé avec le shield mais les programmes sont un peu compliqué donc j'ai abandonné et j'ai continué sans et donc avec les impulsions.

    Est-ce-que je suis obligé de prendre un potentiomètre ? (juste comme sa)

    Cordialement
    Harry

  8. #8
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 019
    Par défaut
    Bonjour Harry87
    Citation Envoyé par Harry87 Voir le message
    J'ai mis dans mon programme le delay(1000) qui permet d'afficher toute les 1 sec la valeur de l'humidité , cependant je pense que cela ne sert strictement à rien.
    Ca sert à rien donc c'est indispensable
    Plaisanterie mise à part, à part le fait que ce n'est pas à une place optimale, cela rend le service demandé. Vu que l'arrosage est une fonction assez lente, cela n'impacte pas l'efficacité du programme.
    Citation Envoyé par Harry87 Voir le message
    Est-ce-que je suis obligé de prendre un potentiomètre ? (juste comme sa)
    Non, ce n'est pas indispensable, ça rend la chose plus pratique et permet de régler les impulsions plus aisément. L'autre méthode est d'attribuer une variable au temps de l'impulsions et de tâter en modifiant cette variable et en recompilant, chaque fois, le programme.

    A+
    Cordialement
    jpbbricole

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 933
    Par défaut
    Oui c’est peu utile et ça brouille un petit peu les maths pour savoir combien de temps la pompe est à active versus inactive quand elle est en fonction. En effet vous faites
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        if (on_pompe) {
    		digitalWrite(relay,HIGH);    // allumer
    		delay(1000);
    		digitalWrite(relay,LOW);    // eteindre
    		delay(1000);
    	}
    donc avez l’impression d’un truc bien équilibré mais comme vous attendez une seconde en haut du code dans tous les cas, en réalité vous êtes HIGH 1s et LOW pendant 2s

    Perso je le virerais

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2020
    Messages : 3
    Par défaut
    Merci jpbbricole et Jay M

    Pour ma part, je pense que je vais essayer de tâter à chaque fois en modifiant le delay pour le HAUT même si je trouve que c'est d'une bonne aide d’avoir sous la main avec moi le potentiomètre faudrait que je demande à mon ami si il en a pas dans sa réserve.

    A la fin de mon programme, j'ai vu que la fonction BAS et le delay ne servirait point puisque la boucle va se relancer .

    Cordialement
    Harry

  11. #11
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 019
    Par défaut
    Bonsoir Harry87
    Citation Envoyé par Harry87 Voir le message
    Merci jpbbricole et Jay M

    Pour ma part, je pense que je vais essayer de tâter à chaque fois en modifiant le delay pour le HAUT....
    Ok, voilà la version modifiée en définissant une valeur pour la période et pour l'impulsion: delaiImpulsionPeriode et delaiImpulsionHaut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #define relay 2
    #define capteur_Pin A0
    int valeur_de_humidite = 0;
     
    int delaiImpulsionPeriode = 1000;                           // Impulsion bas
    int delaiImpulsionHaut = 500;                               // Impulsion Haut
     
    void setup(){
    	pinMode(relay, OUTPUT);                                //relais
    	digitalWrite(relay, LOW);                              // Mettre le relais OFF
    	Serial.begin(9600);                                    //vitesse
    }
     
    void loop() {
    	valeur_de_humidite = analogRead(capteur_Pin);
    	Serial.print("Valeur mesuré par le capteur d'humidité = " );
    	Serial.print(valeur_de_humidite);
     
    	bool on_pompe = false;
     
    	if (valeur_de_humidite < 307) {
    		on_pompe = true;
    	}
    	else if (valeur_de_humidite > 460) {
    		on_pompe = false;
    	}
     
    	Serial.print(" Pompe ");
    	Serial.println(on_pompe ? "ON" : "OFF");	
     
    	if (on_pompe) {
    		digitalWrite(relay,HIGH);    // allumer
    		delay(delaiImpulsionHaut);
    		digitalWrite(relay,LOW);    // eteindre
    		delay(delaiImpulsionPeriode-delaiImpulsionHaut);
    	}	
    	else {
    		digitalWrite(relay,LOW);    // eteindre
    		delay(1000);                                       // Temporisation affichage quand pas d'action
    	}
    }
    La suite pourrait être d'afficher la valeur mesurée, toutes les n secondes, sans la fonction dalay(), cette temporisation "empiète" sur la période d'affichage.
    Mais essaies déjà ce code et donnes en des nouvelles.

    A+
    Cordialement
    jpbbricole

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question par rapport aux User stories
    Par ErEcTuS dans le forum Méthodes Agiles
    Réponses: 3
    Dernier message: 03/05/2010, 01h44
  2. Bcp de questions par rapport à Samba
    Par donkeyquote dans le forum Réseau
    Réponses: 0
    Dernier message: 11/03/2008, 14h53
  3. Quelques petites questions par rapport aux textures
    Par kev42100 dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 21/02/2008, 21h37
  4. [Configuration] question par rapport aux chemins
    Par Death83 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 16
    Dernier message: 11/12/2006, 10h24
  5. [XHTML] XHTML: plusieur question par rapport au html
    Par pierrot10 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 30/08/2006, 08h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo