Arduino & autres: de l'informatique dans nos motos.

Modifications et questions mécaniques (sauf pannes !)

Modérateur: Equipe des modérateurs

Règles du forum
Avant de poster un nouveau message, avez vous lu "les indispensables de la base de connaissance" ??
C'est ici viewtopic.php?f=26&t=11854

Arduino & autres: de l'informatique dans nos motos.

Messagede Spocky35 le 17 Nov 2012 16:49

Salut! J'ouvre le sujet car le besoin s'en est fait sentir.
Le sujet sur la mise au point d'un manchon variable en fonction du régime moteur nous a entrainé sur des questions relatives à l'utilisation de carte à microcontroleur, notamment l'Arduino qui offre des facilités d'utilisation pour ceux qui, comme moi, n'ont pas de base. Le sujet en question est ici viewtopic.php?f=26&t=18124&st=0&sk=t&sd=a&start=45
Ce sujet porte en principe sur la boite à air et son manchon, mais a considérablement dévié du fait de la nécessité de trouver de quoi piloter nos "inventions" par un système électronique.
Le sujet initial comporte donc autant de messages portant sur la programmation de cette carte que sur le dispositif "moteur" lui même.Si nos modos en ont la possibilité, il serait "top" de replacer ces messages dans le présent sujet dédié.

On a bien travaillé car l'objectif a été atteint: piloter un servo moteur en fonction du régime moteur, et l'étude du manchon variable suis son cours..
[video]http://www.dailymotion.com/video/xuyzs0_servo-asservi-au-regime-moteur-125-tdr_auto?start=1#.UKeihWclImA[/video]

D'autres exploitations sont possibles à partir de ces cartes, on en parle ici! :wink:
ImageImageImageImageImage
Avatar de l’utilisateur
Spocky35
Modérateur
 
Messages: 6784
Inscription: 20 Mar 2011 17:00
Localisation: Environs de Rennes
Motos: TDR 5AE, DTR 3NC, TZR 4FL

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede PHILARTIS le 17 Nov 2012 17:30

Très bonne initiative ton topic - d'autant que as découvert l'Arduino il y a très peu de temps de cela (tu es le mieux placé pour nous en parler).
Chapeau à toi pour .... tout !

Tu m'a fait découvrir l'Arduino et ses innombrables possibilités, mais le coté programmation est encore obscur à mes yeux ..

Alors, pour commencer à tâter de l'Arduino on fait quoi - on commence par acheter une UNO et on suit à la lettre ce post ?
Avatar de l’utilisateur
PHILARTIS
 
Messages: 5094
Inscription: 06 Oct 2007 10:09
Localisation: Blaye
Motos: DTREX

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede lilu le 17 Nov 2012 18:24

très franchement je pense que ce travail qui te revient bien sur :wink: est a complété avec les utilisateurs(et le tuto) de cdi ignitech DC-CDI-P mais ne pourra être banalisé compte tenue de l'investissement cotés matérielles et connaissances a faire.

avec tous ça le résultat au final est a prendre en considération.
surement apprécié par les initiés parce source d'infos .
lilu :-)

Image
lilu
 
Messages: 582
Inscription: 26 Déc 2010 13:13
Localisation: essonne
Motos: dtx

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede Spocky35 le 17 Nov 2012 18:40

Personnellement, quand je suis dans l'écriture, j'ai l'impression que je suis en train de travailler sur un tableur: il y a des valeurs, des fonctions, des formules à installer. Une différence: on ne peut pas juste remplir une cellule comme on le ferait dans un tableur, il faut souvent "déclarer" qu'on passera par l'utilisation de cette valeur en lui donnant un nom.
Mais pour le reste, ça procède du même raisonnement.
Il y a un langage avec des bases à s'approprier.
J'ai visité principalement deux sites :
- http://arduino.cc/fr/Main/ReferenceEtendue qui explique notamment les bases du langage simplifié pour cette carte, et la synthaxe à utiliser
- et cet autre http://www.mon-club-elec.fr/pmwiki_mon_ ... Programmes qui, sur cette page, liste de petits programmes qui sont parfaits pour comprendre et s'initier, et propose également d'autres fonctionnalités intéressantes, dont notamment le générateur de code, pratique pour écrire le début de son propre programme.

