Page 3 sur 4

Re: Comment faire l'automatisme d'un ascenseur

Posté : 28 avr. 2025, 19:26
par patrice_b
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) :bienv:

Re: Comment faire l'automatisme d'un ascenseur

Posté : 28 avr. 2025, 22:55
par herwat
Pour les drivers, on les trouve à bon prix ici .

Re: Comment faire l'automatisme d'un ascenseur

Posté : 29 avr. 2025, 00:06
par ramasoft
Merci 👍
Ça ne va pas faire un gros investissement au final.
Le plus cher ça va être la planche en bois :hhhaaaa:

Re: Comment faire l'automatisme d'un ascenseur

Posté : 29 avr. 2025, 13:40
par patrice_b
ramasoft a écrit : 29 avr. 2025, 00:06 Merci 👍
Ça ne va pas faire un gros investissement au final.
Le plus cher ça va être la planche en bois :hhhaaaa:
En effet je trouve que c'est tout a fait raisonnable en prix.

Re: Comment faire l'automatisme d'un ascenseur

Posté : 29 avr. 2025, 16:48
par TrainDoly
herwat a écrit : 28 avr. 2025, 17:55
TrainDoly a écrit : 28 avr. 2025, 17:51
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
:cooooool:

Re: Comment faire l'automatisme d'un ascenseur

Posté : 29 avr. 2025, 18:12
par likiki
Pour le plaisir (et uniquement pour le plaisir) :mdr3:


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 :hhhaaaa:
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. :siffle:

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. :siffle:
... ou une rotonde... :vert
ç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. :lollol:

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.

Code : Tout sélectionner

/*
***************************************************
****** 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).

:a_suivre:

Re: Comment faire l'automatisme d'un ascenseur

Posté : 06 mai 2025, 17:28
par herwat
Eh bien ça y est ? ça fonctionne ! :cooooool: :cooooool: :cooooool:

:bienv:

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.

:lollol:

Re: Comment faire l'automatisme d'un ascenseur

Posté : 06 mai 2025, 18:27
par patrice_b
Bravo chef
Il est fort le chef...

( Sur un air de la 7eme compagnie :lollol: )

Super boulot, bravo. :bienv:

Re: Comment faire l'automatisme d'un ascenseur

Posté : 06 mai 2025, 20:55
par C2Vues-BricoTrain
J'arrive avec la fanfare... :mdr1: :mdr3:


Re: Comment faire l'automatisme d'un ascenseur

Posté : 06 mai 2025, 23:09
par herwat
likiki a écrit : 06 mai 2025, 16:59

Prochaine étape, sauvegarder les niveaux dans la mémoire EEPROM (non volatile).

:a_suivre:
ça, c'est du gâteau !
Si ça t'intéresse : ici il explique très bien l'emploi de la bibliothèque EEProm .

Re: Comment faire l'automatisme d'un ascenseur

Posté : 06 mai 2025, 23:38
par patrice_b
C2Vues-BricoTrain a écrit : 06 mai 2025, 20:55 J'arrive avec la fanfare...
:hhhaaaa: :hhhaaaa:

Re: Comment faire l'automatisme d'un ascenseur

Posté : 07 mai 2025, 05:00
par likiki
herwat a écrit : 06 mai 2025, 23:09
likiki a écrit : 06 mai 2025, 16:59

Prochaine étape, sauvegarder les niveaux dans la mémoire EEPROM (non volatile).

:a_suivre:
ça, c'est du gâteau !
Si ça t'intéresse : ici il explique très bien l'emploi de la bibliothèque EEProm .
:merciiii: Hervé

Re: Comment faire l'automatisme d'un ascenseur

Posté : 10 mai 2025, 18:47
par patrice_b
ohhhhh le patron, c'est devenu ..... le nouveau pape ???

:hhhaaaa:

Re: Comment faire l'automatisme d'un ascenseur

Posté : 10 mai 2025, 19:22
par herwat
Hummmm, va falloir s'y faire ! ! ! :hhhaaaa: :hhhaaaa: :hhhaaaa: