Commande pour aspirateur copeaux (ouverture vannes)

Bonjour,
Je suis vraiment novice en informatique et j'aimerai commander des servos avec bouton poussoirs et/ou écran tactile pour commander l'ouverture de vannes d'un aspirateur de copeaux.
L'écran commanderai un servo en s'assurant que les autres soient fermés. (un seul peut être ouvert).
L'autre manière consisterai à l'aide de bouton poussoirs d'ouvrir un clapet, en allumant une diode verte ou rouge.
Quelqu'un peut-il m'aider ?
D'avance je vous remercie.
Laurent

Bonjour log6330

As tu déjà installé l'environnement Arduino et as tu déjà fait quelques exemples?
As tu déjà du matériel?

A+
Cordialement
jpbbricole

Bonjour,
Installé environnement arduino, et déjà fait quelques exemples,, dont certains pas très concluant,,,
J'ai tout le matériel pour faire le projet... mais pas assez de compétences
Il faudrait en fait un écran tactile qui commande une ouverture dans un local et des simples boutons poussoirs (avec led rouge et verte pour signaler quelle trappe est ouverte) qui commandent la même chose à un autre endroit et qui interagissent entre-eux
Voilà le projet
Merci

Bonsoir log6330

Lesquels et pourquoi?
Comme tu as les servo, les as-tu déjà essayés, commandés avec un Arduino?

Y compris l'écran tactile?
Quelle distance entre les 2 endroits de commande.

A+
Cordialement
jpbbricole

Bonsoir @log6330 et Bienvenue sur ce Forum !

En arrivant ici il est important de prendre le temps de consulter les Bonnes Pratiques du Forum Francophone pour découvrir où et comment demander de l'aide

..... certainement pas dans le sous forum " destiné à la présentation de projets/réalisations complets et fonctionnels" ou tu a posté :wink:

Je déplace donc ton message à l'endroit approprié.

Bonjour,

J'ai fait plusieurs montage avec les servos et cela fonctionnait.
J'ai un arduino Mega et Uno, pour l'écran c'est un Nextion, l'interface graphique cela n'est pas un problème. Il y a environ 4m entre les 2 commandes (garage et cave)
Il faudrait 4 commandes sur l'écran avec fermeture de toutes les vannes à la mise sous tension et dès que j'en commande une, les autres soient fermées. Pour le commande avec bouton poussoirs idem, avec led rouge et verte pour savoir la position du servo (ouvert ou fermé),
Merci pour votre aide,
Laurent

Du coup que veux tu comme aide?

Si tu recherche des informations pour t'aider à écrire ton programme, il faut que tu pose des questions plus précise.
Par exemple donne les tests que tu as fait en suivant ce qui est recommandé dans le post indiqué par @al1fch.

Bonjour log6330

C'est ok, combien de servo et de quel type, donnes un lien.
Les boutons, c'est 2 boutons (ON et OFF) par servo ou 1 bouton (ON/OFF)?

Quelles sont tes connaissances en électronique.

