Présentation
Pour mon travail de maturité au gymnase intercantonal de la Broye (GYB), il m'a fallut user de ma créativité afin de programmer un robot Thymio II. Le but était de trouver une tâche à lui faire réaliser pouvant être utile au quotidien. Ainsi, j'ai codé le robot pour qu'il jette les déchets.
Montage/Construction
Les legos
Voici les deux "bras" en lego confectionnés pour mon Thymio II. N'oublions pas les petites fleurs pour le thème de l'écologie.
On fixe notre construction en lego sur Thymio II et…
Nous voila ainsi avec un Thymio II transformé en ramassoire!
Le déchet
Effectivement, il faut bien qu'il y ait un déchet si l'on veut que notre Thymio soit utile pour ce projet!
La "poubelle"
Il ne faut pas seulement débarrasser le déchet; il faut aussi le mettre dans une poubelle!
La structure avec le drapeau
A la fin du parcours se trouve une structure avec un drapeau. Voici la vue d'ensemble:
(La présence du drapeau serra expliqué avec le code)
Et maintenant les détails. D'abord, il y a un crayon fixé en bas du drapeau pour qu'il retombe plus vite une fois soulevé.
Puis nous avons une construction en carton avec du poids au milieu (pour éviter que tout tombe sous le poids du drapeau)
La rampe
Voila la rampe en carton qui a été faite pour ce projet
La piste
La piste est faite avec une ligne noir imprimée par segments sur des feuilles de papier A4. Voici les deux modèles:
Puis il faut créer un parcours et le coller sur du carton.
Voici ce que donne au final la piste que j'ai réalisé:
Et enfin! Voici la vidéo!
Alors comment ça marche?
- Dès que Thymio II entend un son ou bruit assez fort (quand on tape dans ses mains ou siffle comme dans la vidéo), il va se mettre en marche et avancer jusqu'à la ligne noire. Puis il va scanner la zone devant lui pour voir s'il y a un déchet.
- Si il en détecte effectivement un, il va avancer en suivant la ligne noire, monter sur la rampe, faire tomber le déchet dans la poubelle, puis passer sous le drapeau qui va retomber derrière lui le faire s'arrêter grâce à ses capteurs arrières.
- Par contre si Thymio II ne détecte pas de déchet il revient à son point de départ et s'éteint.
Le code
Voici tout le code qui fait fonctionner ce projet
var allumé=0 # création des variables
var rotation1=0
var rotation2=0
var rotation3=0
var reculer=0
call leds.top(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)
motor.left.target = 0
motor.right.target = 0
timer.period[0]=500 # en millisecondes
onevent buttons
if button.center==1 then # Bouton d'arrêt
allumé=-1
end
if allumé==-1 then
motor.left.target=0 # remise à zéro des variables
motor.right.target=0
rotation1=0
rotation2=0
rotation3=0
reculer=0
call leds.circle(0,0,0,0,0,0,0,0)
call leds.top(0,0,0)
end
if button.forward==1 then # bouton pour remettre en marche
allumé=0
timer.period[0]=500
end
onevent timer0
if allumé==0 then
if mic.intensity>15 then # détection avec le microphone
allumé=1
timer.period[0]=0
call sound.system(3) # joue un son au démarrage
call leds.top (0,32,0) # s'allume en vert
call leds.circle(32,0,0,0,0,0,0,0) # led du cercle avant
motor.left.target = 100
motor.right.target = 100
end
end
onevent prox
if allumé==1 and prox.ground.reflected[0]<200 and prox.ground.reflected[1]<200 then # s'arrête devant une ligne
motor.left.target = 0
motor.right.target = 0
call sound.system(2)
allumé=2
end
if allumé==2 then
timer.period[0]=10
rotation1=rotation1+1
if rotation1==1 then # rotation 90 degrés sur la droite avant "scan" de déchet
call leds.circle (0,0,32,0,0,0,0,0) # led du cercle droite
call sound.system(8)
motor.left.target=75
motor.right.target=-75
call leds.top(32,32,0) # jaune
end
if rotation1==20 then
motor.left.target=0
allumé=3
timer.period[0]=0
end
end
if allumé==3 then
timer.period[0]=10
rotation2=rotation2+1
if rotation2==1 then # rotation de 180 degrés avec "scan" de déchet
call sound.system(2)
motor.right.target=75
motor.left.target=-75
call leds.top(32,10,0) # orange
call leds.circle (32,0,32,0,32,0,32,0) # une led sur deux allumée
end
if prox.horizontal[2]>1000 then # s'il trouve un déchet, avance
allumé=4
call leds.top(0,0,32) # bleu
motor.left.target=60
motor.right.target=60
call sound.play(0) # son police sur la carte SD
call leds.circle(32,0,0,0,0,0,0,0) # led du cercle avant
end
while allumé==4 do
if prox.ground.reflected[0]<200 and prox.ground.reflected[1]<200 then # suivre ligne
motor.left.target=200
motor.right.target=200
call leds.top(32,0,32) # violet
end
if prox.ground.reflected[0]<200 and prox.ground.reflected[1]>200 then
motor.left.target=-20
motor.right.target=200
end
if prox.ground.reflected[0]>200 and prox.ground.reflected[1]<200 then
motor.left.target=200
motor.right.target=0
end
if prox.horizontal[5]>1000 or prox.horizontal[6]>1000 then # arrêt à la fin (drapeau stop derrière thymio)
motor.left.target=0
motor.right.target=0
call leds.circle(0,0,0,0,0,0,0,0)
call leds.top(0,0,0)
allumé=0
rotation1=0 # remise à zéro des variables
rotation2=0
rotation3=0
reculer=0
timer.period[0]=500
end # robot arrêté prêt à recommencer
end
if rotation2==40 and allumé==3 then # s'il n'a rien trouvé, il s'arrête
motor.right.target=0
motor.left.target=0
allumé=5
timer.period[0]=0
end
end
if allumé==5 then # Puis se remet droit
timer.period[0]=10
rotation3=rotation3+1
if rotation3==1 then
call sound.system(8)
motor.left.target=75
motor.right.target=-75
call leds.top(0,0,0)
call leds.circle(0,0,32,0,0,0,0,0) # led du cercle droite
call leds.top(32,0,0) # rouge
end
if rotation3==20 then # Puis s'arrête
motor.left.target=0
motor.right.target=0
allumé=6
timer.period[0]=0
end
end
if allumé==6 then # Puis recule a son point de départ
timer.period[0]=10
reculer=reculer+1
if reculer==1 then
call sound.system(8)
motor.left.target=-60
motor.right.target=-60
call leds.circle(0,0,0,0,32,0,0,0) # led du cercle arrière
end
if reculer==20 then # Il s'arrête et le programme peut recommencer
motor.left.target=0
motor.right.target=0
call leds.circle(0,0,0,0,0,0,0,0)
call leds.top(0,0,0)
allumé=0
rotation1=0 # remise à zéro des variables
rotation2=0
rotation3=0
reculer=0
timer.period[0]=500
end
end