Thymio lanceur

Introduction

Voici mon Travail de Maturité au gymnase intercantonal de la broye.
Notre devions trouver une utilité au Thymio II soit pour se divertir ou pour aider dans les ménages du foyer.
J'ai crée un thymio qui lance des petites balles dans un panier.

lanceur.png
lanceur.jpg

Fonctionnement

  • Mon robot lance la balle depuis trois distances différentes
  • Lorsqu-il atteint une distance, il s-arrête
  • Lorsque je passe un doigt sur un capteur, il lance la balle

Codage

Etant donné que mon travail est composé de deux robots différents, j'ai du en coder deux. Le premier a comme but de se déplacer, et le second de lancer la balle.

Robot qui se déplace:

#Code du robot 1, le robot « voiture »

var x=0 
var y=0
var z=0
var i=0
var blocker1=0
var blocker2=0
#les blockers sont là pour que le robot ne tombe pas accidentellement dans la fausse boucle.

sub STOPNOIR
while prox.ground.reflected[1]>300 do
motor.left.target=-50
motor.right.target=-43
call leds.top(32,0,32)
end
#la roue de gauche avance moins vite, donc j'ai du descendre la vitesse de la roue de droite

motor.left.target=0
motor.right.target=0
call leds.top(32,32,32)
blocker2+=1

sub AVANCEPROX
while prox.horizontal[2]==0 and blocker1==0
do 

x+=1    
if x==10 then
y+=1
x=0
#Vu que le compteur n'est pas assez grand, il faut diviser x par 10. Ce compteur compte, tant qu'il ne voit pas d'"obstacle" devant lui.

end
motor.left.target=50
motor.right.target=50
call leds.top(0,0,32)

end
call leds.top(32,32,32)    
blocker1+=1
sub RECUL
while y>0 do    

z+=1
if z==10 then
y-=1 
z=0
#Même procédure qu'avant (ligne 34), mais à l'envers. 
end
motor.left.target=-50
motor.right.target=-43
call leds.top(32,0,0)

end
sub STOPPROX
while prox.horizontal[5]==0 and prox.horizontal[6]==0 do
motor.left.target=-50
motor.right.target=-43

end
motor.left.target=0
motor.right.target=0    
call leds.circle (21,21,21,21,21,21,21,21)
onevent tap
#Le robot commence son trajet ici, si on le "tap"
callsub AVANCEPROX

for i in 0:32000 do 
motor.left.target=0
motor.right.target=0    
end

callsub RECUL
timer.period[0]=7000
motor.left.target=0    
motor.right.target=0
#Le robot s'arrête pendant 5 secondes à l'endroit duquel il était parti. 
onevent timer0
if    blocker2==0 then
callsub STOPNOIR
end
#Le robot s'avance jusqu'à ce qu'il voie une ligne noire.    
motor.left.target=0
motor.right.target=0

timer.period[1] = 7000
onevent timer1
#Le robot s'arrête pendant 5 secondes sur cette ligne    

callsub STOPPROX

motor.left.target=0
motor.right.target=0
call leds.top(0,32,32)
#Le robot s'arrête "pour l'infinité" tant qu'il voit un obstacle derrière.

Robot qui lance la balle:

var lancer = 0
var puissance=0
#"lancer" et "compteur" sont là pour que le robot ne retombe pas dans une boucle précédente.

while  compteur == 0 do
    if  prox.ground.reflected[0]>200 then
        compteur=1
    end
end

timer.period[0]=1000

onevent timer0

    if       lancer == 0 then
        motor.right.target = -(300+puissance*100)
        lancer=1
# Le robot lance la balle, et plus la puissance est grande, plus loin il va tirer.        
    elseif lancer==1 then
        motor.right.target = (250+puissance*100)
        lancer=2
#Le robot ramène le "bras lanceur" en bas, avec la meme vitesse avec laquelle il l'a monté
    elseif lancer==2 then 
    motor.right.target=0
        lancer=3
#La roue arrête le "bras lanceur" à sa place de départ    
        compteur=2
    if  puissance==2 then
            puissance=0
        else 
        puissance += 1
        end
    end
#la puissance monte après chaque passage, et se remet à 0 quand elle a fait 3 tours

while  compteur == 2 do
    if  prox.ground.reflected[0]>200 then
        compteur=3
        lancer=0
        timer.period[0]=1500
    end

end

Film

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