Dans cette partie, on va programmer Thymio pour qu'il réagisse aux chocs et émette un son.
L'accéléromètre
Comment peut-on détecter un choc ? Quel capteur permet de faire cela ?
La détection de chocs est très courante et utile. Voyons quelques exemples :
- dans une voiture, on peut détecter un choc en cas d'accident pour déclencher l'airbag.
- dans de nombreux téléphones portables, on peut détecter si l'utilisateur tape avec le doigt, une ou plusieurs fois de suite.
- dans un ordinateur portable, on détecte les chocs pour protéger le disque dur.
Ce genre d'événement est détecté grâce à l'accéléromètre. L'accéléromètre permet de mesurer des accélérations, dont par exemple la gravité. On peut aussi mesurer la chute libre et les chocs.
Observer l'activité de l'accéléromètre
Aseba Studio permet de faire des graphiques de variables. Pour ça, il faut créer notre propre événement. Si on veut observer les trois axes de l'accéléromètre (on mesure l'accélération en trois dimensions) il faut créer un événement avec 3 arguments. Pour ça, on clique sur le + pour ajouter un événement, on lui donne un nom (p.ex mes_accelerations) et on spécifie le nombre d'arguments (3).
Maintenant, dans le code, on peut envoyer la valeur de l'accélération (variable acc dans la fenêtre Variables, qui comporte 3 éléments) lors de l'événement acc, à notre nouvel événement mes_accelerations qui peut transmettre 3 arguments:
onevent acc
emit mes_accelerations acc
Ensuite, dans la fenêtre Evénements, on peut sélectionner mes_accelerations et cliquer sur le bouton de graphique.
Un nouvel onglet s'ouvre avec un graphique des 3 accélérations. On peut alors observer ce qui se passe si on tourne le robot ou qu'on tape dessus.
Ici on voit les 3 axes en 3 couleurs différentes. Quand le robot est posé sur ses roues, on détecte la gravité sur l'axe Z (en bleu). Quand on le met sur le côté, on détecte l'accélération sur un autre axe (le rouge). En cas de choc, on voit des pics.
Utiliser l'accéléromètre
On peut utiliser l'accéléromètre de différentes façons. Comme on l'a vu, la variable acc donc la valeur des accélérations sur les trois axes, et l'événement acc a lieu à chaque fois que les valeurs d'accélérations sont mesurées.
Il y a en plus un événement tap qui a lieu lorsque le robot détecte une tape ou un choc. On peut ainsi utiliser cet événement pour faire faire du bruit au robot lorsqu'on le tape.
onevent tap
call sound.system(4) # cette fonction permet de jouer un son système