[Analogique] Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino



  1. #1
    invite7cd3983b

    Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino


    ------

    Bonjour!
    Dans le cadre d'un projet étudiant, je dois contrôler deux Electrovannes "EV" via un programme arduino.
    En attendant la rentrée en cette nouvelle année de DUT, je cherche à prendre de l'avance, je peux donc seulement simuler le circuit.

    J'avais déjà fait fonctionner en pratique les électrovannes en boucle infinie (s'ouvre et se ferme en boucle) avec des transistors (faute d'avoir des relais).
    Ca fonctionne



    EV en boucle.PNG



    Je veux donc maintenant les contrôler avec un bouton poussoir.

    Le fonctionnement souhaité est le suivant:
    -On lance le processus en appuyant sur un bouton poussoir.
    -Les électrovannes (initialement fermées) s'ouvrent durant un certain délai puis se referment.

    J'ai donc écrit ce code en pensant qu'il suffira de rajouter un bouton comme sur ce schéma.
    Il n'y a malheureusement pas de relais sur le simulateur Tinkercad...

    circut..PNG


    Code:
    const int switch_1 = 10;
    const int solenoid_valve_E1 = 1; //E1 for enter n°1
    const int solenoid_valve_S = 0;  //S for exit
    
    int switch_1_state; //mémoire de l'état du bouton
    
    //Etat intitial des differents pins
    void setup() { 
    Serial.begin(9600);   // initialize PINS  for valves:
      
    //~~~~~~Définition Entré ou sortie~~~~~~~~
      
      //Boutons (pines entrée de la carte)
      pinMode(switch_1,INPUT); // pine 10 (bouton 1) : entrée
      //ELECTROVANES (pines de sorties de la carte)
      pinMode(solenoid_valve_E1,OUTPUT); // Electrovane d'entrée 1
      pinMode(solenoid_valve_S,OUTPUT); // Electrovane de Sortie commune
     
     
     //~~~~~~Définition état initial des pines~~~~~~
     
      switch_1_state = digitalRead(switch_1);
      //Electrovanes FERME (état initial)
      digitalWrite(solenoid_valve_E1, HIGH); // Electrovane Entrée 1 FERME
      digitalWrite(solenoid_valve_S, HIGH); // Electrovane Sortie 0 FERME
      
    }
    
    
    //~~~~~~Boucle de l'experiance~~~~~~
    
    void loop() {
    
    //switch n°1
      if (digitalRead(switch_1_state) == HIGH){  //Si la valeur lue à la pine 10 est haute.. 
        delay(10);
        digitalWrite(solenoid_valve_E1, LOW);
        digitalWrite(solenoid_valve_S, LOW);
        delay(1000); 
        digitalWrite(solenoid_valve_E1,HIGH);
        digitalWrite(solenoid_valve_S,HIGH);
        delay(1100); 
      }
    
    }
    Je n'ai cependant pas réussit à faire fonctionner la simulation: Voici un lien vers cette simulation
    https://www.tinkercad.com/things/cuO...SqmF4smgt1TZeA

    Mes questions sont les suivantes:
    Pensez vous que le contrôle des EV est réalisable avec ce code , un bouton poussoir et des relais?
    Il y a t'il des erreurs dans le code et ou dans le montage électronique ?
    Connaissez vous des simulateurs gratuit qui permettrait de simuler le montage au complet ?

    Merci d'avance

    -----

  2. #2
    paulfjujo

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    bonjour,

    il faut s'inscrire pour utiliser ton lien sur le test , et accepter les cookies ... pas bien !

    quel est l'etat repos (non appuyé) du switch ? 0 ou 1 ?

    int switch_1_state; //mémoire de l'état du bouton
    tu utilises une lecture du memo bouton pas le bouton lui meme !

    rajouter un anti rebond sur l'appui du bouton !

    en supposoant ton bouton comme ideal (sans aucun rebond)




    Code:
    void loop()
     {
    //switch n°1
    // on suppose ici que le BP est tiré au +Vcc, donc etat 1 au repos, zero appuyé
    
       while( digitalRead(switch_1) == HIGH) ; // tant qu'on appuie pas dessus , on boucle 
    
        delay(10);  // on retest apres une petite tempo, histoire de laisser passer les rebonds eventuels
       if (digitalRead(switch_1) == LOW)   // oui, on est bien a zero , appuyé!
      {
        digitalWrite(solenoid_valve_E1, LOW);   // etat low = electrovanne actionnée
        digitalWrite(solenoid_valve_S, LOW);
        delay(1000); 
        digitalWrite(solenoid_valve_E1,HIGH);
        digitalWrite(solenoid_valve_S,HIGH);
        delay(1100); 
     // on le relache enfin  ce BP !
        while( digitalRead(switch_1) == LOW) ;
      }
    }

  3. #3
    invite7cd3983b

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    Bonjour!
    En effet j'en ai entendu parler de ces rebonds, si je mets une duré de pression imposée pour le if, vous pensez que ça fait l'affaire?
    Ou un condensateur?

    int switch_1_state; C'est la variable dans laquelle je stocke l'état lu sur la pine du bouton, que je vais utiliser pour le if.

    Oui mon état appuyé est LOW , enfin j'imagine que ça dépend du type de BP utilisé.

    Je veux que l'on ait juste à appuyer une fois sur le bouton et que la procédure se lance qu'une seul fois.
    Est-ce que le While( digital Read(switch_1)==LOW); impose que l'on reste appuyé ?
    Et faut'il pas mettre des {} dans le While ?

    Merci beacoup pour votre réponse !

  4. #4
    paulfjujo

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    En effet j'en ai entendu parler de ces rebonds, si je mets une duré de pression imposée pour le if, vous pensez que ça fait l'affaire?
    Ou un condensateur?
    d'apres toi, à quoi sert le delay de 10ms ? apres le test BP=0

    int switch_1_state; C'est la variable dans laquelle je stocke l'état lu sur la pine du bouton, que je vais utiliser pour le if.
    encore faut-il lire l'etat de la pin ET la stocker

    Oui mon état appuyé est LOW , enfin j'imagine que ça dépend du type de BP utilisé.
    L'imaginaire est à mettre de coté, c'est à toi de definir le sens d'action du bouton
    soit le BP est entre entree et Gnd (avec une R de tirage au +VCC) BP=0 non appuyé
    soit le BP est entre +Vcc et l'entree avec une R de tirage au GND BP=1 non appuyé

    Je veux que l'on ait juste à appuyer une fois sur le bouton et que la procédure se lance qu'une seul fois.
    Est-ce que le While( digital Read(switch_1)==LOW); impose que l'on reste appuyé ?
    le contraire, le while impose de relacher le BP,
    il faut arreter d'appuyer dessus apres coup ...
    ce qui est normalement deja le cas apres un delais de (1000 + 1100 ms)
    c'est juste pour eviter un maintien appuyé pendant une eternitée => multiplierait le nombre de ON /OFF

    Et faut'il pas mettre des {} dans le While ?
    non quand il n'y a qu'une seule ligne d'instruction
    mais tu peux en mettre pour faire joli

    Code:
     while( digitalRead(switch_1) == LOW)
    {
      // rien de plus
    } ;
    Dernière modification par paulfjujo ; 17/08/2021 à 20h32.

  5. A voir en vidéo sur Futura
  6. #5
    nornand

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    bjr ton schema est bourré d'erreurs , regardes comment tu as cablé les transistors , voila la correction pour 1 moteur a toi de faire le second , tu copies .

    je parle même pas du câblage qui mériterait que l'on te coupe un doigt , ET LES MASSES COMMUNES !

    https://www.tinkercad.com/things/cuO...SqmF4smgt1TZeA
    Dernière modification par nornand ; 18/08/2021 à 07h13.

  7. #6
    nornand

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    si çà ca fonctionne je me fait pape .

    les moteurs commandés pas la base du transistor ! les masses flottantes dans le vide sidéral , et tout le reste .
    Et tu fais un DUT , on est pas sortie des ronces .
    Dernière modification par nornand ; 18/08/2021 à 07h28.

  8. #7
    invite7cd3983b

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    d'apres toi, à quoi sert le delay de 10ms ? apres le test BP=0
    A mais oui ok je vois.
    encore faut-il lire l'etat de la pin ET la stocker
    c'est pas ce que je fais dans?:
    Code:
    switch_1_state = digitalRead(switch_1);
    L'imaginaire est à mettre de coté, c'est à toi de definir le sens d'action du bouton
    soit le BP est entre entree et Gnd (avec une R de tirage au +VCC) BP=0 non appuyé
    soit le BP est entre +Vcc et l'entree avec une R de tirage au GND BP=1 non appuyé
    En effet faudra que je regarde le type de bouton que l'on va utiliser.
    le contraire, le while impose de relacher le BP,
    il faut arreter d'appuyer dessus apres coup ...
    ce qui est normalement deja le cas apres un delais de (1000 + 1100 ms)
    c'est juste pour eviter un maintien appuyé pendant une eternitée => multiplierait le nombre de ON /OFF
    Mmh.. Mais la "traduction" d'une boucle while n'est pas "tant que..." ?

    Merci pour tout ces conseils!

  9. #8
    invite7cd3983b

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    Maintenant que tu le dis, ça me parait évidant..
    Mais je vais avoir besoin de tout mes doigts pour câbler tout ce montage ^^
    C'est la première fois que je touche à des transistors, donc merci beaucoup pour ton aide, je corrige tout ça.

  10. #9
    Murayama

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    Bonjour!

    Mmh.. Mais la "traduction" d'une boucle while n'est pas "tant que..." ?


    Si fait, si fait! Justement, while(quelque_chose); est une boucle qui tourne tant
    que le quelque chose est vrai. Ici, tant que le bouton reste appuyé, on ne fait rien
    d'autre. Par contre, cette méthode est très bien pour une application qui n'a
    qu'une entrée (le bouton), mais quand il y en a plusieurs, toutes les autres entrées
    seront ignorées tant qu'on ne sort pas de la boucle...

    Le mieux, c'est de fonctionner par interruptions. Cherchez "interruptions avec
    Arduino" et vous trouverez plein d'exemples.

    Pascal

  11. #10
    Forhorse

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    Pas besoin d'interruptions pour gérer des boutons poussoir.
    Les interruptions c'est pour des événements rapides, un bouton-poussoir c'est pas rapide.
    En automatisme industriel on gère des centaines d'entrées (boutons, capteurs) sans interruptions... faut juste savoir coder sans fourrer des "delays" toutes les 2 lignes...
    Tout projet flou conduit à une connerie précise !

  12. #11
    Murayama

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    Bonjour!

    Pas besoin d'interruptions pour gérer des boutons poussoir.
    Les interruptions c'est pour des événements rapides, un bouton-poussoir c'est pas rapide.


    C'est plus que ça. Les interruptions, ça permet de mettre le processeur en veille tant qu'il n'y
    a rien à faire, et c'est crucial pour les systèmes à ultra-basse consommation. Sinon, le processeur
    passe son temps à mouliner dans des boucles à ne rien faire de productif.

    Exemple: MSP430 opérant par polling (boucles d'attente): 200µA / MHz (de mémoire). Par contre,
    en le mettant en veille, on peut tomber à 100nA.

    Un deuxième avantage est de pouvoir faire des timings précis sans effort. Par exemple établir un
    "Systick" à 1 ms pour aller mesurer quelque chose. Si on fait ça par "polling", la période
    va dépendre de la quantité de calcul entre 2 événements, et ce temps n'est pas toujours
    constant.

    Pascal


  13. #12
    Forhorse

    Re : Contrôler une Electrovanne avec un Bouton poussoir et un Relais via Arduino

    C'est des cas particuliers
    Tout projet flou conduit à une connerie précise !

Discussions similaires

  1. Commander fauteuil électrique avec bouton poussoir arduino
    Par invite45ffab22 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 30/04/2019, 08h27
  2. [Analogique] Simuler bouton poussoir avec relais ?
    Par invite4dca5dc4 dans le forum Électronique
    Réponses: 4
    Dernier message: 16/04/2018, 14h18
  3. [Programmation] Arduino... Activer relais avec temporisation + bouton poussoir!
    Par invite82939336 dans le forum Électronique
    Réponses: 13
    Dernier message: 17/10/2016, 20h37
  4. besoin d'aide bouton poussoir avec l'arduino mega
    Par invite7f6bf7c8 dans le forum Électronique
    Réponses: 11
    Dernier message: 20/10/2014, 21h32
  5. controler un relais avec une arduino uno
    Par invite9c94f31d dans le forum Électronique
    Réponses: 1
    Dernier message: 18/04/2012, 20h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...