Donc pour résumer, un écueil au tout début: l'impression de lire des hyéroglyphes sans rien comprendre de ce qui écrit. Puis dans un deuxième temps, le sentiment que finalement, ce n'est pas si compliqué. Dans un troisième temps (et quand on en discute avec les pros ), on se rend compte qu'il y a pourtant des trucs pointus , mais dont on n'aura sans doute pas besoin pour nos petits montages.

Puisque je n'ai travaillé que sur un script, je vais tacher de le représenter schématiquement et d'expliquer de la manière la plus accessible les fonctions utilisées. Quand vous aurez lu ça, on sera à égalité :wink:
ImageImageImageImageImage
Avatar de l’utilisateur
Spocky35
Modérateur
 
Messages: 6784
Inscription: 20 Mar 2011 17:00
Localisation: Environs de Rennes
Motos: TDR 5AE, DTR 3NC, TZR 4FL

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede phifi le 17 Nov 2012 22:37

Je trouve que cet article est très bien fait: http://www.pobot.org/Debuter-avec-une-c ... duino.html
ImageImage
Avatar de l’utilisateur
phifi
 
Messages: 32173
Inscription: 18 Fév 2004 18:25
Localisation: 33
Motos: 240TDR 900TDM

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede Rony le 17 Nov 2012 22:42

Tu va craquer aussi ? :lol:
Image
Un 2RL ne meurt jamais !
Avatar de l’utilisateur
Rony
Modérateur
 
Messages: 7733
Inscription: 23 Jan 2009 19:22
Localisation: En montagne
Motos: TZR 2RL, Super-T 750, TRX 850, GSX-R 750, RDLC 250

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede diabolo38 le 17 Nov 2012 23:41

comencer par le debut http://arduino.cc/fr/Main/Debuter
Avatar de l’utilisateur
diabolo38
 
Messages: 2068
Inscription: 07 Juil 2011 9:20
Localisation: grenoble
Motos: 250 exc, MT-03

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede Rony le 17 Nov 2012 23:47

url++; :wink:

C'est aussi ici que j'ai pas mal appris. Par contre j'ai commandé sur ebay plutôt que chez un revendeur officiel.
Image
Un 2RL ne meurt jamais !
Avatar de l’utilisateur
Rony
Modérateur
 
Messages: 7733
Inscription: 23 Jan 2009 19:22
Localisation: En montagne
Motos: TZR 2RL, Super-T 750, TRX 850, GSX-R 750, RDLC 250

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede phifi le 18 Nov 2012 0:10

Rony a écrit:Tu va craquer aussi ? :lol:

:? ben non, car je n'ai vraiment pas assez de temps pour m'y intéresser.
ImageImage
Avatar de l’utilisateur
phifi
 
Messages: 32173
Inscription: 18 Fév 2004 18:25
Localisation: 33
Motos: 240TDR 900TDM

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede Spocky35 le 18 Nov 2012 21:59

Concernant le programme de gestion d'un servo-moteur dans le cadre de la mise au point d'un manchon variable sur BAA...

Je voudrais disposer d'une possibilité de paramétrer une courbe avec des points d'inflexion, à l'image de ce que nous avons dans le soft de l'Ignitec pour l'avance ou la valve. Voici l'idée :
Image

En rouge, c'est ce que me donne le programme actuel (à cela près que la gouverne du servo a un mouvement circulaire, mais faisons simple pour la compréhension): une variation linéaire, proportionnelle au régime dans la fourchette de valeurs spécifiées.
En bleu, ce dont j'aimerais disposer afin de choisir la courbe d'ouverture du manchon aux différents régime, d'une manière non-linéaire.
J'ai modifié le programme déjà testé (effacement de lignes inutiles et quelques simplifications)( fichier original ici http://d34.e-loader.net/8TW8mUW8Wd.ino)

Ajouté:
// paramétrage courbe de débattement servo