Je n'ai malheureusement pas d'écran Nextion (mais je vais l'étudier), quand j'ai besoin d'un écran tactile, j'utilise un smartphone.

J'aurais certainement d'autres questions :wink:

A+
Cordialement
jpbbricole

Bonjour,

C'est un bouton poussoir par servo, je ne peux malheureusement pas envoyer une photo...
Mes connaissances sont minimes :slight_smile:
Mes servos sont des Hitec HS-485hb (4 au total)

Re Bonjour,
Je pensais à de simple Led ronde (verte et rouge)
L'écran c'est un Nextgen NX80487050
J'ai un boitier avec Arduino nano et écran, 2 servos sont à proximités (environ 1m) avec led rouge et verte (fixées près de la vanne pour voir position), et un autre dans la cave à +/-3m avec led sur boitier et led près des vannes. Pour l'alimentation c'était prévu:)
Je joint un croquis
Merci
Laurent
Commande CNC_231107_084241.pdf (648,5 Ko)

Bonjour log6330

Vu certaines longueur de fils, il sera nécessaire de mettre des résistances de PULLUP sur les entrées des boutons, environ 2.2k, mais pas critique. Ces résistances sont nécessaires, dans un milieu perturbé, sans résistances, les fils des boutons vont faire antenne et capter des parasites.

Je vais faire une simulation de tout ça, mais uniquement avec des boutons, pour le moment.

A+
Cordialement
jpbbricole

Un tout grand merci
Pour info j'utilise tinkercad
Je m'occupe de l'écran
Laurent

Super !

Moi, aussi :wink:

Le tout début de la simulation, avec 2 servo, pour le moment:

La version "en vrai" fonctionne.

Demain, la suite.

Bonne soirée
jpbbricole

Bonsoir,
Un tout grand merci...

Bonjour log6330

Voici la simulation Tinkercad, avec 4 servo:


J'ai ajouté, en bas à droite, un bouton pour fermer toutes les vannes.

//                                      Retourne -2 si fonction reset (les 2 extrêmes pressés)

Le programme se paramètre pour ce qui concerne, les servo, les LED et les boutons, dans ce tableau:

vanneParamDef vannesParam[] =
{
//   Pin  PWMmin   PWMmax   Ouvert   led V   ledR   Bouton
	{2,    900,    2100,    false,     6,      7,     A0},
	{3,    900,    2100,    false,     8,      9,     A1},
	{4,    900,    2100,    false,    10,     11,     A2},
	{5,    900,    2100,    false,    12,     13,     A3},
};

Les pin A4 et A5 sont réservées pour l'écran.
Le UNO est "plein"!

Plutôt qu'une longue description je préfère que tu découvres et poses un max de questions :wink:

Le programme:

/*
    Name:       ARDFR_log6330_CommandeAspiraTinkercad.ino
    Created:	08.11.2023
    Author:     jpbbricole/log6330
				
				Commande des 4 vannes de l'aspirateur au moyen de servo
				https://forum.arduino.cc/t/commande-pour-aspirateur-copeaux-ouverture-vannes/1186155
				https://www.tinkercad.com/things/lucVz8vXAQ2-ardfrcommandeaspirateur
*/

#include <Servo.h>

//------------------------------------ Vannes
struct vanneParamDef     // Définition des paramètres des servo
{
	const int pwmPin;     // Pin du signal PWM
	const int pwmFerme;     // Impulsion minimum, position fermée
	const int pwmOuvert;     // Impulsion maximum, position ouverte
	boolean siOuverte;     // Si vanne ouverte
	const int ledVertePin;     // Pin de la LED verte
	const int ledRougePin;     // Pin de la LED rouge
	const int boutonPin;     // Bouton On/Off
};
const int vanneLedEtatOn = LOW;     // Etat pour allumer la LED
const int boutonEtatOn = LOW;     // Etat du bouton pressé. PULLUP, un côté du bouton à GND
vanneParamDef vannesParam[] =
{
//   Pin  PWMmin   PWMmax   Ouvert   led V   ledR   Bouton
	{2,    900,    2100,    false,     6,      7,     A0},
	{3,    900,    2100,    false,     8,      9,     A1},
	{4,    900,    2100,    false,    10,     11,     A2},
	{5,    900,    2100,    false,    12,     13,     A3},
};
const int vannesNombre = sizeof(vannesParam) / sizeof(vannesParam[0]);    // Nombre de vannes

Servo vanneServo[vannesNombre];  // Création de l'objet vanneServo

void setup()
{
	Serial.begin(115200);

	for (int v = 0; v < vannesNombre; v ++)     // Initialisation des servo
	{
		vanneServo[v].attach(vannesParam[v].pwmPin);     // MIse en route du servo s
		
		pinMode(vannesParam[v].ledVertePin, OUTPUT);
		digitalWrite(vannesParam[v].ledVertePin, !vanneLedEtatOn);     // Eteindre la LED
		
		pinMode(vannesParam[v].ledRougePin, OUTPUT);
		digitalWrite(vannesParam[v].ledRougePin, !vanneLedEtatOn);     // Eteindre la LED

		pinMode(vannesParam[v].boutonPin, INPUT_PULLUP);     // PULLUP, un côté du bouton à GND
	}
	
	vanneOuvrir(-1);     // Tout fermer
}

void loop()
{
	int boutonPresse = boutonsLecture();
	if (boutonPresse != -1)     // Si au moins 1 bouton pressé
	{
		Serial.println(boutonPresse);
		if (boutonPresse == -2)     // Si reset
		{
			vanneOuvrir(-1);     // Tout fermer
		} 
		else
		{
			vanneOuvrir(boutonPresse);     // Ouvrir la vanne
		}
		Serial.println("OK");
		boutonPresse = -1;
	}
}

//------------------------------------- Ouverture de la vanne vanneNum
//										vanneNum -1 = tout fermer
void vanneOuvrir(int vanneNum)
{
	for (int v = 0; v < vannesNombre; v ++)
	{
		Serial.print("Vanne" + String(v) + "\t");
		if (vanneNum != -1)     // Si pas tout fermer
		{
			if (v == vanneNum)     // Si c'est la bonne vanne, on ouvre
			{
				vanneServo[v].write(vannesParam[v].pwmOuvert);
				vannesParam[v].siOuverte = true;
				Serial.println("OUVRIR");
			} 
			else     // Autrement on ferme
			{
				vanneServo[v].write(vannesParam[v].pwmFerme);
				vannesParam[v].siOuverte = false;
				Serial.println("FERMER");
			}
		} 
		else
		{
			vanneServo[v].write(vannesParam[v].pwmFerme);     // On ferme tout
			vannesParam[v].siOuverte = false;
			Serial.println("FERMER*");
		}
	}
	vannesLedEtat();
}

//------------------------------------- Allumage des LED en fonction de l'état de la vanne
void vannesLedEtat()
{
	for (int v = 0; v < vannesNombre; v ++)
	{
		if (vannesParam[v].siOuverte)
		{
			digitalWrite(vannesParam[v].ledRougePin, vanneLedEtatOn);     // Allumer la LED
			digitalWrite(vannesParam[v].ledVertePin, !vanneLedEtatOn);     // Eteindre la LED
		} 
		else
		{
			digitalWrite(vannesParam[v].ledRougePin, !vanneLedEtatOn);     // Allumer la LED
			digitalWrite(vannesParam[v].ledVertePin, vanneLedEtatOn);     // Eteindre la LED
		}
	}
}

//------------------------------------- Retourne -1 si pas de bouton pressé
//                                      Retourne -2 si fonction reset (les 2 extrêmes pressés)
int boutonsLecture()     
{
	if ((digitalRead(vannesParam[0].boutonPin) == boutonEtatOn) && (digitalRead(vannesParam[vannesNombre -1].boutonPin) == boutonEtatOn))
	{
		return -2;     // Pour reset
	}

	for (int v = 0; v < vannesNombre; v ++)
	{
		if (digitalRead(vannesParam[v].boutonPin) == boutonEtatOn)     // Si ce bouton est pressé
		{
			return v;
		}
	}

	return -1;
}

A+
Bonne et belle journée
jpbbricole

Bonjour,

Un tout grand merci pour le programme...
Je ne suis pas à la maison pour l'instant, j'essaie cela dès que je rentre et je te tiens informé, ou si j'ai des questions
Un tt grand merci:)
Laurent

Je vais essayer d'y intégrer l'écran maintenant,,,
A mon avis cela va pas être simple...

Re Bonjour,
Désolé, mais je ne connais pas ton prénom...
Je suis rentré en vitesse pour essayer cela :slight_smile:
J'ai refais le schéma chez moi sur tinkercad, voir photo
L'écran se branche en Tx et Rx soit 0 et 1, j'ai fait l'interface graphique, je vais essayer le code...
Pourquoi des diodes en 330Ohm et pas 220Ohm ?

Il faudra juste régler la position des servos, car quand plus de courant, ils se mettent à une position bizarre... ou c'est juste à cause de la simulation ?

Dois-je prévoir une autre alimentation pour l'écran, je suppose que c'est préférable.
Je peux utiliser du câble d'alarme pour câbler le tout, ou la section est trop fine ?
Je vais modéliser tout ca sur une platine d'essai et essayer.
Encore un tout grand merci, je ne sais que faire pour te remercier
Merci
Laurent

J'aurais dit au hasard JP ??? :slight_smile: