Contrôler une électrovanne avec arduino.

Bonjour,

Je cherche à contrôler une électrovanne avec arduino.
j'ai acheter ce produit, ce n'est pas un solénoïde classique car il y a 3 fil :

les branchements pour ouvrir ou fermer la vanne :

la vanne fonctionne très bien quand switch les connections à la main.

J'ai tenté d'automatiser tout ça avec arduino mais ça bug.
J'ai réaliser (bidouiller :slight_smile: ) un montage à base de deux mosfets actionnés chacun par un pin du arduino.
Pin2 était sensé ouvrir et pin3 fermé la vanne.
Mais ça fait n'importe quoi, les messages pin2 et 3 ne vont que vers un mosfet.

J'ai tenté de brancher à un motorshield en servomoteur mais ça ne fonctionne pas. Je ne sais pas si le moteur de la vanne est un servomoteur classique.

Si quelqu'un a une solution pour contrôler ce genre de vanne ça m'aiderait beaucoup :slight_smile:

Tristan

Bonsoir,

C'est quoi ton code qui marche pas? Avec le schéma elec.

En gros il faut faire un interrupteur à bascule entre les pins ON et OFF
+1 avec jambe - donnez nous des détails sur ce que vous avez essayé

En gros, j'ai reproduit ce montage deux fois :
https://cdn.instructables.com/FF9/EWMG/I4CMQETS/FF9EWMGI4CMQETS.LARGE.jpg

le premier relié au pin 2 pour faire passer le courant vers le fil rouge, pour ouvrir. Et le deuxième schéma relié au pin3 pour faire passer le courant vers le fil bleu, pour fermé.

les deux mosfet reliés à la même source d’énergie.

Le problème vient peut être du faite que le ground du moteur est relié à la fois au centre des deux mosfets ?

J'ai utilisé un code très simple, un code de type blink :