int regime1=0 ; // régime au 1er point d'inflexion de la courbe
int angle1=0 ; // angle atteint à regime1
int regime2=0 ; // régime au 2nd point d'inflexion de la courbe
int angle2=0 ; // angle atteint à regime2

et modifications dans le loop:
void loop(){ // debut de la fonction loop()
mesure_n3= mesure_n2;
mesure_n2 = mesure_n1;
mesure_n1 =mesure_n;
mesure_n = pulseIn (tacho, HIGH, 600000);

if (mesure_n > 8000) moy = 20000 ; // règle le cas de l'absence d'impulsion
else if (mesure_n <= 8000) moy= (mesure_n3 + mesure_n2 + mesure_n1 + mesure_n)/4; // effectue une moyenne sur 4 mesures

unsigned long rpm=30000000/moy;

if( rpm < 3750 ) rpm=3750; // fixe la limite basse de régime
else if ( rpm >12000) rpm = 3700; // règle le problème d'une absence d'impulsion (moteur arrêté)

//**** définition de la forme de la courbe de débattement***//

if (rpm <regime1) angle_servo=map( rpm,3700,regime1,POS_MIN,angle1); // définit la courbe de débattement jusqu'au 1er point d'inflexion
else if (regime1 <= rpm && rpm< regime2) angle_servo=map(rpm,regime1,regime2,angle1,angle2) ; // définit la courbe de débattement entre le 1er et le second point d'inflexion
else if (regime2 <= rpm ) angle_servo=map(rpm,regime2,10000,angle2,POS_MAX); // définit la courbe de débattement entre le 2nd point d'inflexion et le maxi

...
}

... Pas encore testé avec la carte. Si je ne me suis pas trompé, en donnant une valeur chiffrée à "regime1, angle1, regime2, angle2", je doit pouvoir obtenir une courbe à 4 segments (en comptant la plage < 10000 rpm)
Pour obtenir la courbe du diagramme au-dessus, je rentre dans l'ordre 5500, 30, 8000, et 70, et c'est bon.

L'avis des spécialistes SVP: ça marche (même si c'est peut-être "lourd" au yeux d'un pro), ou il y du bug là-dedans?
ImageImageImageImageImage
Avatar de l’utilisateur
Spocky35
Modérateur
 
Messages: 6784
Inscription: 20 Mar 2011 17:00
Localisation: Environs de Rennes
Motos: TDR 5AE, DTR 3NC, TZR 4FL

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede Spocky35 le 19 Nov 2012 0:26

Testé: ça marche ! :dance:
ImageImageImageImageImage
Avatar de l’utilisateur
Spocky35
Modérateur
 
Messages: 6784
Inscription: 20 Mar 2011 17:00
Localisation: Environs de Rennes
Motos: TDR 5AE, DTR 3NC, TZR 4FL

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede diabolo38 le 19 Nov 2012 10:28

Spocky35 a écrit:Testé: ça marche ! :dance:

Pas de raison que cela marche pas
tu peu simplifié tes if/else en ordonant les places (il ya des condtion pas necessaire )
if( rpm < regime1) {
}
else if(rpm <regime2){
}
...
else{
//denriere plage
}
la facon elegante de codé cela c'est avec un tableau (ou tablau de structure)
ce qui ne lilmites pas le nombre de point et evite des conditon if/else complexe

ex
Code: Tout sélectionner
//dans la partie principal
// chaque couple de point du tabelau definit en 1 le regime superieur de la plage , en 2 l' angle assoicé
// enter deux point n et n-1 angle est l'interpo lineaire entre   angle[n-1] angle[n]
int MapingRegime[]={
0,      POS_MIN, // 0 simplifie la getsion du cas 1ere plage , point precedent
3700,  POS_MIN,
5000,
....
13000, POS_MAX // le dernier regiel doit eter tres grand pour que la conditon soit toujours verifié
}
#define REGIME_LEN sizeof(MapingRegime)/sizeof(MapingRegime[0]) // nb d'element du tableu

