Sur les roues du robot Thymio II on peut ajouter des chenilles pour lui permettre de franchir des obstacles plus importants. Voici un exemple de construction:
Ce qui peut être intéressant ici est de programmer le robot pour qu'il détecte les pentes et pour qu'il donne des signaux d'alerte en cas de danger. Voici comment on peut faire cela:
Pour détecter l'inclinaison du robot on peut utiliser le code ci-dessous. Dans ce code on fait un moyennage sur 4 mesures des accéléromètres 0 et 1. On somme ces quatre valeurs (dans sumacc0 et sumacc1) et on les multiplie par elle-mêmes pour n'avoir que des valeurs positives. On obtient ainsi pente, qui prend une valeur en fonction de l'inclinaison du robot. Vous pouvez essayer ce code et visualiser pente en inclinant le robot. Selon la valeur de pente on change la couleur du robot et on met la variable danger_level à 0, 1, 2 ou 3. C'est en quelque sorte le niveau de danger que court le robot de se tourner sur lui-même. Au niveau 3 on émet un signal d'alarme. Ce signal est un son enregistré sur la carte SD sous le nom p3.raw. Un ficher zip avec les sons à mettre sur la carte SD pour cette démo se trouve ici.
var accTampon0[4] = 0,0,0,0
var accTamponPos0 = 0
var accTampon1[4] = 0,0,0,0
var accTamponPos1 = 0
var sumacc0
var sumacc1
var pente
var danger_level
var r
var g
var b=0
onevent acc
# vérification de l'inclinaison avec un petit moyennage su 4 mesures
accTampon0[accTamponPos0] = acc[0]-3
accTamponPos0 = (accTamponPos0 + 1) % 4
sumacc0 = accTampon0[0] + accTampon0[1] + accTampon0[2] + accTampon0[3]
accTampon1[accTamponPos1] = acc[1]-2
accTamponPos1 = (accTamponPos1 + 1) % 4
sumacc1 = accTampon1[0] + accTampon1[1] + accTampon1[2] + accTampon1[3]
pente = sumacc0*sumacc0 + sumacc1*sumacc1
if pente<500 then
danger_level = 0
g=32
r=0
else
if pente<1000 then
danger_level = 1
r=10
g=10
else
if pente<1500 then
danger_level = 2
r=10
g=10
else
when pente<2000 do
danger_level = 3
call sound.play(danger_level)
r=32
g=0
end
end
end
end
call leds.top(r,g,b)
D'autres signaux d'alarme sont émis en cas de niveau de danger 1 et 2 avec le code suivant:
onevent temperature #toutes les secondes
if danger_level != 0 then
if danger_level != 3 then
call sound.play(danger_level)
end
end
Enfin pour pouvoir faire avancer le robot on peut utiliser le code suivant:
onevent buttons #gestion de la commande
when button.forward==1 do
motor.left.target=200
motor.right.target=200
end
when button.center==1 do
motor.left.target=0
motor.right.target=0
end
when button.backward==1 do
motor.left.target=-200
motor.right.target=-200
end
when button.left==1 do
motor.left.target=-200
motor.right.target=200
end
when button.right==1 do
motor.left.target=200
motor.right.target=-200
end
Le tout combiné (ne pas oublier les fichers sons dans la cadre SD) donne le comportement suivant:
On peut naturellement ajouter d'autre fonctionalités, comme par exemple la détection d'obstacles trop importants ou le ralentissemement en fonction de la présence d'obstacles.