Cette page illustre un exemple de machine qui teste la réflexion optique d'un papier. La machine dispose d'un levier à l'avant qui peut déplacer un échantillon de papier à une distance variable en face du capteur de proximité central avant. Une surface de référence se déplace en face d'un capteur latéral et permet d'avoir une référence de distance. Cette machine est réalisée uniquement avec des pièces du kit de construction LEGO Technic 8069.
Le déplacement du papier coloré se fait avec un bras actionné per l'une des roues du Thymio II. Voici une séquence de positions possibles:
Cette machine se branche à l'ordinateur qui peut récupérer les données associées à des évènements:
La séquence de mesure est la suivante: d'abord on ramène le papier coloré proche du capteur, ensuite on l'éloigne lentement en prenant les mesures. Entre deux mesures on change le papier et on "note" le changement de papier avec les flêches latérales. Ceci permet d'ajouter dans les données un numéro différent pour chaque papier.
Voici ce que cela donne en vidéo:
Le code nécessaire pour réaliser la démarche de la vidéo est ci-dessous. ATTENTION: pour que ce code compile il faut créer (sur la droite dans l'environnement asebastudio), un évènement qui s'appelle plot et qui a trois paramètres.
var Tampon0[4] = 0,0,0,0
var TamponPos0 = 0
var Tampon1[4] = 0,0,0,0
var TamponPos1 = 0
var data[3]
var paper = 0 # variable qui aide à indentifier le papier dans l'analyse des données
var record # variable qui indique si on emet les données ou pas
onevent buttons #à chaque fois qu'on vérifie les bouton
when button.forward==1 do # avance pour la mesure
motor.right.target=-100
end
when button.center==1 do # stop
motor.right.target=0
record = 0
end
when button.backward==1 do # recule vite
motor.right.target=400
end
when button.left==1 do # permet de changer la variable papier qui identifie les échantillons
paper = paper - 1
end
when button.right==1 do
paper = paper +1
end
onevent prox
# on met dans data les 3 donnée qui nous intéressent: no_papier, référence, mesure
data[0]=paper # référence pour le papier
Tampon0[TamponPos0] = prox.horizontal[4] # référence de position
TamponPos0 = (TamponPos0 + 1) % 4
data[1] = Tampon0[0] + Tampon0[1] + Tampon0[2] + Tampon0[3]
Tampon1[TamponPos1] = prox.horizontal[2] # mesure sur le papier
TamponPos1 = (TamponPos1 + 1) % 4
data[2] = Tampon1[0] + Tampon1[1] + Tampon1[2] + Tampon1[3]
if record==1 then # seulement quand on enregistre
emit plot data
end
when prox.horizontal[4]<1500 do # si on est très proche
motor.right.target=0
end
when prox.horizontal[4]<1600 and motor.right.target<0 do # si on est proche et qu'on s'éloigne, on commence à enregistrer
record = 1
end
when prox.horizontal[4]>3600 and motor.right.target<0 do #si on est trop loin on s'arrête
record = 0
motor.right.target=0
end
La procédure pour enregistrer les mesures est un peu compliqué, car il s'agit de récupérer les données de l'expérience depuis AsebaStudio pour les analyser ensuite dans un logiciel comme excel ou openoffice.
Pour commencer il faut, avant de lancer AsebaStudio, ouvrir le port série sur lequel se trouve le Thymio II avec asebaswitch. Ce logiciel permet d'avoir plusieurs logiciels qui accèdent au même Thymio II. La commande dans un terminal, sur un Mac, dans le dossier bin de asebauniversal, est:
./asebaswitch "ser:device=/dev/cu.usbmodemXXX"
où XXX est un numéro attribué de cas en cas par le Mac. Vous pouvez voir ce numéro dans AsebaStudio.
Ensuite il est possible de se connecter avec AsebaStudio en choisissant Network (TCP) et comme host localhost et port 33333.
On se retrouve donc dans la situation habituelle d'avoir AsebaStudio connecté à Thymio II, mais avec asebaswitch entre les deux.
Ensuite il est possible d'enregistrer tous les événements lancés par Thymio II avec le programme asebarec, par la commande suivante:
./asebarec "tcp:localhost;port=33333" > monfichierlog.txt
Dans monfichierlog.txt on trouver des lignes de texte sous le format suivant:
timestamp source message_id taille data[0] data[1] data[2] data[n]
Les données envoyées par l’événement seront donc toujours les derniers chiffres.
Dans l'expérience de la vidéo on se retrouve avec les données suivantes dans monfichierlog.txt:
1309439074.659 1 0 3 1 5882 16306
1309439074.722 1 0 3 1 5878 16302
1309439074.785 1 0 3 1 5871 16301
1309439074.849 1 0 3 1 5877 16302
1309439074.912 1 0 3 1 5890 16307
1309439074.975 1 0 3 1 5907 16312
1309439075.039 1 0 3 1 5923 16317
....
1309439115.768 1 0 3 1 14149 0
1309439115.831 1 0 3 1 14152 0
1309439115.893 1 0 3 1 14154 0
1309439115.957 1 0 3 1 14154 0
1309439116.020 1 0 3 1 14157 0
1309439116.083 1 0 3 1 14170 0
1309439116.147 1 0 3 1 14184 0
1309439116.210 1 0 3 1 14193 0
1309439116.273 1 0 3 1 14219 0
1309439116.337 1 0 3 1 14235 0
1309439141.989 1 0 3 2 5789 16283
1309439142.052 1 0 3 2 5790 16279
1309439142.115 1 0 3 2 5790 16279
1309439142.179 1 0 3 2 5790 16280
1309439142.242 1 0 3 2 5793 16281
1309439142.305 1 0 3 2 5797 16281
1309439142.369 1 0 3 2 5802 16277
1309439142.432 1 0 3 2 5799 16271
1309439142.495 1 0 3 2 5800 16268
1309439142.559 1 0 3 2 5800 16266
....
Le ficher original complet se trouve ici.
On peut observer que le troisième chiffre depuis la droite change quand on change de papier, ce qui permet de trier les données.
En traitant correctement ces données dans un logiciel comme excel ou openoffice, on peut générer le graphe suivant:
Ce graphe correspond à la réflexion des quatre papiers suivants:
Finalement quelques détails sur la construction: