Introduction
J'ai effectué ce projet pour mon Travail de Maturité au gymnase intercantonal de la broye. Nous avions pour objectif de trouver une utilité a notre Thymio II.
J'ai decidé de construire un robot qui pose des dominos ayant pour but de distraire.
Image du robot…
Code
var x = 100
var y = 60
var stop = 0
var a
var b
var go = 5
var go1 = 10000
var go2 = 5
var go10 = 10000
var go100 = 10000
var go1000 = 10000
var go30=4
var go10000 = 12000
var go300=6
var go3000=5
var go3= 5
var i = 0
var dev
var dro
var gau
var der
timer.period[1] = 1
#intervalle entre chaque fonction
timer.period[0] = 0
#Début des fonctions
sub devant#fonction qui stocke la direction de devant
call leds.top(0,0,0)
motor.right.target = x
motor.left.target = x
call sound.system(6)
sub gauche#fonction qui stocke la direction de gauche
call leds.top(0,32,0)
motor.right.target = x
motor.left.target = y
call sound.system(6)
sub droite#fonction qui stocke la direction de droite
call leds.top(0,0,32)
motor.right.target = y
motor.left.target = x
call sound.system(6)
sub parcours#fonction parcours
motor.left.target= x
motor.right.target = y
call leds.top(0,32,32)
sub initial
call leds.top(32,0,0)
motor.right.target = stop
motor.left.target = stop
call sound.system(5)
i=0
go1 = 10000
go2 = 5
go10 = 10000
go100 = 10000
go1000 = 10000
go30=4
go10000 = 12000
go300=6
go3000=5
go3= 5
onevent button.center # permet d'arrêter le robot
callsub initial
sub arret
while prox.horizontal[5] < 1000
# interdit au robot d'avancer tant qu'il n'y a pas de dominos dans le reservoir
do
motor.left.target = stop
motor.right.target = stop
call leds.top(0,0,0)
end
onevent button.forward
dev=i
i++
onevent button.left
gau=i
i++
onevent button.right
dro=i
i++
onevent timer1
callsub arret
if i==6 then # Lorsque les 3 directions sont stockées le code est lancé
if dro==1 then
callsub droite
elseif gau==1 then
callsub gauche
elseif dev==1 then
callsub devant
end
while i==6 do #Après un certain temps, la deuxième partie est lancée
go1--
if go1 ==0 then
go1=10000
go2--
end
if go2 ==0 then
i=8
end
end
end
if i==8 then
if dro==3 then
callsub droite
elseif gau==3 then
callsub gauche
elseif dev==3 then
callsub devant
end
while i==8 do
go10--
if go10 ==0 then
go10=10000
go--
end
if go ==0 then
i=10
end
end
end
if i==10 then
if dro==5 then
callsub droite
end
if gau==5 then
callsub gauche
end
if dev==5 then
callsub devant
end
while i==10 do
go100--
if go100 ==0 then
go100=10000
go3--
end
if go3 ==0 then
i=-1
end
end
end
while i ==-1 do
call leds.top(32,32,32)
motor.left.target=100
motor.right.target=100
go1000--
if go1000 ==0 then
go1000=10000
go30--
end
if go30 ==0 then
i=-3
end
end
while i ==-3 do
call leds.top(0,32,32)
motor.right.target=100
motor.left.target=0
go10000--
if go10000 ==0 then
go10000=10000
go300--
end
if go300 ==0 then
i=-4
end
end
while i ==-4 do
call leds.top(32,0,32)
motor.right.target=x
motor.left.target=x
go10000--
if go10000 ==0 then
go10000=10000
go3000--
end
while go3000 ==0 do
motor.left.target=stop
motor.right.target=stop
callsub initial
end
end
onevent button.backward
if button.backward==1
then
callsub parcours
der=der+1
end
if der == 2
#permet au robot de faire un "trajet" aléatoire
then
call math.rand(a)
motor.right.target = abs(a)
call math.rand(b)
motor.left.target = abs(b)
call leds.top(32,32,32)
end
if der ==3 then
der=0
end
Fonctionnement
Ce robot domino nous offre le choix de pouvoir déterminer sa direction, si par exemple j'appuye sur les boutons de gauche, droite et devant, il suivra chacune de ces directions pendant une petite durée. Lorsque le réservoir se vide, sauf exception, le robot s'arrête. Toucher le bouton du bas lui permet de suivre un parcours prédéfini. Pour poser des dominos, j'ai mis un petit moteur, qui lors de leur descente, les pousse sur le circuit. Lorsque le robot a fini de poser les dominos, il se tourne et renverse le premier domino qui fait tomber les autres de suite.
Image du moteur…
Film
L'idéal aurait été de trouver un ressort pour automatiser la descente des dominos.