Auteur Sujet: rampe accélération / décélération  (Lu 39793 fois)

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #15 le: février 15, 2020, 02:36:12 pm »
"arret" est defini comme ceci:

#define Maxetapes 4      //definition du nombre d'etape
char etapes[Maxetapes];// variables des etapes dans tableau
enum { arret, circulation, occupation, liberation };//liste des etapes

void setup(){.............}

void loop () {
for (int i = 0; i < Maxetapes; i++) {
    etapes = 0;
  }
etapes [arret] = 1;
}

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : Re : rampe accélération / décélération
« Réponse #16 le: février 15, 2020, 04:36:33 pm »
"arret" est defini comme ceci:

#define Maxetapes 4      //definition du nombre d'etape
char etapes[Maxetapes];// variables des etapes dans tableau
enum { arret, circulation, occupation, liberation };//liste des etapes

void setup(){.............}

void loop () {
for (int i = 0; i < Maxetapes; i++) {
    etapes [i] = 0;
  }
etapes [arret] = 1;
}

Ok,

Le compilateur vous explique que même si un enum se ramène de manière ultime à un entier, ça n'est pas suffisant pour considérer que le print qui affiche un entier est éligible.

Ensuite, je comprends ce que vous essayez de faire mais je ne pense pas que l'utilisation de tableaux pour mettre en œuvre une machine à états aboutisse au code le plus lisible qu'il soit.

