Étape 8: Programmation de la fourmi de Robot
En mode ramassage autonome, le robot fait pivoter vers la droite pour trouver un objet. Si elle ne trouve rien qu'il s’arrête après la rotation de 360 degrés. Lorsqu’un objet est détecté, il s’arrête et corrige la direction et à l’aide de la distance de l’objet détecté, va de l’avant une certaine distance. Puis, il ferme la pince et les ascenseurs.
Commande à distance
En mode de commande à distance le robot attend un signal pour un mouvement comme avant, ou pour une commande en mode autonome. Une standard universel TV distante peut être configurée pour sortie TV Sony code qui peut décoder le Picaxe. L’infrarouge de la télécommande est reçue par le module récepteur de Panasonic.
Voici le code de programmation pour la fourmi de robot :
' ant de robot, Picaxe 20 x-2
Let dirsc = 00000000
setfreq m8
faire une pause 2000
"loop22:" test du capteur de distance infrarouge
« readadc 7, b4
« déboguer b4
"goto loop22
startreset: ' réinitialiser pour démarrer
serout c.0,t2400, (80$, 01$, $01,2,30)'set4 pour servo #, set5 vitesse de 0to127
serout c.0,t2400,($80,$01,$04,2,26,30) ' corps bas 26
faire une pause 200
serout c.0,t2400,($80,$01,$01,1,30) ' vitesse réglée # dernière de 0 à 127
serout c.0,t2400,($80,$01,$04,1,26,127) ' fermer la pince 26
faire une pause 200
serout c.0,t2400,($80,$01,$01,0,20) ' vitesse réglée # dernière de 0 à 127
serout c.0,t2400,($80,$01,$04,0,26,127) ' centre de la tête
faire une pause 1000
loopinfra: "contrôle à distance des mouvements ou activer des séquences autonomes
c.1 à faible « œil bleu
c.2 haute ' oeil bleu
IRIN c.5, b6
Si b6 = 0 then act1 ' distance button1 = 0
Si b6 = 1 then forw ' b2
Si b6 = 2 then act2 "b3
Si b6 = 3 puis à gauche ' b4
Si b6 = 4 alors stop1 ' b5
Si b6 = 5 puis à droite ' b6
Si b6 = 6 then Loi3 ' b7
Si b6 = 7 puis rev1 ' b8
Si b6 = 8 alors biteme ' attaque
« Si b6 = 59 alors biteme ' attaque
Si b6 = 11 alors putdwn ' Entrez put down
Si b6 = 21 alors startreset ' réinitialiser les servos
« déboguer b6
Goto loopinfra
Act1: ' ant robot lunes du monde
GoSub forw2
faire une pause 2500
GoSub bodyup2
GoSub left2
GoSub headleft2
faire une pause 300
GoSub forw2
faire une pause 1200
GoSub pylône2
GoSub forw2
pause de 500
GoSub pylône2
GoSub headright2
c.1 haut ' l oeil rouge
c.2 à faible ' r d’yeux rouges
faire une pause 1000
GoSub right2
faire une pause 2500
GoSub headcenter2
GoSub bodydwn2
GoSub rev2
faire une pause 2500
GoSub pylône2
GoSub leftfast
pause de 500
GoSub pylône2
GoSub rightfast
pause de 500
GoSub leftfast
pause de 500
GoSub pylône2
GoSub rightfast
pause de 500
GoSub pylône2
faire une pause 2200
GoSub forw2
GoSub bodyup2
faire une pause 3500
GoSub opengrip2
pause de 500
GoSub pylône2
Goto loopinfra
biteme :
GoSub forw2
B8 = 1
pour b8 = 1 à 175
« trouver d’obstacle
c.2 haute ' l oeil rouge
c.1 à faible ' r d’yeux rouges
readadc 7, b4
Si b4 > 60 et b4 < 135 puis next3
pause 30
prochaine b8
Goto loopinfra
NEXT3 :
GoSub pylône2
GoSub bodydwn2
GoSub opengrip2
« faire une pause 100
GoSub bodyup2
GoSub forw2
faire une pause 300
GoSub closegrip2
faire une pause 900
GoSub pylône2
GoSub rev2
GoSub bodydwn2
faire une pause 6000
GoSub pylône2
Goto loopinfra
Act2: « collecte, putdown
« vers l’avant
serout c.0,t2400,(128,0,1,100) ' avant droite 20min à 127
serout c.0,t2400,(128,0,2,100) ' avant gauche 20min
faire une pause 4500
GoSub pylône2
pause 100
« trouver le bloc
B8 = 1
pour b8 = 1 à 75
« trouver le bloc et ramassage
c.2 haute
c.1 faible
GoSub right2
readadc 7, b4
Si b4 > 61 et b4 < 164 puis detect0 34-75
faire une pause 50
prochaine b8
GoSub pylône2
Goto loopinfra
detect0: ' arrêtez et corriger
GoSub pylône2
"tourner à gauche lentement
serout c.0,t2400,(128,0,1,60) ' avant droite 20min à 127
serout c.0,t2400,(128,0,3,60) ' rev a laissé 20min
faire une pause 240
GoSub pylône2
pause 100
c.2 à faible ' yeux rouges
c.1 haut ' yeux rouges
« avant, Pick-up
GoSub opengrip2
faire une pause 1000
GoSub forw2
Si b4 < 50 puis pa1
Si b4 < 60 puis pa2
Si b4 < 70 puis pa3
Si b4 < 80 puis pa4
Si b4 < 90 puis pa5
Si b4 < 104 puis pa6
PA1 :
faire une pause 9000
Goto stopat
pA2 :
faire une pause 5920
Goto stopat
PA3 :
faire une pause 3800
Goto stopat
AP4 :
faire une pause 2800
Goto stopat
PA5 :
faire une pause 2100
Goto stopat
PA6 :
faire une pause 980
Goto stopat
STOPAT :
GoSub pylône2
faire une pause 200
' closegrip
serout c.0,t2400,($80,$01,$01,1,30) ' # dernier jeu de vitesse de 0 à 127
serout c.0,t2400,($80,$01,$04,1,26,127) ' fermer la pince 26
faire une pause 2000
GoSub bodyup2
' putdown
GoSub leftfast
faire une pause 1400
GoSub pylône2
GoSub forw2
faire une pause 1800
GoSub pylône2
GoSub bodydwn2
GoSub opengrip2
pause de 500
« se réjouir
GoSub rev2
faire une pause 2000
GoSub pylône2
GoSub bodyup2
GoSub headleft2
GoSub headright2
GoSub headcenter2
c.1 à faible « œil bleu
c.2 haute ' oeil bleu
Goto loopinfra
act3: ' ouvrez la pince et transmettre
« avant, Pick-up
GoSub opengrip2
faire une pause 400
GoSub forw2
faire une pause 280
GoSub pylône2
Goto loopinfra
substances4: "fermer la pince et ascenseur
GoSub closegrip2
faire une pause 600
GoSub bodyup2
Goto loopinfra
' ' *** gosubs
leftslow :
"tourner à gauche lentement
serout c.0,t2400,(128,0,1,60) ' avant droite 20min à 127
serout c.0,t2400,(128,0,3,60) ' rev a laissé 20min
faire une pause 220
GoSub pylône2
retour
pylône2 :
serout c.0,t2400,(128,0,0,0) ' arrêt dur droite
serout c.0,t2400,(128,0,6,0) ' arrêt dur gauche
retour
forw2 :
serout c.0,t2400,(128,0,1,100) ' avant droite 20min à 127
serout c.0,t2400,(128,0,2,100) ' avant gauche 20min
retour
Left2 :
serout c.0,t2400,(128,0,1,100) ' avant droite 20min
serout c.0,t2400,(128,0,3,100) ' rev a laissé 20min
retour
right2 :
serout c.0,t2400,(128,0,2,100) ' avant gauche 20min
serout c.0,t2400,(128,0,0,100) ' rev droite 20min
retour
rev2 :
' arrêter
serout c.0,t2400,(128,0,0,0) ' arrêt dur droite
serout c.0,t2400,(128,0,6,0) ' arrêt dur gauche
faire une pause 50
' inverse
serout c.0,t2400,(128,0,0,100) ' rev droite 20min
serout c.0,t2400,(128,0,3,100) ' rev a laissé 20min
retour
opengrip2 :
serout c.0,t2400, (80$, 01$, $01,1,30)'set4 pour servo #, set5 vitesse de 0to127
serout c.0,t2400,($80,$01,$04,1,13,127) ' ouvrir la pince, 13
faire une pause 1000
retour
closegrip2 :
serout c.0,t2400,($80,$01,$01,1,30) ' vitesse réglée # dernière de 0 à 127
serout c.0,t2400,($80,$01,$04,1,26,127) ' fermer la pince 26
faire une pause 2000
retour
headleft2 :
serout c.0,t2400, (80$, 01$, $01,0,20)'set4 pour servo #, set5 vitesse de 0to127
serout c.0,t2400,($80,$01,$04,0,15,127) ' tête gauche 15
faire une pause 800
retour
headright2 :
« serout c.0,t2400,($80,$01,$01,0,20) ' vitesse réglée # dernière de 0 à 127
serout c.0,t2400,($80,$01,$04,0,32,127) ' tête droite 30
faire une pause 1600
retour
headcenter2 :
serout c.0,t2400,($80,$01,$01,0,20) ' vitesse réglée # dernière de 0 à 127
serout c.0,t2400,($80,$01,$04,0,26,127) ' centre de la tête
pause de 500
retour
bodyup2 :
serout c.0,t2400, (80$, 01$, $01,2,30)'set4 pour servo #, set5 vitesse de 0to127
serout c.0,t2400,($80,$01,$04,2,13,30) ' corps vers le haut, 13
faire une pause 220
retour
bodydwn2 :
serout c.0,t2400, (80$, 01$, $01,2,30)'set4 pour servo #, set5 vitesse de 0to127
serout c.0,t2400,($80,$01,$04,2,26,30) ' corps bas 26
faire une pause 200
retour
leftfast :
serout c.0,t2400,(128,0,1,127) ' avant droite 20min
serout c.0,t2400,(128,0,3,127) ' rev a laissé 20min
retour
RightFast :
serout c.0,t2400,(128,0,2,127) ' avant gauche 20min
serout c.0,t2400,(128,0,0,127) ' rev droite 20min
retour