Thymio l'écolo

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.

Rc0KsJl.jpg

On fixe notre construction en lego sur Thymio II et…

cs8EM3x.jpg

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!

7JlFJyN.jpg

La "poubelle"

Il ne faut pas seulement débarrasser le déchet; il faut aussi le mettre dans une poubelle!

jLXO5yf.jpg

La structure avec le drapeau

A la fin du parcours se trouve une structure avec un drapeau. Voici la vue d'ensemble:

NCoGbHL.jpg

(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é.

lNiCbTW.jpg

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

GTsCOoB.jpg

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:

ZEFfmyM.jpg

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

0FEhG9L.jpg

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
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License