Bonjour,
J'ai un problème de programmation concernant mon TIPE qui consiste en l’étude d’un ABS de moto, et je voudrais mesurer les vitesses des roues avant et arrière de la moto pour pouvoir comparer "pour de vrai", les modèles industriels et mon modèle théorique, et c’est la finalité de mon travail.
Je voudrais programmer le calcul des vitesses sur Arduino UNO, et l’envoi des valeurs de vitesses calculées sur une carte SD à l’aide de cette plaquette : https://www.sparkfun.com/products/9802
J’utilise un capteur inductif TOR par roue, qui, devant chaque disque de frein, va permettre de calculer, grâce aux trous régulièrement espacés sur les disques, la vitesse de la roue. On considère qu’on ne freine que de la roue arrière, la roue avant servant donc de référence, et permettant de calculer la vitesse de la moto par rapport au sol.
Seulement, faire clignoter une LED, ca va, mais créer un fichier texte sur une carte SD, et envoyer les données de mon programme dessus, c’est un peu plus compliqué... Il n’y a pas d’erreur de syntaxe dans mon programme, toutes les variables sont définies, les ; sont présents... Donc l’erreur vient de la manière de programmer elle même.
Voici le programme permettant seul de calculer la vitesse des roues:
// définition des variables
int capteurroueavant =8;
int capteurrouearriere = 7;
int valeurroueavant;
int valeurrouearriere;
int vitesseroueavant = 4;
int vitesserouearriere =2;
void setup() //Définition des entrées et sorties
{
pinMode(capteurroueavant, INPUT);
pinMode(capteurrouearriere, INPUT);
}
// définition des valeurs hautes et basses de ces entrées et sorties
//Définition des fonctions
void valroueavant()
//definition des valeurs hautes et basses des entrées capteur (car il y a toujours une tension résiduelle)
{ analogRead (capteurroueavant);
if (valeurroueavant <= 0.1)
{ valeurroueavant ==HIGH ;}
else { valeurroueavant ==LOW ;}
}
void valrouearriere()//definition des valeurs hautes et basses des entrées capteur (car il y a toujours une tension résiduelle)
{ analogRead (capteurrouearriere);
if (valeurroueavant <= 0.1)
{ valeurroueavant ==HIGH ;}
else {valeurroueavant ==LOW ;}
}
void vav() //vitesse roue avant
{
// définition de la vitesse roue avant (donc de la moto)
if (valeurroueavant == LOW)
{ valroueavant(); //on fait le programme de calcul de la valeur de la roue avant
delay(valeurroueavant == HIGH); // jusqu'à ce que cette valeurt change (c'est ca, ou est ce que la manière d'ecrire est fausse?)
#define temps1=(delay(valeurroueavant == LOW));
valroueavant(); //on recommence la meme chose pour voir à quel moment le capteur revient dans l'état bas
delay(valeurroueavant == HIGH);
#define temps2=(delay(valeurroueavant == HIGH));
#define vitesserroueavant=1/*angle*//(temps1+temps2);//en fonction de l'angle que fait la roue entre deux trous dans le disque de frien
}
else
{
{ valroueavant(); //on fait le programme de calcul de la valeur de la roue avant
delay(valeurroueavant == LOW); // jusqu'à ce que cette valeurt change (c'est ca, ou est ce que la manière d'ecrire est fausse?)
#define temps1=(delay(valeurroueavant == HIGH));
valroueavant(); //on recommence la meme chose pour voir à quel moment le capteur revient dans l'état bas
delay(valeurroueavant == LOW);
#define temps2=(delay(valeurroueavant == LOW));
#define vitesserroueavant=1/*angle*//(temps1+temps2);//en fonction de l'angle que fait la roue entre deux trous dans le disque de frien (pas le meme angle !!!!!!!)
}
}
}
void var() //vitesse roue arriere (construit à partir du calcul de la vitesse de roue avant)
{
// définition de la vitesse roue arriere (donc de la moto)
if (valeurrouearriere == LOW)
{ valrouearriere(); //on fait le programme de calcul de la valeur de la roue avant
delay(valeurrouearriere == HIGH); // jusqu'à ce que cette valeurt change (c'est ca, ou est ce que la manière d'ecrire est fausse?)
#define temps1=(delay(valeurrouearrier e == LOW));
valrouearriere(); //on recommence la meme chose pour voir à quel moment le capteur revient dans l'état bas
delay(valeurrouearriere == HIGH);
#define temps2=(delay(valeurrouearrier e == HIGH));
#define vitesserrouearriere=1/*angle*//(temps1+temps2);//en fonction de l'angle que fait la roue entre deux trous dans le disque de frien
}
else if (valeurrouearriere==HIGH)
{ valrouearriere(); //on fait le programme de calcul de la valeur de la roue avant
delay(valeurrouearriere == HIGH); // jusqu'à ce que cette valeurt change (c'est ca, ou est ce que la manière d'ecrire est fausse?)
#define temps1=(delay(valeurrouearrier e == LOW));
valrouearriere(); //on recommence la meme chose pour voir à quel moment le capteur revient dans l'état bas
delay(valeurrouearriere == HIGH);
#define temps2=(delay(valeurrouearrier e == HIGH));
#define vitesserrouearriere=1/*angle*//(temps1+temps2);//en fonction de l'angle que fait la roue entre deux trous dans le disque de frien
}
}
void loop()
{ valroueavant();
valrouearriere(); /*On calcule les valeurs pour initialiser ce calcul*/
// Maintenant seulement on peut commencer à calculer les vitesses des roues avant et arrière
vav();
var();
}
//fin du programme
Je compile le programme sur Arduino-> pas d'erreur de syntaxe. Comment faire pour déjà vérifier qu'il fonctionne bien? (au cas où je n'arrive pas à extraire les valeurs sur carte SD, ce qui sera la prochaine étape, je pourrais au moins présenter ceci, qui serait alors déjà fait, à l'oral des concours).
-----