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é ![]()
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 ![]()
A+
Cordialement
jpbbricole
Bonjour,
C'est un bouton poussoir par servo, je ne peux malheureusement pas envoyer une photo...
Mes connaissances sont minimes ![]()
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 ![]()
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 ![]()
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 ![]()
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 ??? ![]()


