Q2 est à choisir pour supporter le courant moteur, et accepter 5v pour commuter.
Erreur sur les fin de course, schéma à jour:
![]()
-----

Q2 est à choisir pour supporter le courant moteur, et accepter 5v pour commuter.
Erreur sur les fin de course, schéma à jour:
![]()
Pascal
et code avec réglage vitesse,
compatible montage avec L298 et montage à relais:
Code:/* essai telepherique 24-09-2025 avec reglage vitesse par potentiometre a chaque montee ou descente broches Arduino: pin 6: fin de course Haut pin 7: fin de course Bas pin 8: marche avant-montée (IN1A d'un L298 ou collage relais version relais) pin 9: marche arriere-descente (IN2A d'un L298 ou non utilisé version relais) pin 10: enable moteur (ENA d'un L298 ou commande Q2 version relais) */ //----------------------------------- #define fdcH 6 // entrée fin de cource Haut 0v actif #define fdcB 7 // entrée Fin de course Bas 0v actif #define out1 8 // sortie sens 1 moteur (avant) #define out2 9 // sortie sens 2 moteur (arrière) #define ena 10 // sortie Enable moteur (PWM) 5v actif int speed = 3; // vitesse acceleration, ralentissement 1=255mS 4=1sec // si speed est à 0, arret net moteur sur fins de course int pause = 3000; // temps de pause arret en mS int vitesse = 255; // vitesse 0 a 255 int vitmin = 20; // vitesse min 0 a 255 int pot = A0; // pt milieu potentiometre sur entrée A0 //----------------------------------- void setup() { pinMode(fdcH, INPUT_PULLUP); // rappel au +5v pinMode(fdcB, INPUT_PULLUP); pinMode(out1, OUTPUT); pinMode(out2, OUTPUT); pinMode(ena, OUTPUT); } //----------------------------------- void loop() { // boucle sans fin if (digitalRead(fdcH)) { // si en bas ou en cours de trajet Readvitesse(); Montee(); delay(pause); // delai arret en Haut (en mS) } Readvitesse(); Descente(); delay(pause); // delai arret en Bas (en mS) } //----------------------------------- void Montee() { // montee, marche avant, sens1 digitalWrite(out1, HIGH); // sens1 niveau haut digitalWrite(out2, LOW); // sens2 niveau bas Accelere(); while(digitalRead(fdcH)); // On attend fdcH a 0 Ralentit(); // arret progressif du moteur en Haut } //----------------------------------- void Descente() { // descente, marche arrière, sens2 digitalWrite(out1, LOW); // sens1 niveau bas digitalWrite(out2, HIGH); // sens2 niveau haut Accelere(); while(digitalRead(fdcB)); // On attend fdcB a 0 Ralentit(); // arret progressif du moteur en Bas } //----------------------------------- void Accelere() { // demarrage progressif du moteur for (int pwm = 0; pwm <= vitesse; pwm++) { analogWrite(ena, pwm); delay(speed); } } //----------------------------------- void Ralentit() { // arret progressif du moteur for (int pwm = vitesse; pwm >= 0; pwm--) { analogWrite(ena, pwm); delay(speed); } } //----------------------------------- void Readvitesse() { // lecture potentiometre 0 a 1023 /4 vitesse= analogRead(pot) /4; //vitesse = 0 a 255 if (vitesse < vitmin) { // eviter vitesse=0 vitesse= vitmin; } }
Pascal
toujours vérifier n fois avant de publier..
erreur sur le brochage de Q1,
brochage correct:
![]()
Pascal
Merci inifiniment pour tout ce que vous faites.
j'espère que mes petites mains seront à la hauteur de votre talent...
Bravo1:
![]()
Bonjour
c'est un plaisir, pour un loisir.
la partie mécanique me parait plus complexe.
Pascal
Pour le courant des moteurs à ma disposition je vais les tester demain avec une alim stabilisée pour etre certains des valeurs.
J'ai encore 2 petites questions:
-pour le relais G2RL2-12, je ne trouve pas les mêmes référence de brochage que sur votre schéma
-pour les diodes D1 et D2 il faut quel modèle
Merci encore pour votre disponibilité
-> pour la diode, peut importe (voir diode de roue libre pour plus d'explications), par exemple une 1N4148 ou une 1N4004
-> pour le relais, c'est un DPDT, tu peux le remplacer par 2 SPDT si tu trouves pas, l'idée c'est d'avoir ton moteur sur les COM et d'y envoyer (+ et -) ou (- et +) selon la position du relai pour inverser la polarité.
A1 et A2 = bobine
COM1(11) et COM2(21) = vers le moteur
NO1, NO2, NC1, NC2 = vers les + et -
NB: d'ailleurs avec 2 SPDT on peut mettre le moteur au GND sur les 2 broches même en cas de défaillance d'un autre élément.
Dernière modification par Seb.26 ; 25/09/2025 à 14h50.
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
Bonjour
schéma à jour avec relais G2RL2-12 https://www.gotronic.fr/art-relais-o...2-12-24442.htm
![]()
Pascal
Comme je compte réaliser ce circuit, utile pour bien d'autres applications (moteur, verin, etc..)
Voici une implantation sur plaquette à trous:
![]()
Pascal
Vue 3D composants:
![]()
Pascal
Vue côté pistes:
![]()
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
sûr, en double face les pistes seraient plus courtes,
avec petit connecteur pour la liaison arduino ou picaxe,
et avec sérigraphie pour le même prix
Pascal
Bonsoir
J'attends le relais pour me faire un proto.
j'ai ajouté 4 pins pour liaison Arduino ou Picaxe
et 1 strap qui peut être remplacé par une résistance 1k si utilisation d'un BC337 au lieu du 2N7000 (il faudra inverser le sens du composant).
![]()
Pascal
Schéma, implantation composants et vue côté pistes:
Repères pour Arduino Uno ou Nano
Telepherique_relais3_sch.jpg
Telepherique_relais3_comp.jpg
Telepherique_relais3_Cui.jpg
Dernière modification par Pascal071 ; 26/09/2025 à 23h46.
Pascal
Bonsoir,
j'ai fait toutes mes connexions cet après midi mais le moteur ne tourne que dans un seul sens.
les capteurs fins de course arrêtent bien le moteur et la tempo de 3 secondes se fait bien mais le moteur recommence dans le même sens ensuite.
savez vous d'où pourrait venir mon erreur?
je vais reprendre le câblage demain
Merci
Bonsoir
Le relais doit faire "clic" à la fin du ralentissement.
tu as bien utilisé un 2N7000 (NMos), dans le bon sens ? (inverse par rapport au NPN BC547)
Dernier code, j'ai rajouté une petite pose 50mS le temps que le relais colle ou décolle avant d'envoyer le PWM.
code:
J'ai fait le proto, fonctionne impeccable..Code:/* essai telepherique 30-09-2025 avec reglage vitesse par potentiometre a chaque montee ou descente petite pause 50mS le temps que le relais colle ou décolle broches Arduino: pin 6: fin de course Haut pin 7: fin de course Bas pin 8: marche avant-montée (IN1A d'un L298 ou collage relais version relais) pin 9: marche arriere-descente (IN2A d'un L298 ou non utilisé version relais) pin 10: enable moteur (ENA d'un L298 ou commande Q2 version relais) */ //----------------------------------- #define fdcH 6 // entrée fin de cource Haut 0v actif #define fdcB 7 // entrée Fin de course Bas 0v actif #define out1 8 // sortie sens 1 moteur (avant) #define out2 9 // sortie sens 2 moteur (arrière) #define ena 10 // sortie Enable moteur (PWM) 5v actif int speed = 5; // vitesse acceleration, ralentissement 1=255mS 4=1sec // si speed est à 0, arret net moteur des le fin de course int pause = 3000; // temps de pause arret en mS int vitesse = 255; // vitesse 0 a 255 int vitmin = 20; // vitesse min 0 a 255 int pot = A0; // pt milieu potentiometre sur entrée A0 //----------------------------------- void setup() { pinMode(fdcH, INPUT_PULLUP); // rappel au +5v pinMode(fdcB, INPUT_PULLUP); pinMode(out1, OUTPUT); pinMode(out2, OUTPUT); pinMode(ena, OUTPUT); Serial.begin(9600); } //----------------------------------- void loop() { // boucle sans fin if (digitalRead(fdcH)) { // si en bas ou en cours de trajet Readvitesse(); Montee(); delay(pause); // delai arret en Haut (en mS) } Readvitesse(); Descente(); delay(pause); // delai arret en Bas (en mS) } //----------------------------------- void Montee() { // montee, marche avant, sens1 digitalWrite(out1, HIGH); // sens1 niveau haut digitalWrite(out2, LOW); // sens2 niveau bas delay(50); // delai collage relais Accelere(); while(digitalRead(fdcH)); // On attend fdcH a 0 Ralentit(); // arret progressif du moteur en Haut } //----------------------------------- void Descente() { // descente, marche arrière, sens2 digitalWrite(out1, LOW); // sens1 niveau bas digitalWrite(out2, HIGH); // sens2 niveau haut delay(50); // delai decollage relais Accelere(); while(digitalRead(fdcB)); // On attend fdcB a 0 Ralentit(); // arret progressif du moteur en Bas } //----------------------------------- void Accelere() { // demarrage progressif du moteur for (int pwm = 0; pwm <= vitesse; pwm++) { analogWrite(ena, pwm); delay(speed); //Serial.println(pwm); } } //----------------------------------- void Ralentit() { // arret progressif du moteur for (int pwm = vitesse; pwm >= 0; pwm--) { analogWrite(ena, pwm); delay(speed); //Serial.println(pwm); } } //----------------------------------- void Readvitesse() { // lecture potentiometre 0 a 1023 /4 vitesse= analogRead(pot) /4; //vitesse = 0 a 255 if (vitesse < vitmin) { // eviter vitesse=0 vitesse= vitmin; } }
* j'ai utilisé un BC337 et une résistance (pour économiser mes 2N7000)
![]()
Dernière modification par Pascal071 ; 05/10/2025 à 00h16.
Pascal
Merci beaucoup pour votre aide.
Cela fonctionne très bien avec le code sans la petite pause.
Je pense avoir inversé une diode lors du 1er montage.
Reste plus qu'à coupler cela à la mécanique...
bonjour
ok le potentiomètre fait bien varier la vitesse?
concernant le fin de course haut, il doit être maintenu uniquement pour le cas du reset, si la cabine est en haut, fin de course déjà dépassé lors du ralentissement.
dans ce cas unique, ça part vers le haut et CRAC..
ou alors mettre un 2e fdcH extrême de sécurité.
Si ce cas n'arrive jamais (arrêt général pas en haut), le fdcH peut être fugitif, tu as dû le voir aux essais.
le fdcB n'a pas cet effet car le programme cherche à partir vers le haut en premier (sauf si fdcH est actif)
pour la durée accélération et ralentissement, tu peux jouer sur le paramètre
cordialementCode:int speed = 3; // vitesse acceleration, ralentissement 1=255mS 4=1sec // si speed est à 0, arret net moteur sur fins de course
Pascal
oui le potentiometre fait bien varier la vitesse. J'ai mis un 10kohms.
Lorsqu'il est réglé au plus bas, est ce identique à ne pas utiliser de potentiometre ou cela ralentit un peu le moteur déjà.
La vitesse de mon moteur n'est pas très élevée et je ne sais pas si j'en ai vraiment besoin
Merci pour les infos sur les fins de course. Je ferai des tests quand la partie méca sera montée.
pour garder la vitesse max sans potentiomètre, il suffit de relier l'entrée A0 au +5v arduino
dans ce cas, le moteur est alimenté en 12v.
mais autant le garder ou mettre un ajustable au cas ou tu changes de moteur.
Dernière modification par Pascal071 ; 06/10/2025 à 14h14.
Pascal
Bonsoir
Hier tou fonctionnait et la je viens de retrancher et j'ai l'impression qu'il ne prend plus le programme en compte.
Quand l'alimentation 12v est coupée, l'arduino garde-t-il en mémoire le code?
Faut il maintenir une certaine alim?
Merci
Bonsoir
L'Arduino ne perd pas son programme une fois hors tension.
il y a bien 1 Led jaune et une verte allumées sur l'arduino uno ?
le moteur ne démarre pas après la mise sous tension?
vérifies bien la connectique, et les tensions ..
Pascal
re
nouveau code, pour visualisation / dépannage:
allume la Led jaune sur la carte arduino lorsque le moteur est commandé:
Code:/* essai telepherique 06-10-2025 avec reglage vitesse par potentiometre a chaque montee ou descente petite pause 50mS le temps que le relais colle ou décolle allumage de la Led Arduino quand le moteur tourne broches Arduino: pin 6: fin de course Haut pin 7: fin de course Bas pin 8: marche avant-montée (IN1A d'un L298 ou collage relais version relais) pin 9: marche arriere-descente (IN2A d'un L298 ou non utilisé version relais) pin 10: enable moteur (ENA d'un L298 ou commande Q2 PWM version relais) pin A0: pt milieu potentiometre reglage vitesse (0 a 5v) */ //----------------------------------- #define fdcH 6 // entrée fin de cource Haut 0v actif #define fdcB 7 // entrée Fin de course Bas 0v actif #define out1 8 // sortie sens 1 moteur (avant) #define out2 9 // sortie sens 2 moteur (arrière) #define ena 10 // sortie Enable moteur (PWM) 5v actif int speed = 4; // vitesse acceleration, ralentissement 1=255mS 4=1sec // si speed est à 0, arret net moteur des le fin de course int pause = 3000; // temps de pause arret en mS int vitesse = 255; // vitesse 0 a 255 int vitmin = 20; // vitesse min 0 a 255 int pot = A0; // pt milieu potentiometre sur entrée A0 //----------------------------------- void setup() { pinMode(fdcH, INPUT_PULLUP); // rappel au +5v pinMode(fdcB, INPUT_PULLUP); pinMode(out1, OUTPUT); pinMode(out2, OUTPUT); pinMode(ena, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); // Led jaune sur la carte Arduino } //----------------------------------- void loop() { // boucle sans fin if (digitalRead(fdcH)) { // si en bas ou en cours de trajet digitalWrite(LED_BUILTIN, HIGH); // allumer Led Readvitesse(); Montee(); digitalWrite(LED_BUILTIN, LOW); // eteindre Led delay(pause); // delai arret en Haut (en mS) } digitalWrite(LED_BUILTIN, HIGH); // allumer Led Readvitesse(); Descente(); digitalWrite(LED_BUILTIN, LOW); // eteindre Led delay(pause); // delai arret en Bas (en mS) } //----------------------------------- void Montee() { // montee, marche avant, sens1 digitalWrite(out1, HIGH); // sens1 niveau haut digitalWrite(out2, LOW); // sens2 niveau bas delay(50); // delai collage relais Accelere(); while(digitalRead(fdcH)); // On attend fdcH a 0 Ralentit(); // arret progressif du moteur en Haut } //----------------------------------- void Descente() { // descente, marche arrière, sens2 digitalWrite(out1, LOW); // sens1 niveau bas digitalWrite(out2, HIGH); // sens2 niveau haut delay(50); // delai collage relais Accelere(); while(digitalRead(fdcB)); // On attend fdcB a 0 Ralentit(); // arret progressif du moteur en Bas } //----------------------------------- void Accelere() { // demarrage progressif du moteur for (int pwm = 0; pwm <= vitesse; pwm++) { analogWrite(ena, pwm); delay(speed); } } //----------------------------------- void Ralentit() { // arret progressif du moteur for (int pwm = vitesse; pwm >= 0; pwm--) { analogWrite(ena, pwm); delay(speed); //Serial.println(pwm); } } //----------------------------------- void Readvitesse() { // lecture potentiometre 0 a 1023 /4 vitesse= analogRead(pot) /4; //vitesse = 0 a 255 if (vitesse < vitmin) { // eviter vitesse=0 vitesse= vitmin; } }
Pascal
Bonjour, j'ai regardé ce matin, je n'ai pas les memes diodes, il s'agit d'une carte compatible et elle l'a pas les memes diodes que la votre.
J'ai refait un test en la reliant au PC avec le cordon USB et cela fonctionne très bien.
Faut il une alim 5V permanente via l'USB?
Merci
Bonjour
Sur la carte à relais, tu as bien amené le +12v jusqu'à l'Arduino (broche Vin) ?
Non en fait j'ai branché mon alim 12V via le connecteur sur la carte Arduino et j'ai récupéré le Vin pour aller sur la carte à relais
La broche Vin de l'arduino n'est pas très puissante pour alimenter le moteur, la piste entre le connecteur jack et la broche Vin est fragile!
il faut amener le 12v directement sur la carte à relais, et amener 12v et 0v vers les broches arduino
tu as bien une led allumée lorsque le 12v est branché ?
voir image #47
Dernière modification par Pascal071 ; 07/10/2025 à 12h48.
Bonjour,
j'ai fait la modif d'alimentation hier et cela fonction qu'avec une alim 5V sur le connecteur USB.
Est ce que cela peut venir de ma carte qui est un bas de gamme de TEMU?
Bonjour
lorsque tu branches le 12v, une Led s'allume sur l'Arduino ?
tu as bien amené le Gnd ?
Pascal
