Le Robot Domino

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…

1.jpg

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…

2.jpg

Film

L'idéal aurait été de trouver un ressort pour automatiser la descente des dominos.

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