const int ledPin =  2;  
const int ledPin2 =  3;

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(ledPin, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(ledPin, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
  digitalWrite(ledPin2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(ledPin2, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

ce qu'il s'est passé alors avec mon montage c'est que le mosfet relié au fil rouge (ouverture), recevait là la fois la séquence avec 1000 en delay et celle avec 500ms.

wurst:
ce qu'il s'est passé alors avec mon montage c'est que le mosfet relié au fil rouge (ouverture), recevait là la fois la séquence avec 1000 en delay et celle avec 500ms.

C'est pas clair, il n'apparait pas dans le code un delay à 500ms.

Faudrait donner une photo/schéma de ton montage propre, pas une idée de ce qui à été fait ailleurs

wurst:
Le problème vient peut être du faite que le ground du moteur est relié à la fois au centre des deux mosfets ?

Qu'est ce que tu appelles Ground du moteur?

Oui le code est pas le même en effet :

void loop() {
  digitalWrite(ledPin, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(ledPin, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
  digitalWrite(ledPin2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);                       // wait for a second
  digitalWrite(ledPin2, LOW);    // turn the LED off by making the voltage LOW
  delay(500);                       // wait for a second
}

Qu'est ce que tu appelles Ground du moteur?

le fil branché au pole négatif, le fil jaune.

En fait je travaille sur une installation artistique que je présente ce mercredi à Rennes. Donc je vais manquer de temps pour travailler sur cette électrovanne. je reviendrai sur ce topic dans une semaine du coup.
je pensai trouver une solution rapide mais je vais donc garder pour l'instant la solution alternative que j’avais trouvé et qui fonctionne (plus ou moins car la force du servo n'est pas optimal) : Sur mon installation j'ai une vanne simple à boule fixée à un servomoteur.

Je mets le liens vers mon projet artistique : Tristan Ménez

Merci pour vos réponse et à très bientôt,

Tristan

ta video est super tant du point artistique , que realisation.....
pour savoir si c'est tes mosfet qui merde essai sans arduino
applique leur le niveau logique comme si c'etait la sorti de ton arduino
car ton schema est pas complet ou mal detailler
je pense pas que c'est la partie arduino qui deconne
tient nous au courant
mets nous le schema ou photo de ce qu'il y a apres ton arduino

Merci beaucoup Tiffus.
Je m'y remet bientôt et je détaillerai mieux ce que j'ai essayé.

Bonjour,

Ma présentation de l'installation s'est bien passée :slight_smile:
Je me remet sur l'électrovanne.

Je vais recommencer à zéro je pense. j'étais trop dans la bidouille et je ne maîtrise pas assez bien les mosfets.

Déjà, à votre avis est ce qu'elle a le même système de fonctionnement qu'un servomoteur classique ?

Je dispose d'un shield : Arduino Playground - AdafruitMotorShield
Est ce qu'un branchement est possible sur celui ci ?

Je dispose aussi d'une carte relai (x8, 10A 250V/AC), et de mosfets.

Quelle piste me recommandez vous pour contrôler l'électrovanne ?

Bonne journée,

T.

Bonjour,

Avec un relais c'est assez simple, tu disposes de 3 connections:

-Un contact NC
-Un contact NO
-Un commun.

Il faut aussi déterminer l'état le plus "courant" de la vanne: Ouverte ou Fermée.

Il faut connecter le +12V sur la borne Commun.
Le vert/bleu sur le NC
Le rouge sur le NO

Dans cette config, relais au repos la vanne sera Fermée, relais excité la vanne sera ouverte.
Si toutefois, la vanne doit resté plus souvent ouverte que fermée, il est préférable d'inverser le câblage pour garder le relais le plus possible au repos.

Cette solution à aussi l'avantage d'utiliser une seule sortie de la carte qui en état LOW/HIGH correspond à vanne ouverte/fermée

wurst:
Déjà, à votre avis est ce qu'elle a le même système de fonctionnement qu'un servomoteur classique ?

Non, un servo classique attend un ordre de position sur un seul fil, avec un signal carré à 50Hz.
Cette vanne reçois 2 ordres différents sur 2 fils différents

Merci pour ta réponse Jambe.

En fait, je n'ai pas bien expliqué l'objectif, je souhaite moduler le flux d'eau. Parfois la vanne doit rester au 3/4 ouverte, à d'autre moment seulement à 1/4 ouverte, entièrement ouverte, etc.
Je ne souhaite pas que la vanne soit simplement en on/off.
T'as solution ne ne permet pas cela n'est ce pas ?

D’où l’intérêt de communiquer toutes les infos dès le début, ça évite la perte de temps.

C'est possible avec 2 relais ou 2 mosfet. J'essaie de te produire un schéma elec dans la soirée

Par contre, la partie régulation promet d'être légèrement compliquée, sans retour d'info de la position de la vanne

Désolé pour le manque d'info. :frowning:
Oui la position ne sera pas très précise. Après, si le moteur répond de manière stable, le temps d'ouverture définira la position. Enfin c'est ce que j'espère.
L'électrovanne a un capteur qui comprend quand la vanne est entièrement fermée et entièrement ouverte. On entend alors un petit clique si l'on tente de continuer à fermer ou ouvrir.

Voici l'idée avec des mosfets, c'est des canaux P.

Le schéma montre 2 moteurs, il faut interpréter comme l'un étant le fil d’ouverture et le second le fil de fermeture.

Diode de roue libre pour protéger le transistor, et résistance de rappel pour decharger la grille du transistor et éviter les commutations "aléatoires"

Merci beaucoup, je regarde tout ça dès demain.

ça n'a à priori aucune importance mais j'ai omis de parler de max msp pour ne pas compliquer le sujet.
Je vais contrôler le arduino avec max msp. Je contrôle déjà un servomoteur avec max msp et ça fonctionne plutôt bien.
Donc la position sera définie en fonction du temps d'ouverture (et de fermeture) géré par max msp.

J'ai essayé de reproduire le montage, voilà ce que ça donne :

Est ce que j'ai bien compris ton schéma ?

Les diodes des transistors son reliées entre la première et la troisième patte, la barre vers la 3ème patte.
pin 2 et 3 sont reliés au centre du transistor.

Je n'ai pas encore testé le montage.

Tu as inversé alimentation et commande.

La "Gate" c'est la pin 1 du mosfet

Je viens de modifier.
Dans les montages avec mosfet que j'ai fait, je vois souvent le ground du arduino branché dans le montage. Ici ce n'est pas nécessaire ?

J'ai testé ce code avec ce montage :

const int ledPin =  2;  
const int ledPin2 =  3;

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(ledPin, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(2000);                       // wait for a second
  digitalWrite(ledPin, LOW);    // turn the LED off by making the voltage LOW
  delay(2000);                       // wait for a second
  digitalWrite(ledPin2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);                       // wait for a second
  digitalWrite(ledPin2, LOW);    // turn the LED off by making the voltage LOW
  delay(500);                       // wait for a second
}

Les diodes des transistors son reliées entre la deuxième et la troisième patte, la barre vers la 3ème patte.
pin 2 et 3 sont reliés à gauche du transistor.

Mon montage ne fonctionne pas. Lorsque je branche l'alimentation, l'électrovanne s'ouvre au max puis plus rien ne se passe.
j'ai tenté de brancher le ground du arduino au "-" de l'alimentation. Toujours rien.
Ensuite j'ai débranché l'alimentation (tout en laissant le ground du arduino branché). Et là l'électrovanne se ferme lentement. Avec comme séquence : 2000ms et 500ms. la fermeture de l'électrovanne reçois les 2 messages de Pin2 et Pin3.

J'ai déjà eu ce soucis et je l'avais expliqué dans mon deuxième message :

ce qu'il s'est passé alors avec mon montage c'est que le mosfet relié au fil rouge (ouverture), recevait là la fois la séquence avec 1000 en delay et celle avec 500ms.

En me trompant dans une connexion (en faisant un branchement direct du moteur sur l'alimentation), j'ai remarqué que quand j'inverse la polarité sur le fil bleu, la fermeture, l'électrovanne s'ouvre.
L'inversion de polarité sur le fil rouge, ouverture, ne produit rien.

J'ai réussi à contrôler l'électrovanne avec mon relai (x8, 10A 250V/AC).

le montage :

Je voulais que les circuits soit normalement fermé. Du coup le contrôle du relai est inversé, la commande HIGH du arduino ferme les connexions et LOW fait passer le courant dans les fil rouge et bleu de l'électrovanne.

Je contrôle arduino avec un patch max msp, "ArduinoMax_InOut_forDummies" disponible à cette adresse :
https://playground.arduino.cc/Interfacing/MaxMSP#ArduinoMax_InOut_forDummies

voilà le patch que j'ai fait, il faut placer ce fichier dans le même dossier que le fichier "ArduinoMaxInOutDummyCom01" et indiquer le bon port de communication dans le patch "ArduinoMaxInOutDummyCom01".

{
	"patcher" : 	{
		"fileversion" : 1,
		"rect" : [ 241.0, 178.0, 998.0, 278.0 ],
		"bglocked" : 0,
		"defrect" : [ 241.0, 178.0, 998.0, 278.0 ],
		"openrect" : [ 0.0, 0.0, 0.0, 0.0 ],
		"openinpresentation" : 0,
		"default_fontsize" : 12.0,
		"default_fontface" : 0,
		"default_fontname" : "Arial",
		"gridonopen" : 0,
		"gridsize" : [ 15.0, 15.0 ],
		"gridsnaponopen" : 0,
		"toolbarvisible" : 1,
		"boxanimatetime" : 200,
		"imprint" : 0,
		"boxes" : [ 			{
				"box" : 				{
					"maxclass" : "message",
					"text" : "[v 3 1]",
					"fontname" : "Arial",
					"outlettype" : [ "" ],
					"id" : "obj-19",
					"fontsize" : 12.0,
					"patching_rect" : [ 340.0, 133.0, 57.0, 18.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "message",
					"text" : "[v 2 1]",
					"fontname" : "Arial",
					"outlettype" : [ "" ],
					"id" : "obj-20",
					"fontsize" : 12.0,
					"patching_rect" : [ 273.0, 133.0, 57.0, 18.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "newobj",
					"text" : "delay 100",
					"fontname" : "Arial",
					"outlettype" : [ "bang" ],
					"id" : "obj-18",
					"fontsize" : 12.0,
					"patching_rect" : [ 273.0, 101.0, 100.0, 20.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "message",
					"text" : "[p 3 1]",
					"fontname" : "Arial",
					"outlettype" : [ "" ],
					"id" : "obj-16",
					"fontsize" : 12.0,
					"patching_rect" : [ 214.0, 133.0, 51.0, 18.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "message",
					"text" : "[p 2 1]",
					"fontname" : "Arial",
					"outlettype" : [ "" ],
					"id" : "obj-17",
					"fontsize" : 12.0,
					"patching_rect" : [ 156.0, 133.0, 51.0, 18.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "newobj",
					"text" : "- 1",
					"fontname" : "Arial",
					"outlettype" : [ "int" ],
					"id" : "obj-11",
					"fontsize" : 12.0,
					"patching_rect" : [ 80.0, 60.0, 34.0, 20.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "newobj",
					"text" : "* -1",
					"fontname" : "Arial",
					"outlettype" : [ "int" ],
					"id" : "obj-12",
					"fontsize" : 12.0,
					"patching_rect" : [ 80.0, 84.0, 34.0, 20.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "toggle",
					"outlettype" : [ "int" ],
					"id" : "obj-13",
					"patching_rect" : [ 80.0, 11.0, 40.0, 40.0 ],
					"numinlets" : 1,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "newobj",
					"text" : "- 1",
					"fontname" : "Arial",
					"outlettype" : [ "int" ],
					"id" : "obj-9",
					"fontsize" : 12.0,
					"patching_rect" : [ 16.0, 60.0, 34.0, 20.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "newobj",
					"text" : "* -1",
					"fontname" : "Arial",
					"outlettype" : [ "int" ],
					"id" : "obj-6",
					"fontsize" : 12.0,
					"patching_rect" : [ 16.0, 84.0, 34.0, 20.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "toggle",
					"outlettype" : [ "int" ],
					"id" : "obj-5",
					"patching_rect" : [ 16.0, 11.0, 40.0, 40.0 ],
					"numinlets" : 1,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "newobj",
					"text" : "loadbang",
					"fontname" : "Arial",
					"outlettype" : [ "bang" ],
					"id" : "obj-1",
					"fontsize" : 12.0,
					"patching_rect" : [ 156.0, 80.0, 100.0, 20.0 ],
					"numinlets" : 1,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "message",
					"text" : "[v 3 $1]",
					"fontname" : "Arial",
					"outlettype" : [ "" ],
					"id" : "obj-129",
					"fontsize" : 12.0,
					"patching_rect" : [ 80.0, 159.0, 57.0, 18.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "message",
					"text" : "[v 2 $1]",
					"fontname" : "Arial",
					"outlettype" : [ "" ],
					"id" : "obj-122",
					"fontsize" : 12.0,
					"patching_rect" : [ 16.0, 159.0, 57.0, 18.0 ],
					"numinlets" : 2,
					"numoutlets" : 1
				}

			}
, 			{
				"box" : 				{
					"maxclass" : "newobj",
					"hint" : "",
					"annotation" : "",
					"text" : "ArduinoMaxInOutDummyCom01 a",
					"fontname" : "Arial",
					"outlettype" : [ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ],
					"color" : [ 0.929412, 0.729412, 0.070588, 1.0 ],
					"id" : "obj-2",
					"fontsize" : 12.0,
					"patching_rect" : [ 16.0, 218.0, 661.5, 20.0 ],
					"numinlets" : 4,
					"numoutlets" : 18
				}

			}
 ],
		"lines" : [ 			{
				"patchline" : 				{
					"source" : [ "obj-12", 0 ],
					"destination" : [ "obj-129", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-6", 0 ],
					"destination" : [ "obj-122", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-122", 0 ],
					"destination" : [ "obj-2", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-129", 0 ],
					"destination" : [ "obj-2", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-19", 0 ],
					"destination" : [ "obj-2", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-20", 0 ],
					"destination" : [ "obj-2", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-16", 0 ],
					"destination" : [ "obj-2", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-17", 0 ],
					"destination" : [ "obj-2", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-18", 0 ],
					"destination" : [ "obj-19", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-18", 0 ],
					"destination" : [ "obj-20", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-1", 0 ],
					"destination" : [ "obj-18", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-1", 0 ],
					"destination" : [ "obj-16", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-1", 0 ],
					"destination" : [ "obj-17", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-9", 0 ],
					"destination" : [ "obj-6", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-5", 0 ],
					"destination" : [ "obj-9", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-13", 0 ],
					"destination" : [ "obj-11", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
, 			{
				"patchline" : 				{
					"source" : [ "obj-11", 0 ],
					"destination" : [ "obj-12", 0 ],
					"hidden" : 0,
					"midpoints" : [  ]
				}

			}
 ]
	}

}

Le relai fait du bruit à l'ouverture et à la fermeture. j'aurai aimé un système silencieux pour mon installation. Après... le moteur de l'électrovanne fait déjà du bruit donc ça fait juste qu'en rajouter :slight_smile:
Je vais tout de même essayer de voir s'il existe des relais plus adaptés car je n'ai besoin de contrôler que du 12v.