Thymio hélicoptère

Hélicoptère simple

Cette construction utilise les deux roues du Thymio II pour actionner deux hélices latérales de type hélicoptère:

runningheli.jpg

On peut actionner et régler la vitesse des hélices dans le mode de base violet.
L'aspect intéressant de cette contruction est que les deux hélices sont actionnées séparément et que ce véhicule est sensé voler, donc bouger dans toutes les directions et s'incliner. En utilisant l'accéléromètre et d'autres capteurs on peut donc piloter les hélices de façon plus intélligente et ludique, par exemple:

  • Si l'hélico s'incline latéralement, ce qu'on peut mesurer avec l'accéléromètre, on peut faire tourner une hélice (la plus basse) plus vite que l'autre, afin de "compenser"
  • Si l'hélico s'incline vers l'avant, on peut faire tourner plus vite les deux hélices
  • On peut arrêter les hélices quand il est au sol, en utilisant les capteurs de sol
  • On peut utiliser le son pour simuler le bruit d'hélico (cette option est déconseillée pour les parents :-)

Voici quelques détails de la construction, qui est dans l'ensemble assez simple.

La structure sans Thymio II, juste pour pouvoir mieux l'observer:

structure.jpg

Un détail sur la transmission entre les roues et l'hélice, qui est faite en deux étapes: d'abord une multiplication, car les vitesses des roues sont trop faibles, puis le passage de horizontal à vertical.

mechanism.jpg

Pour faire tourner les hélices seulement quand l'hélicoptère d'incline vers l'avant, voici un code minimal:

onevent acc                         # quand les accéléromètres sont lus
    if acc[1]<-3 then               # on vérifie que l'accéléromètre qui mesure l'inclinaison avant du thymio mesure des choses (en négatif)
        motor.left.target=-acc[1]*40  # on multiplie l'accélération par 40 pour avoir la vitesse des roues
        motor.right.target=-acc[1]*40
    else                            # si on ne mesure rien, on met à zéro
         motor.left.target=0
        motor.right.target=0
    end

Hélicoptère design…

Ce deuxième modèle suit exactement le même principe que le premier mais se base uniquement sur des pièces de la boite de construction LEGO Technic 8258. Le résultat est assez "design"…:

moving-heli.jpg
full-view-heli.jpg
front-view-heli.jpg
cabine-heli.jpg
bottom-heli.jpg

Cet hélicoptère peut se programmer comme le précédent. En faisant de la programmation un peu plus avancée et du fil de pêche on peut obtenir…. un décollage comme celui-ci:-)


Attention: Thymio sert uniquement à animer le bricolage. Le décollage est réalisé avec un trucage. Thymio n'a pas la puissance nécessaire pour voler et les pièces Lego ne sont ni aérodynamiques ni assez robustes pour créer un hélicoptère fonctionnel.

Voici le code qui a servi pour cette démonstration:

var status = 1
var rampe_status = 0
var vitesse = 0

onevent temperature
   if status==1 then
      call leds.top(0,0,0)
      call leds.temperature(0,0)
      call leds.prox.v(0,0)
      call leds.bottom.left(0,0,0)
      call leds.bottom.right(0,0,0)
      call leds.circle(0,0,0,0,0,0,0,0)
      status = 2
   else if status==2 then
      call leds.top(0,32,0)
      status = 3
   else if status==3 then
      call leds.top(0,0,0)
      status = 4
   else if status==4 then
      call leds.prox.h(1,0,0,0,0,0,0,0)
      call leds.bottom.left(32,0,0)
      call leds.bottom.right(0,0,0)
      status = 5
   else if status==5 then
      call leds.prox.h(0,0,0,0,0,1,0,0)
      call leds.bottom.left(0,0,0)
      call leds.bottom.right(32,0,0)
      status = 6
   else if status==6 then
      call leds.prox.h(1,0,0,0,0,0,0,0)
      call leds.bottom.left(32,0,0)
      call leds.bottom.right(0,0,0)
      rampe_status=1   # on lance une rampe de vitesse croissante
      status = 7
   else if status==7 then  #depuis ici (status 7 et 8) on clignote droite-gauche
      call leds.prox.h(0,0,0,0,0,1,0,0)
      call leds.bottom.left(0,0,0)
      call leds.bottom.right(32,0,0)
      status = 8
   else if status==8 then
      call leds.prox.h(1,0,0,0,0,0,0,0)
      call leds.bottom.left(32,0,0)
      call leds.bottom.right(0,0,0)
      status = 7
   end end end end end end end end 

onevent buttons       
   when button.center == 1 do
      status = 0
      rampe_status=-1
      call leds.top(0,0,0)
      call leds.temperature(0,0)
      call leds.prox.v(0,0)
      call leds.bottom.left(0,0,0)
      call leds.bottom.right(0,0,0)
         call leds.circle(0,0,0,0,0,0,0,0)
   end
   when button.forward== 1 do
           call leds.circle(31,31,31,31,31,31,31,31)
        status = 1
   end

onevent prox  #juste pour faire cela toutes les 100ms
   if rampe_status==1 then   #rampe de vitesse croissante
      vitesse = vitesse + 10
      motor.left.target  = vitesse
      motor.right.target = vitesse
      if vitesse > 600 then
         rampe_status=0
      end
   end

   if rampe_status==-1 then 
          vitesse = vitesse - 10    #rampe de vitesse décroissante
       if vitesse <0 then
         rampe_status=0
      else
        motor.left.target = vitesse
        motor.right.target = vitesse
      end
   end
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License