Thymio II dessinateur

Le robot Thymio II dispose d'un trou central qui permet de placer un feutre, par exemple, pour faire des dessins. Il y a différents moyens de décider quoi dessiner. Une façon simple est de télécommander le robot (par la télécommande ou le clappement de main) pour lui faire dessiner ce que vous désirez. L'autre façon est de le programmer. Dans cette page on présente quelques exemples de programmes avec les dessins correspondants.

full-robot.jpg

Le plus simple pour faire des dessins est de faire des séquences de courbes et droites, avec un comptage du temps qui permet de définir les longueurs.

Voici un petit code qui prend l'évènement de lecture de la température, qui arrive chaque seconde, et fait un comptage en boucle sur la variable itera, qui augmente de un à chaque seconde. Avec trois if on déclanche les différentes séquences (tourner losque itera est à 1, avancer quand itera est à 4) et on boucle avec le dernier if:

var itera = 0
timer.period[0] = 1000 # 1000ms = 1s 

onevent timer0
    itera = itera + 1
    if itera==1 then
        motor.left.target = 230
        motor.right.target = -120
    end
    if itera==4 then
        motor.left.target = 80
        motor.right.target = 80
    end
    if itera==7 then
        itera = 0
    end

Le dessin qui en résulte est le suivant:

dessin-fleur-simple.jpg

On peut aussi alterner avancement et reculement comme dans le code très similaire suivant:

var itera = 0
timer.period[0] = 1000 # 1000ms = 1s 

onevent timer0
    itera = itera + 1
    if itera==1 then
        motor.left.target = 100
        motor.right.target = 90
    end
    if itera==4 then
        motor.left.target = -100
        motor.right.target = -70
    end
    if itera==7 then
        itera = 0
    end

Le motif qui en résulte est très différent, le voici:

dessin-etoile-simple.jpg

On peut alterner des séquences très différentes et cela fait des dessins réguliers. SI on veut casser la régularité on peut ajouter une variable. Dans l'exemple ci-dessous on a ajouté une variable speed qui est incrémentée régulièrement et qui définit la longueur des bouts droits en augmentant la vitesse du robot:

var itera = 0
var speed = 30
timer.period[0] = 1000 # 1000ms = 1s 

onevent timer0
    itera = itera + 1
    if itera==1 then
        motor.left.target = 230
        motor.right.target = -140
    end
    if itera==4 then
        motor.left.target = speed
        motor.right.target = speed
        speed = speed + 2
    end
    if itera==7 then
        itera = 0
    end

Le motif résultant est le suivant:

dessin-fleur-croissante.jpg

Autre exemple de motif régulier avec une variable:

var itera = 0
var speed = 20
timer.period[0] = 1000 # 1000ms = 1s 

onevent timer0
    itera = itera + 1
    if itera==1 then
        motor.left.target = 140
        motor.right.target = -140
    end
    if itera==4 then
        motor.left.target = speed
        motor.right.target = speed
        speed = speed + 2
    end
    if itera==7 then
        itera = 0
    end

Dont voici le motif résultant:

dessin-etoile-croiss.jpg

Si on regarde bien, cette image est formée de spirales. Les voici un peu plus visibles:

dessin-etoile-explique.jpg

Finalement il est possible de faire des spirales plus explicites avec le code suivant, qui consiste à avancer, puis reculer seulement une partie, tourner et réduire la vitesse d'un dixième, et ainsi de suite:

var itera = 0
var speed = 256
timer.period[0] = 1000 # 1000ms = 1s 

onevent timer0
    itera = itera + 1
    if itera==1 then
        motor.left.target = speed
        motor.right.target = speed
    end
    if itera==4 then
        motor.left.target = -speed
        motor.right.target = -speed
    end
    if itera==6 then
        motor.left.target = -40
        motor.right.target = 40
        speed = speed - (speed / 10)
    end
    if itera==7 then
        itera = 0
    end

Le résultat est le suivant:

spiral-700.jpg

Enfin une vraie spirale:

spiral.jpg

Avec un code qui permet de lancer et arrêter la spirale:

var parti                # parti ou pas
timer.period[0]=100     # 100ms
call leds.top(0, 0, 32)    # bleu

onevent button.forward    #départ
    parti=1
    motor.left.target = -200
    motor.right.target = 200
    call leds.top(0, 32, 0)

onevent button.backward        # stop
    parti=0
    call leds.top(32, 0, 0)
    motor.left.target = 0
    motor.right.target = 0

onevent timer0    #toutes les 100ms = 0.1s
    if parti ==1 then
        motor.left.target = motor.left.target+1
        motor.right.target = motor.right.target+1
    end

Voici une illustration du processus en vidéo:

J'espère vous avoir donné l'envie de tester ces codes très simples qui donnent des motifs très variables. N'hésitez pas de poster sur cette page vos résultats!!!

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