Code pour capteursur servo à balayage
#1
Posté 19 mars 2013 - 07:17
J'aimerais votre aide pour comprendre quel code faut t'il pour un capteur US monté sur un servomoteur ( capteur a balayage ).
J'aimerais que vous m'aidiez a ecrire un code qui lit les valeurs droites et gauche et qui " choisi " automatiquement la plus faible afin de perrmetre, plus tard, a un robot de se diriger.
Voila, en esperant que c'est pas trop compliquer
PS: pour ce qui est de la parti servo je pense pouvoir gerer mais c'est surtout au niveau de la comparaison des deux distances.
Merci bien
#2
Posté 19 mars 2013 - 07:43
J'aimerais que vous m'aidiez a ecrire un code qui lit les valeurs droites et gauche et qui " choisi " automatiquement la plus faible afin de perrmetre, plus tard, a un robot de se diriger.
Salut,
Déjà, tu as une boucle qui va te permettre de déplacer ton capteur.
Tu initialises une variable "distanceMin" avec un nombre très très grand, ainsi qu'une variable "angle".
A chaque nouvelle position de ton servo, tu lance une acquisition de distance. Si la distance est inférieur à ta variable distanceMin, alors tu met à jour cette variable avec la nouvelle distance, et tu stockes dans la variable "angle" l'angle de ton servo.
Ainsi, tu ne stockera l'angle que si la distance est plus faible que les distances précédentes.
++
Black Templar
Mon site internet : http://ferdinandpiette.com/
#3
Posté 20 mars 2013 - 01:29
Parle t-on de distance dans cette variable et si oui dans quelle unité ? Et pourquoi mettre un nombre trés grand alors qu'il sagit de la distance minimal ?
Merci
#4
Posté 20 mars 2013 - 02:06
Oui, la variable distanceMin correspond bien à une distance.Parle t-on de distance dans cette variable et si oui dans quelle unité ?
L'unité, c'est à toi de la choisir.
Si ton capteur possède une sortie analogique, tu utiliseras la fonction analogRead d'arduino pour récupérer une tension sous la forme d'une nombre entre 0 et 1024 (0 pour 0V, 1023 pour 5V). Cette tension est lié à la distance réelle. Pour avoir cette relation, il faut regarder dans la datasheet du capteur
Car si tu initialise avec un nombre très petit, ce nombre ne sera jamais mis à jour.Et pourquoi mettre un nombre trés grand alors qu'il sagit de la distance minimal ?
Imaginons, ton capteur mesure des distances (des tensions plutôt) pour 3 positions différentes. (disons par exemple 0 ; 90 et 180°)
Tu récupère ces distances grâce à analogRead. Tu obtiendras donc des nombres entre 0 et 1024.
Si tu initialises distanceMin à 0, voici ce qu'il se passe.
* Tu fais ta première mesure pour 0° et tu obtiens 1000.
distanceMin (0) < 1000, tu ne fais rien
* Tu fais ta seconde mesure pour 90° et tu obtiens 300.
distanceMin (0) < 300, tu ne fais rien
* Tu fais ta seconde mesure pour 180° et tu obtiens 500.
distanceMin (0) < 500, tu ne fais rien
Après avoir balayer, ta variable distanceMin va valoir 0 alors que la plus petite mesure est 300... ce n'est pas ce que l'on veut.
Par contre, si tu initialises distanceMin avec un grand nombre (ici 1024 car la distance mesuré ne peut pas dépasser ce nombre), voici de qu'il se passe :
* Tu fais ta première mesure pour 0° et tu obtiens 1000.
distanceMin (1024) > 1000, tu met à jour distanceMin qui vaut maintenant 1000 et tu enregistre l'angle qui vaut 0°
* Tu fais ta seconde mesure pour 90° et tu obtiens 300.
distanceMin (1000) > 300, tu met à jour distanceMin qui vaut maintenant 300 et tu enregistre l'angle qui vaut 90°
* Tu fais ta seconde mesure pour 180° et tu obtiens 500.
distanceMin (300) < 500, tu ne fais rien
Après avoir balayer, tu as bien mémorisé la plus petite distance ainsi que l'angle de la mesure (ici 300 pour un angle de 90°)
- stephane83 aime ceci
Mon site internet : http://ferdinandpiette.com/
#5
Posté 20 mars 2013 - 03:14
Tu sais si il y a une fonction qui me permettrais de faire sa plus facilement parce que sinon, j'ai peur que sa sois un peut le bordel juste pour l'aquisition des differentes distances.
merci encore
- stephane83 aime ceci
#6
Posté 20 mars 2013 - 05:20
Tu sais si il y a une fonction qui me permettrais de faire sa plus facilement parce que sinon, j'ai peur que sa sois un peut le bordel juste pour l'aquisition des differentes distances.
Non.
Tu fais une boucle for.
ça te prend ... 10 ou 11 lignes de code si mes calculs sont bon (quelque soit le nombre de position de ton servo)
- stephane83 aime ceci
Mon site internet : http://ferdinandpiette.com/
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users