//dans loop
for(i=2; i< REGIME_LEN ; i+=2)// on comence a 2 car  la borne 0 est la que pour la logique "point precedent"
{
   if( regime<=MapingRegime[i]){
       // map regime entre angle point precedent point courant
       angle=map( rpm,  MapingRegime[i-2], MapingRegime[i], MapingRegime[i-1], MapingRegime[i+1]);
       break; // inutile de cherché plus loins on a trouvé
   }
}

la structure permet de groupé "le couple angle+regime" en une "entité" et assigné des nom et type different a regime et angle.
dans l'exemple ci dessus on joue avec des indince de tableau pour accédé a ces derniers ca parle pas bcp
et on vas de 2 en 2 et les type sont forcement les meme .

Code: Tout sélectionner
typedef struct range_tag{
   unint16_t regime;
   uint8_t angle;
}plage_t;

plage_t MapingRegime[]={
{0, POS_MIN},
{0, POS_MIN},
...
{.angle=POS_MAX,  .regime=13000}
// forme d'init en speficiant le nom ce qui evite tout risque d'erreur si la structure evolue (l'orde na plus d'importance)aussi
}

for(i=1; i< REGIME_LEN ; i++)// on comence a 1 car  la borne 0 est la que pour la logique "poit precedent"
{
   if( rpm<=MapingRegime[i].regime){
     angle=map( rpm,   MapingRegime[i-1].regime, , MapingRegime[i].regime, MapingRegime[i-1].angle, MapingRegime[i1.angle);
... etc


code compilé sous arduino (non verifé avec simulateur il n'aime pas les structure)
j'ai luté avec arduino pour comprende coment passé une structure en argument de fonction il n'ya que la facon a l'ancienne !
il n'aime pas les typedef struct comme argument (la version cpp compilé avec avr gcc est ok !?)

Code: Tout sélectionner
#include <inttypes.h>

typedef struct  table_tag{
    uint16_t rpm ;
    uint8_t  angle;
} table_t;

void setup(){
  Serial.begin(9600);
}

// La table par defaut
table_t Table1[]={
//    rpm   , angle
    {0      , 0  },
    {3750   , 0  },
    {5500   , 30 },
    {7500   , 80 },
    {12000  , 180},
    {0xFFFF  ,180} // evite le bug

};
// une table alternative (plus de point)  par exemple mise en service par un bouton
table_t Table2[]={
//    rpm   , angle
    {0      , 0  },
    {2000   , 0  },
    {3750   , 10 },
    {5500   , 60 },
    {7500   , 90 },
    {9000   , 100},
    {12000  , 180},
    {0xFFFF  ,180} // evite le bug
};

// attention si la table ne contient aucun element rpm > rpm bug (boucle infini) garantie!
uint8_t rpm_to_angle_lpm(uint16_t rpm, struct table_tag Table[]){
uint8_t angle;
uint8_t i=0;
  while( rpm <= Table[i].rpm  ){
    i++;
  }
  //si 1'entree de la table et al 1ere on restrain a l'angle de cette entrée
  if( i==0 ){
    angle = Table[i].angle;
  }
  else{
    angle= map( rpm, Table[i-1].rpm,Table[i].rpm, Table[i-1].angle,Table[i].angle);
  }
  return angle;


int8_t selection_courbe=0;

void loop(){
table_t *pTable;
uint8_t angle;
uint16_t rpm;

  pTable = selection_courbe ? Table2 : Table1; // eq if( selection_courbe!=0 ) courbe = Table2  else  courbe = Table1 
  for( rpm = 1500 ; rpm <12000; rpm+=500 ){
    angle = rpm_to_angle_lpm( rpm, pTable);
    Serial.print(rpm);
    Serial.print(" ");
    Serial.println(angle);
  }
  selection_courbe =  (selection_courbe+1)%2; // pour le test on alterne courbe 0 1
}

je veux pas dire mais les tools arduino sont loin d'etre mature ...
Avatar de l’utilisateur
diabolo38
 
Messages: 2068
Inscription: 07 Juil 2011 9:20
Localisation: grenoble
Motos: 250 exc, MT-03

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede Spocky35 le 19 Nov 2012 23:18

:shock: Voilà encore une palanquée de termes et syntaxes que je ne connais pas :crap: (mais j'ai acheté un bouquin sur le langage C...).
Pour la question de la courbe à deux points d'inflexion, je vais garder ce que j'ai pondu, mais c'est vrai que pour davantage de valeurs, ces structure de tableaux sont sans doute plus adaptées.

Diabolo, il faudrait que tu écrives un code pour permettre de récupérer la mesure du régime en utilisant autre chose que le signal tacho de l'ignitec, pour ceux qui ont le CDI stock, en utilisant les entrées analogiques, et sans doute " analogRead(broche_analogique) "
Dernière édition par Spocky35 le 19 Nov 2012 23:27, édité 2 fois.
ImageImageImageImageImage
Avatar de l’utilisateur
Spocky35
Modérateur
 
Messages: 6784
Inscription: 20 Mar 2011 17:00
Localisation: Environs de Rennes
Motos: TDR 5AE, DTR 3NC, TZR 4FL

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede Rony le 19 Nov 2012 23:21

J'ai jamais compris les structures non plus (et les pointeurs aussi). :mrgreen:
Image
Un 2RL ne meurt jamais !
Avatar de l’utilisateur
Rony
Modérateur
 
Messages: 7733
Inscription: 23 Jan 2009 19:22
Localisation: En montagne
Motos: TZR 2RL, Super-T 750, TRX 850, GSX-R 750, RDLC 250

Re: Arduino & autres: de l'informatique dans nos motos.

Messagede diabolo38 le 20 Nov 2012 2:45

Rony a écrit:J'ai jamais compris les structures non plus (et les pointeurs aussi). :mrgreen:

arreter tout de suite .. c'est la base :-\" :mrgreen:

les structure servent a agregé des information a un element plus compact les regroupant tous (que l'on peu passé facilement de fonction en fonction sans trimbaler 50 variables)

les pointeur on a juste pas le choix des qu'il faut structuré un peu le code et que les fonction appelé puisse modifié autre chose que des variables globales en retour

En c++ (si pas limité) vous pouver utilisee les references "& ref_anmes" qui sont "des pointeur deguisé" comme les "var du pascal" pour ceux qui ont connu.
c'est un pointeur mais on s'en souci pas ca evite de manioulé des * et & ca se fait tout seul.
ex
void f(int a , int &b)
a peu etre modife dans f mais sans aucun impact sur ce qu'été a pour l'appelant
int & b signifi la reference de b un entier donc toute modif de b dans f est la modif de ce que b reference pour l'appelant

ex
void add(int a, int b,int c ){
c= a+b; // celui qui ecrit ca a rien compris !
}

a=1;b=1;c=1
add( a,b,c) => a b c rien a changé

void add(int a, int b,int &c )
{
c= a+b;
}
a=1;b=1;c=1;
add( a,b,c) => a=1 b =1 c=2

Pour les CDI stock le analog read via le potard de vavle ca convient pas
car la vavle commence a ouvrir des 3000 et a 6000 c'est déja preque 100% ouvert (j'ai verifé sur mon DTR avec condo que ca fonctioné bien ) donc apres >6000 je vois pas comment .

Reste tout e qui est fonction des tour et c'est pas ce qui manque
-le circuit eclairage (DTR) j'ai fait qq essai mais pas 100% concluant et c'est pas compat DTX/RE :boohoo:
-pour la bobine allumage quasi sur c'est pas bon #-o :108:
-Pour le capteur c'est jouable si pulse est pas trop court... :-k

Mais il faut que ej reagdre ca de plsu pret niveau elctionique et aprés testé avec un arduino sur un becane avec cdi origine. (j'ai pas d'arduino)

c'est la periode du signal qu'on veux donc pas de blem je vais ecrire/veifié le truc demain c'est hyper simple mais la dodo :crap:
Avatar de l’utilisateur
diabolo38
 
Messages: 2068
Inscription: 07 Juil 2011 9:20
Localisation: grenoble
Motos: 250 exc, MT-03

Suivante

Retourner vers Base de connaissances et améliorations

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 52 invités