Thymio II comme curseur de balance

Les balances à curseur mobile fonctionnent sur la base de deux leviers dont un est à longueur variable:

67265_proportions_lg.gif

Le Thymio II utilisé comme curseur peut savoir, grâce à son accéléromètre, l'inclinaison de la barre et se positionner correctement, par exemple avec un système à crémaillère. Voici un exemple de réalisation:

balance-desequilibree.jpg
balance-global2.jpg

La balance a un support central et un levier équilibré. Malgré la différence de longueur entre gauche et droite, les pièces supplémentaires noires sur la droite permettent d'équilibrer le levier.
Sur la droite se trouve une nacelle qui permet de poser un objet, ici une voiture en bois. La nacelle a un poids de 47 grammes et est placée à une distance de 24 unités du pivot de la balance. Sur le côté gauche se trouve le contrepoids formé par le Thymio. Son poids est de 317g. Ce contrepoids peut bouger le long du levier grâce à une crémaillère et la motorisation d'une roue du Thymio II. Le détail de cette motorisation est donné ici:

detail-balance.jpg

Le Thymio II dispose d'un accéléromètre qui lui permet de mesurer son inclinaison par rapport à la gravité. Il peut donc savoir si le levier est horizontal ou pas, et si pas, dans quelle direction il penche. Il est donc facile d'écrire un programme qui cherche le point d'équilibre.

Voici un exemple de programme qui lance la recherche une fois pesé le bouton du milieu, puis affiche vert quand le point d'équilibre est trouvé :

var mesure         # indique si on est en mode mesure ou pas
var vieuxacc0      # ici on sauvegarde quelques vieilles mesures de l'accéléromètre
var vieuxacc1
var vieuxacc2
var vieuxacc3
var sumacc         # ici on somme les vieilles mesures de l'accéléromètre
mesure = 0

onevent buttons 
  when  button.center==1 do   # on lance/stoppe la mesure avec le bouton du milieu
      if mesure == 0 then 
          mesure = 1
      call leds.top(255,0,0)      # on affiche du rouge pour dire qu'on mesure
      else
          mesure = 0
      end
  end

onevent acc
  if mesure==1 then               # on fait des choses seulement si on mesure
      vieuxacc0 = vieuxacc1
      vieuxacc1 = vieuxacc2
      vieuxacc2 = vieuxacc3
      vieuxacc3 = acc[1]-2        # ici on prend la dernière mesure. Le "2" est le point d'équilibre, car le Thymio II n'est pas horizontal lorsque la balance est équilibrée.
      sumacc = vieuxacc0+vieuxacc1+vieuxacc2+vieuxacc3
      motor.left.target=-60*sumacc  # on avance avec le moteur en fonction de combien on est incliné
  else
      motor.left.target=0
  end

  if sumacc==0 then               # on stoppe si toutes les mesures donnent zéro
      mesure=0
      call leds.top(0,255,0)      # vert
  end

Il est possible de rendre ce code plus compact et plus efficace, en utilisant un tampon circulaire :

var accTampon[4] = 0,0,0,0
var accTamponPos = 0

...

accTampon[accTamponPos] = acc[1]-2
accTamponPos = (accTamponPos + 1) % 4
sumacc = accTampon[0] + accTampon[1] + accTampon[2] + accTampon[3]

Voici comment fonctionne la balance :

Dans ce cas précis la voiture verte pèse 191g et le Thymio II trouve l'équilibre à environ 19 unités du pivot. Je vous laisse faire les calculs ;-)

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License