PS: utilisez la balise code (le # dans la barre de bouton), j'ai eu un ascenseur émotionnel en lisant votre bout de code dont le [i] avait sauté car interprété comme la balise d'ouverture de texte en italique en bbcode
« Modifié: février 15, 2020, 04:38:10 pm par Jean-Luc »
Cordialement

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #17 le: février 16, 2020, 05:35:03 pm »
OK, effectivement j'ai trouvé une solution plus simple et plus compréhensible;
Mon probléme est que je suis "possédé" par ma formation et je suis tenté d'utiliser le grafcet à toute les sauces

Merci pour votre aide précieuse.

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #18 le: février 16, 2020, 05:37:50 pm »
J'avais fait un article sur ce type de problème : https://www.locoduino.org/spip.php?article25

Peut être que ça vous aidera
Cordialement

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #19 le: février 17, 2020, 11:56:53 am »
ok je regarde cela; merci beaucoup

Je reviens sur ma rampe d'accélération/décélération;
Je tiens a te remercier Tony04, cela fonctionne trés bien tel que; j'ai néanmions un petit soucis:
je souhaite pouvoir asservir ces rampes (accélération/décélération) à 1 commande tout ou rien
autrement dit avec un interrupteur ou un capteur arreter et redémarrer la loco toujours avec les rampes jusqu'au point de consigne initiale;
Je n'y arrive pas; apres plusieurs essais, soit j'arrete "brusquement", soit je n'arrete rien....
 
Aurais tu une idee sur le sujet?
merci d'avance

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1714
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #20 le: février 17, 2020, 01:01:41 pm »
Ben, il faut faire une fonction linéaire du temps pour calculer le rapport cyclique de PWM

Si dateInitiale est la date de démarrage de l'accélération en millisecondes, que acceleration est ce que le nom de la variable dit en augmentation/diminution de PWM par seconde, alors la PWM à une date obtenue par millis() est

pwm = constrain(((millis() - dateInitiale) * acceleration) / 1000, 0, 255);

(j'ai pas testé)

acceleration peut être positive ou négative (décélération donc) voir même variable au cours du temps

Si vous ne partez pas à 0 il faudra mettre une fonction affine et ajouter votre PWM initiale à l'expression ci-dessus (dans le premier argument de constrain)

constrain permet de garder la valeur entre 0 et 255
« Modifié: février 17, 2020, 06:08:54 pm par Jean-Luc »
Cordialement

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #21 le: février 17, 2020, 01:50:59 pm »
Bonjour Patrick ,

je n'ai pas beaucoup de temps en ce moment mais je te livre un sketch qui permet de commander 2 sorties PWM avec potar et inter. Attention, le sketch n'est pas un modèle du genre car vite fait lors de mon passage dans un musée du jouet qui m'a demandé une démo de ce que peut faire un Arduino, mais il devrait te permettre de sortir ce dont tu as besoin et l'adapter au premier sketch. Sinon je vois cela un peu plus tard.

Cordialement
Antoine

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #22 le: février 17, 2020, 06:07:20 pm »
Merci, j'etudie ca et je reviens vers vous

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #23 le: février 17, 2020, 06:37:55 pm »
Ho là; je suis un peu perdu, tres  loin de ce niveau !!
Serait'il possible  avec 1 seul moteur et 1 seul sens de marche pour commencer; sinon c'est l'indigestion........;
Pour memoire j'ai pris l'exemple  de rampe avec la fonction "map" qui fonctionne trés bien; je pense qu'il  serait bon de repartir de cet exemple........

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #24 le: février 17, 2020, 06:49:25 pm »
Bah oui, il faut commencer par les bases qu'on s'est évertué à mettre sous forme d'articles sur http://www.locoduino.org. Ca vous prendra un peu de temps à digérer  ::)
Cordialement,
Dominique

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Re : rampe accélération / décélération
« Réponse #25 le: février 17, 2020, 08:38:58 pm »
Serait'il possible  avec 1 seul moteur et 1 seul sens de marche pour commencer; sinon c'est l'indigestion........;
Pour memoire j'ai pris l'exemple  de rampe avec la fonction "map" qui fonctionne trés bien; je pense qu'il  serait bon de repartir de cet exemple........

Ok, je m'y penche dès que le temps me le permet, promis.
Antoine

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #26 le: février 17, 2020, 08:56:28 pm »
Sans l'avoir testé, je pense que si tu remplaces la ligne de lecture du potar par:

//----------------------------------------------
// est-ce que l'inter est sur marche ?
//----------------------------------------------
if(digitalRead(inter) == LOW) { // on a basculé l'inter sur marche
// lecture et conversion de la valeur de ton potar
vitesse_demande = map(analogRead(potar), 0, 1023, 0, 255); // c'est la ligne d'origine
}
else {
vitesse_demande = 0;
}

cela devrait le faire, essaye et tiens moi au courant STP

Antoine

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #27 le: février 18, 2020, 09:14:14 am »
Bonjour Antoine

formidable et en plus d'une simplicité remarquable; j'ai l'esprit trop 'tordu' :je cherche bien souvent des solutions compliquées alors que la solution tient en 2 lignes !!

Merci a toi et a bientot
Patrick

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #28 le: février 18, 2020, 04:11:16 pm »
RE,

comme j'avais un peu de temps à perdre  :) j'ai essayé d'anticiper tes questions sur la rampe d'accélération et me suis dit que tôt ou tard tu voudrais inverser le sens de marche.

Voici comment je fais chez moi (PJ)

Par contre je n'ai pas testé le sketch (mais pas d'erreur à la compilation) et te demanderais de me tenir informé, normalement il y a suffisamment de commentaires pour comprendre le principe.

Bonne fin d'après-midi
Antoine

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : rampe accélération / décélération
« Réponse #29 le: mars 02, 2020, 04:00:22 pm »
Bonjour,
Merci Antoine, effectivement j'y suis confronté, mais ce sera pour un peu plus tard
En tous cas je te tiens informé de l'évolution de mon reseau.

Je suis occupé à faire l'automatisme generale du réseau: le pilotage est réalisé avec 5 ARDUINO MEGA , en gros 3 pour le cantonnement, 1 pour la signalisation et 1 pour les aiguilles.
Mon soucis est que ces cartes doivent communiquer entre elles et j'avoue que je m'y perds un peu entre le I2C, le SDI , les UARTS et les liaisons series !!!
Sachant qu'il m'est simplement nécessaire d'aller chercher des valeurs d'E/S ou variables sur d'autre cartes, j'ai prévu 1 liaison  "TX-RX" par carte ?

Merci de votre retour d'experience sur le sujet