ramasoft a écrit : ↑28 avr. 2025, 18:09
J'ai une carte Aduino Uno, que j'avais achetée avec un kit de démarrage pour voir comment ça fonctionnait et je n'en ai jamais trouvé l'usage sur le réseau... ça doit faire l'affaire.
Donc su j'ai bien compris, c'est elle qui commande les drivers des moteurs et on met 2 drivers en série sur une sortie de l'Arduino, c'est bien ça ?
Hervé quand tu dis qu'il faut faire attention au réglage du courant, c'est quoi au juste ?
Ah oui, autre question de newbie: ça s'alimente sous 5V je suppose et quelle consommation faut-il prévoir ?
Ce qu'il faudrait c'est nous faire une liste du matos avec les références.
Très bonne idée la liste patrick (dit le newbie de chez newbie)
ramasoft a écrit : ↑28 avr. 2025, 17:24
Ok merci Christian.
Question: si je mets un moteur de chaque côté, ils sont branchés tout bêtement en parallèle ?
Les drivers oui, pas les moteurs!
Si, on peut les brancher en parallèle sur le driver . Il suffit de faire attention au réglage du courant .
Non non, ne branche pas deux moteurs sur un driver! Tu le dis toi-même pourquoi --> le réglage du courant!
Un drivers coûte tellement peu cher qu'il ne faut pas s'en priver!
Re: Comment faire l'automatisme d'un ascenseur
Posté : 29 avr. 2025, 17:25
par patrice_b
Ah oui j'avais oublié, j'avais vu ces vidéos, je poste la 1 ère ici.
Il commande même avec le mobile...
Re: Comment faire l'automatisme d'un ascenseur
Posté : 29 avr. 2025, 17:56
par herwat
Re: Comment faire l'automatisme d'un ascenseur
Posté : 29 avr. 2025, 18:12
par likiki
Pour le plaisir (et uniquement pour le plaisir)
Re: Comment faire l'automatisme d'un ascenseur
Posté : 29 avr. 2025, 19:21
par patrice_b
Héhé j'avais vu cette vidéo dans mes recherches y'a des mois.
Re: Comment faire l'automatisme d'un ascenseur
Posté : 29 avr. 2025, 21:50
par Lherve54
Il va y avoir une prolifération d'ascenseur sur tout les réseaux du forum !!
Avec toutes les contraintes et les réglementations , le chef est pas prêt de partir en retraite pour assurer les suivis !!
Je vais suivre tout cela , mais pour moi pas envisageable dans mon petit espace !
Re: Comment faire l'automatisme d'un ascenseur
Posté : 29 avr. 2025, 22:04
par ramasoft
Lherve54 a écrit : ↑29 avr. 2025, 21:50
Il va y avoir une prolifération d'ascenseur sur tout les réseaux du forum !!
Avec toutes les contraintes et les réglementations , le chef est pas prêt de partir en retraite pour assurer les suivis !!
Je vais suivre tout cela , mais pour moi pas envisageable dans mon petit espace !
J'ai effectivement cru comprendre que c'était la profession de Christian ... ceci explique cela
Mais même si je ne le monte pas sur le réseau je vais tester ça ne serait-ce que pour me familiariser avec les moteurs pas à pas et leur commande.
Re: Comment faire l'automatisme d'un ascenseur
Posté : 30 avr. 2025, 06:10
par likiki
C'est utile aussi si tu veut faire un pont transbordeur par exemple.
Re: Comment faire l'automatisme d'un ascenseur
Posté : 30 avr. 2025, 06:57
par TrainDoly
likiki a écrit : ↑30 avr. 2025, 06:10
C'est utile aussi si tu veut faire un pont transbordeur par exemple.
... ou une rotonde...
ça fait pas mal de mois que j'ai installé un NEMA17 sur ma rotonde Jouef avec un beau driver et un arduino.
Elle fonctionne presque bien mais le code arduino demande à être affiné. Comme je ne sais pas faire ça, je ne me sers pas de ma rotonde.
Je créerais un autre sujet le jour où je voudrais m'y remettre...
Re: Comment faire l'automatisme d'un ascenseur
Posté : 30 avr. 2025, 14:45
par patrice_b
Ah oui.la rotonde ça aussi ca fera une réalisation de plus à prévoir
Mais chaque chose en son temps.
Re: Comment faire l'automatisme d'un ascenseur
Posté : 30 avr. 2025, 14:47
par patrice_b
Lherve54 a écrit : ↑29 avr. 2025, 21:50
Il va y avoir une prolifération d'ascenseur sur tout les réseaux du forum !!
Avec toutes les contraintes et les réglementations , le chef est pas prêt de partir en retraite pour assurer les suivis !!
Je vais suivre tout cela , mais pour moi pas envisageable dans mon petit espace !
Ben justement ça prends bien moins de place qu'une rampe hélicoïdale... parfait pour un petit réseau, car çà peux presque doubler la surface de ton réseau avec un ou deux étages...
Re: Comment faire l'automatisme d'un ascenseur
Posté : 06 mai 2025, 16:59
par likiki
La V4 est là, le plus est la possibilité de régler les niveaux avec enregistrement des paramètres du niveau réglé.
L'enregistrement ne se fait que dans la mémoire volatile.
/*
***************************************************
****** Ascenseur avec un moteur pas à pas *******
****** *******
****** Programme V 4.0 *******
****** Du 06/05/2025 *******
****** Par C.ARFEL *******
****** *******
****** Carte Wemos D1 Mini *******
****** *******
****** Version 1.0 *******
****** Mise a quai manuelle *******
****** Afficheur lcd 16 x 2 I2C *******
****** RC + 5 sous sol *******
****** Menu par encodeur *******
****** *******
****** *******
****** Liste des bornes utilisées *******
****** *******
****** D0 Capteur infrarouge *******
****** D1 I2C écran *******
****** D2 I2C écran *******
****** D3 DIR commande de direction moteur *******
****** D4 STEP commande nb pas moteur *******
****** D5 SW encodeur *******
****** D6 DT encodeur *******
****** D7 Clic encodeur *******
****** D8 Arrêt d'urgence + FC total *******
****** RST (reset carte) *******
****** *******
****** Le croquis utilise ***** octets (**%)*******
****** de l'espace de stockage de *******
****** programmes. Le maximum est de *******
****** ****** octets. *******
****** *******
****** Les variables globales utilisent *******
****** **** octets (36%) de mémoire *******
****** dynamique, ce qui laisse **** *******
****** octets pour les variables locales. *******
****** Le maximum est de **** octets. *******
****** *******
****** *******
***************************************************
. Variables and constants in RAM (global, static), used 29024 / 80192 bytes (36%)
║ SEGMENT BYTES DESCRIPTION
╠══ DATA 1540 initialized variables
╠══ RODATA 1172 constants
╚══ BSS 26312 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 60415 / 65536 bytes (92%)
║ SEGMENT BYTES DESCRIPTION
╠══ ICACHE 32768 reserved space for flash instruction cache
╚══ IRAM 27647 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 241172 / 1048576 bytes (22%)
║ SEGMENT BYTES DESCRIPTION
╚══ IROM 241172 code in flash
*/
#include <AccelStepper.h> // Bibliothéque moteur pas a pas
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Bibliothéque ecran protocole I2C
#include "RotaryEncoder.h" // Appel de la bibliothéque pour encodeur
#define STEPSS 1 // Nombre par pas d'encodeur
#define POSMIN -5 // Position MINI de l'encodeur
#define POSMAX 9 // Position MAX de l'encodeur
#define BPE D5 // Borne SW encodeur (bouton)
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 ou 0x3F déclaration adresse du lcd
RotaryEncoder encoder(D6, D7); // Borne de l'encodeur (DT, CLK)
const byte pin_DIR = D3; // Borne contrôle pour TMC2209
const byte pin_STEP = D4; // Borne contrôle pour TMC2209
AccelStepper stepper(AccelStepper::DRIVER, pin_STEP, pin_DIR); // création objet Stepper
int Pos0SS = 0; // Crans moteur pour la position plateau niveau reseau.
int Pos1SS = 10000; // Crans moteur pour la position plateau 1er sous sol
int Pos2SS = 20000; // Crans moteur pour la position plateau 2ème sous sol
int Pos3SS = 30000; // Crans moteur pour la position plateau 3ème sous sol
int Pos4SS = 40000; // Crans moteur pour la position plateau 4ème sous sol
int Pos5SS = 50000; // Crans moteur pour la position plateau 5ème sous sol
int Position = 0; // variable information position du plateau
int Init = 0; // Variable pour l'initialisation
int Ebpe = 10; // Variable position bouton encodeur 1
int lastPos, newPos; // Variable encodeur
int Aller = 1; // Variable destination
int Deplace ; // variable 1 pour le deplacement réglage
void setup()
{
lcd.init(); // Initialisation de l'afficheur
lcd.backlight(); // Allume l'ecran
lcd.clear(); // Efface l'ecran
lcd.setCursor (0,0); // place le curseur sur la ligne 0 a gauche
lcd.print ("*Initialisation*"); // Affichage sur le lcd
lcd.setCursor (0,1); // passe a la ligne suivante
lcd.print ("* du Programme *"); // affichage sur le lcd
stepper.setMaxSpeed(8000.0); // Vitesse max moteur
stepper.setAcceleration(1000.0); // distance accélération / décélération
encoder.setPosition(10 / STEPSS); // Position initiale encodeur
pinMode(BPE, INPUT); // Initialisation en entrée (de la borne D5) du clic encodeur rotatif
}
/*
************************
* Fin de la zone SETUP *
************************
*/
/*
****************************
* Séquence initialisation *
****************************
*/
void Initialisation() { // Module initialisation du plateau Recherche du FC
// Il ne se passe rien d'important ici pour le moment a ce stade du programme.
lcd.clear (); // Efface l'ecran
delay (10);
lcd.setCursor (0,0);
lcd.print (" Niveau reseau. ");
delay(10);
lcd.setCursor(0,1); // place le curseur ligne suivante
lcd.print ("** En attente **");
delay (20);
Init = 1; // Informe que l'initialisation a été faite pour ne pas y revenir
}
/*
**************************************
* Fin de la séquence initialisation *
**************************************
*/
/*
*********************************
* Début boucle principale LOOP *
*********************************
*/
void loop()
{
if (Init <1) { // Si 1er passage executer la ligne suivante sinon passer
Initialisation(); // Vas executer le bloc "initialisation"
}
/*
********************************
* Début de la zone des appels *
********************************
*/
/*
****************************************
* Menu selection par encodeur rotatif *
****************************************
*/
// ________________ Zone lecture encodeur rotatif _______________
encoder.tick();
newPos = encoder.getPosition() * STEPSS;
if (newPos < POSMIN) {
encoder.setPosition(POSMIN / STEPSS);
newPos = POSMIN;
}
else if (newPos > POSMAX) {
encoder.setPosition(POSMAX / STEPSS);
newPos = POSMAX;
}
if (lastPos != newPos) {
if (newPos <= 0){ // valable de -5 a 0
delay (100);
lcd.setCursor (0,0);
lcd.print ("Niveau ");
lcd.print (Position);
lcd.print (" ");
delay(100);
lcd.setCursor(0,1); // place le curseur ligne suivante
lcd.print ("Destination : ");lcd.print(newPos);lcd.print(" ");
delay (100);
lastPos = newPos;
}
if (newPos == 1){ Deplace = 10; Affiche1(); lastPos = newPos; } // Valable si 1
if (newPos == 2){ Deplace = 30; Affiche1(); lastPos = newPos; } // Valable si 2
if (newPos == 3){ Deplace = 50; Affiche1(); lastPos = newPos; } // Valable si 3
if (newPos == 4){ Deplace = 100; Affiche1(); lastPos = newPos; } // Valable si 4
if (newPos == 5){ Deplace = -10; Affiche1(); lastPos = newPos; } // Valable si 5
if (newPos == 6){ Deplace = -30; Affiche1(); lastPos = newPos; } // Valable si 6
if (newPos == 7){ Deplace = -50; Affiche1(); lastPos = newPos; } // Valable si 7
if (newPos == 8){ Deplace = -100; Affiche1(); lastPos = newPos; } // Valable si 8
}
if (digitalRead(BPE) == LOW) { // Control si Bouton encodeur actionné
Ebpe = newPos;
delay(500); // Tempo de pause pour éviter la redondance du clic
}
/*
***************************
* Appel Dans les niveaux *
***************************
*/
if (Ebpe == 1) { ReglageNiveau(); } // Réglage niveau +10
if (Ebpe == 2) { ReglageNiveau(); } // Réglage niveau +20
if (Ebpe == 3) { ReglageNiveau(); } // Réglage niveau +50
if (Ebpe == 4) { ReglageNiveau(); } // Réglage niveau +100
if (Ebpe == 5) { ReglageNiveau(); } // Réglage niveau -10
if (Ebpe == 6) { ReglageNiveau(); } // Réglage niveau -20
if (Ebpe == 7) { ReglageNiveau(); } // Réglage niveau -50
if (Ebpe == 8) { ReglageNiveau(); } // Réglage niveau -100
if (Ebpe == 9) { Affiche2(); }
if (Ebpe == 0) { Aller = Pos0SS; Position = 0; deplacement(); } // Action si choix RC
if (Ebpe == -1) { Aller = Pos1SS; Position = -1; deplacement(); } // Action si choix -1
if (Ebpe == -2) { Aller = Pos2SS; Position = -2; deplacement(); } // Action si choix -2
if (Ebpe == -3) { Aller = Pos3SS; Position = -3; deplacement(); } // Action si choix -3C
if (Ebpe == -4) { Aller = Pos4SS; Position = -4; deplacement(); } // Action si choix -4
if (Ebpe == -5) { Aller = Pos5SS; Position = -5; deplacement(); } // Action si choix -5
} // Fin du loop
/*
***************************************************
* Fin boucle principale LOOP *
***************************************************
*/
/*
****************
* Affichage 1 *
****************
*/
void Affiche1(){
lcd.clear (); // Efface l'ecran
delay (10);
lcd.setCursor (0,0);
lcd.print (" Reglage niveau ");
delay(10);
lcd.setCursor(0,1); // place le curseur ligne suivante
lcd.print (" ** "); lcd.print (Deplace); lcd.print (" **");
delay (10);
}
/*
********************
* Fin Affichage 1 *
********************
*/
/*
****************
* Affichage 2 *
****************
*/
void Affiche2(){
// lcd.clear (); // Efface l'ecran
delay (10);
lcd.setCursor (0,0);
lcd.print ("** En attente **");
delay(10);
lcd.setCursor(0,1); // place le curseur ligne suivante
lcd.print ("** choisissez **");
delay (10);
}
/*
********************
* Fin Affichage 2 *
********************
*/
/*
************************
* REGLAGE DES NIVEAUX *
************************
*/
void ReglageNiveau(){
delay (100);
if (Position == 0) { Aller = Pos0SS + (Deplace * 10); stepper.runToNewPosition(Aller); Pos0SS = Aller ; delay(500) ; }
if (Position == -1) { Aller = Pos1SS + (Deplace * 10); stepper.runToNewPosition(Aller); Pos1SS = Aller ; delay(500) ; }
if (Position == -2) { Aller = Pos2SS + (Deplace * 10); stepper.runToNewPosition(Aller); Pos2SS = Aller ; delay(500) ; }
if (Position == -3) { Aller = Pos3SS + (Deplace * 10); stepper.runToNewPosition(Aller); Pos3SS = Aller ; delay(500) ; }
if (Position == -4) { Aller = Pos4SS + (Deplace * 10); stepper.runToNewPosition(Aller); Pos4SS = Aller ; delay(500) ; }
if (Position == -5) { Aller = Pos5SS + (Deplace * 10); stepper.runToNewPosition(Aller); Pos5SS = Aller ; delay(500) ; }
lcd.clear (); // Efface l'ecran
delay (10);
lcd.setCursor (0,0);
lcd.print (" Reglage niveau ");
delay(10);
lcd.setCursor(0,1); // place le curseur ligne suivante
lcd.print (" - Fait - ");
delay (1000);
Ebpe = 10; // Place hors champ la variable de l'encodeur pour éviter une boucle infini.
Affiche2() ;
} // Fin réglage niveaux
/*
****************
* DEPLACEMENT *
****************
*/
void deplacement () { // Action selon choix clik
lcd.clear (); // Efface l'ecran
delay (100);
lcd.setCursor (0,0);
lcd.print ("** Plateforme **");
delay(10);
lcd.setCursor(0,1); // place le curseur ligne suivante
lcd.print ("* En mouvement *");
delay (10);
stepper.runToNewPosition(Aller);
delay(1000) ;
Ebpe = 10; // Place hors champ la variable de l'encodeur pour éviter une boucle infini.
lcd.clear (); // Efface l'ecran
delay (100);
lcd.setCursor (0,0);
lcd.print ("Niveau ");
lcd.print (Position); // affiche la position du plateau
delay(10);
lcd.setCursor(0,1); // place le curseur ligne suivante
lcd.print ("** En attente **");
delay (1000);
} // fin déplacement
/*
*********************
* Fin du programme *
*********************
*/
Prochaine étape, sauvegarder les niveaux dans la mémoire EEPROM (non volatile).
Re: Comment faire l'automatisme d'un ascenseur
Posté : 06 mai 2025, 17:28
par herwat
Eh bien ça y est ? ça fonctionne !
Re: Comment faire l'automatisme d'un ascenseur
Posté : 06 mai 2025, 17:45
par likiki
Oui Hervé, cela fonctionne sur un menu unique. mais ce n'est pas grave.