Aller au contenu


Photo
- - - - -

Code pour capteursur servo à balayage


  • Veuillez vous connecter pour répondre
5 réponses à ce sujet

#1 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 19 mars 2013 - 07:17

Bonjour a tous,

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 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

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 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 20 mars 2013 - 01:29

Ah oui, je commence a piger le truc, mais ce que je ne comprend bien au niveau de la variable " distancemin ".

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 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 20 mars 2013 - 02:06

Parle t-on de distance dans cette variable et si oui dans quelle unité ?

Oui, la variable distanceMin correspond bien à une distance.
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

Et pourquoi mettre un nombre trés grand alors qu'il sagit de la distance minimal ?

Car si tu initialise avec un nombre très petit, ce nombre ne sera jamais mis à jour.

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°)


Image IPB

Mon site internet : http://ferdinandpiette.com/


#5 Newbies

Newbies

    Membre passionné

  • Membres
  • PipPipPip
  • 487 messages
  • Gender:Male
  • Location:Paris
  • Interests:Programmation et robotique

Posté 20 mars 2013 - 03:14

Ah oui, je comprend, il faut donc que je commence a penser au code qui prendrais une mesure a ces 3 angles et garde la " meilleure ".

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 :)

#6 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

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)

Mon site internet : http://ferdinandpiette.com/





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users