Paso 8: Programación de la hormiga Robot
En modo autónomo de recolección, el robot gira a la derecha en busca de un objeto. Si no encuentra nada que se detiene después de girar 360 grados. Cuando un objeto se detecta se detiene y corrige el sobre manejo y uso de la distancia medida por el objeto detectado, mueve hacia adelante una distancia específica. Luego se cierra la pinza y ascensores.
Control remoto
En modo control remoto el robot espera una señal para un movimiento como el avance o un comando en modo autónomo. Un estándar universal TV remote puede ser configurada para código de Sony TV que puede decodificar el Picaxe. El infrarrojo del control remoto es recibido por el módulo receptor de Panasonic.
Aquí está el código de programación para la hormiga robot:
' hormiga robot, Picaxe 20 x-2
que dirsc = % 00000000
setfreq m8
PAUSE 2000
' loop22: ' prueba de sensor de distancia infrarrojo
' readadc 7, b4
' depurar b4
' goto loop22
startreset: ' reset para iniciar
serout c.0,t2400 ($80, $01, $01,2,30)'set4 para servo #, set5 velocidad de 0to127
serout c.0,t2400,($80,$01,$04,2,26,30) ' cuerpo abajo 26
pausa de 200
serout c.0,t2400,($80,$01,$01,1,30) ' velocidad sistema # pasado de 0 a 127
serout c.0,t2400,($80,$01,$04,1,26,127) ' cerrar pinza 26
pausa de 200
serout c.0,t2400,($80,$01,$01,0,20) ' velocidad sistema # pasado de 0 a 127
serout c.0,t2400,($80,$01,$04,0,26,127) ' central centro
PAUSE 1000
loopinfra: ' control remoto de movimientos o secuencias autónomas
bajo c.1 ' ojo azul
c.2 alta ' ojo azul
c.5 de IRIN, b6
Si b6 = 0 entonces act1 ' remoto button1 = 0
Si b6 = 1 entonces c ' b2
Si b6 = 2 entonces act2 ' b3
Si b6 = 3 luego a la izquierda ' b4
Si b6 = 4 entonces stop1 ' b5
Si b6 = 5 luego a la derecha ' b6
Si b6 = 6 entonces act3 ' b7
Si b6 = 7 entonces rev1 ' b8
Si b6 = 8 entonces biteme ' ataque
' si b6 = 59 entonces biteme ' ataque
Si b6 = 11 then putdwn ' entrar poner abajo
Si b6 = 21 then startreset ' reset servos
' depurar b6
Goto loopinfra
Act1: ' hormiga robot lunas del mundo
GoSub forw2
PAUSE 2500
GoSub bodyup2
GoSub izquierda2
GoSub headleft2
PAUSE 300
GoSub forw2
hacer una pausa en 1200
stop2 GoSub
GoSub forw2
PAUSE 500
stop2 GoSub
GoSub headright2
c.1 alta ' ojo rojo l
c.2 la baja ' r de ojos rojos
PAUSE 1000
GoSub right2
PAUSE 2500
GoSub headcenter2
GoSub bodydwn2
GoSub rev2
PAUSE 2500
stop2 GoSub
GoSub leftfast
PAUSE 500
stop2 GoSub
GoSub rightfast
PAUSE 500
GoSub leftfast
PAUSE 500
stop2 GoSub
GoSub rightfast
PAUSE 500
stop2 GoSub
hacer una pausa en 2200
GoSub forw2
GoSub bodyup2
hacer una pausa en 3500
GoSub opengrip2
PAUSE 500
stop2 GoSub
Goto loopinfra
biteme:
GoSub forw2
B8 = 1
para b8 = 1 a 175
' encontrar obstáculo
c.2 alta ' ojo rojo l
c.1 la baja ' r de ojos rojos
readadc 7, b4
Si b4 > 60 y b4 < 135 luego next3
pausa de 30
siguiente b8
Goto loopinfra
Next3:
stop2 GoSub
GoSub bodydwn2
GoSub opengrip2
' pausa 100
GoSub bodyup2
GoSub forw2
PAUSE 300
GoSub closegrip2
hacer una pausa en 900
stop2 GoSub
GoSub rev2
GoSub bodydwn2
hacer una pausa en 6000
stop2 GoSub
Goto loopinfra
ACT2: ' recolección, putdown
' adelante
serout c.0,t2400,(128,0,1,100) ' adelante derecha 20min a 127
serout c.0,t2400,(128,0,2,100) ' hacia la izquierda 20min
hacer una pausa en 4500
stop2 GoSub
PAUSE 100
' encontrar bloque
B8 = 1
para b8 = 1 a 75
' encontrar bloque y recolección
c.2 alta
c.1 bajo
GoSub right2
readadc 7, b4
Si b4 > 61 y b4 < 164 entonces detect0 34-75
pausa de 50
siguiente b8
stop2 GoSub
Goto loopinfra
detect0: ' parar y corregir
stop2 GoSub
' gire a la izquierda lenta
serout c.0,t2400,(128,0,1,60) ' adelante derecha 20min a 127
serout c.0,t2400,(128,0,3,60) ' rev 20 minutos a la izquierda
pausa de 240
stop2 GoSub
PAUSE 100
c.2 la baja ' ojo rojo
c.1 alta ' ojo rojo
' adelante, recolección
GoSub opengrip2
PAUSE 1000
GoSub forw2
Si b4 < 50 entonces pa1
Si b4 < 60 entonces pa2
Si b4 < 70 entonces pa3
Si b4 < 80 entonces pa4
Si b4 < 90 entonces PE5
Si b4 < 104 entonces pa6
PA1:
pausa 9000
Goto stopat
PA2:
pausa 5920
Goto stopat
PA3:
hacer una pausa en 3800
Goto stopat
PA4:
pausa 2800
Goto stopat
PE5:
hacer una pausa en 2100
Goto stopat
PA6:
pausa 980
Goto stopat
STOPAT:
stop2 GoSub
pausa de 200
' closegrip
serout c.0,t2400,($80,$01,$01,1,30) ' # última juego de velocidad de 0 a 127
serout c.0,t2400,($80,$01,$04,1,26,127) ' cerrar pinza 26
PAUSE 2000
GoSub bodyup2
' putdown
GoSub leftfast
hacer una pausa en 1400
stop2 GoSub
GoSub forw2
hacer una pausa en 1800
stop2 GoSub
GoSub bodydwn2
GoSub opengrip2
PAUSE 500
' miradas
GoSub rev2
PAUSE 2000
stop2 GoSub
GoSub bodyup2
GoSub headleft2
GoSub headright2
GoSub headcenter2
bajo c.1 ' ojo azul
c.2 alta ' ojo azul
Goto loopinfra
act3: ' Abra la pinza y adelante
' adelante, recolección
GoSub opengrip2
PAUSE 400
GoSub forw2
pausa de 280
stop2 GoSub
Goto loopinfra
act4: ' cerrar la pinza y elevación
GoSub closegrip2
hacer una pausa en 600
GoSub bodyup2
Goto loopinfra
' ' *** gosubs
leftslow:
' gire a la izquierda lenta
serout c.0,t2400,(128,0,1,60) ' adelante derecha 20min a 127
serout c.0,t2400,(128,0,3,60) ' rev 20 minutos a la izquierda
pausa 220
stop2 GoSub
volver
stop2:
serout c.0,t2400,(128,0,0,0) ' dura parada derecha
serout c.0,t2400,(128,0,6,0) ' izquierda dura parada
volver
forw2:
serout c.0,t2400,(128,0,1,100) ' adelante derecha 20min a 127
serout c.0,t2400,(128,0,2,100) ' hacia la izquierda 20min
volver
izquierda2:
serout c.0,t2400,(128,0,1,100) ' adelante derecha 20 minutos
serout c.0,t2400,(128,0,3,100) ' rev 20 minutos a la izquierda
volver
right2:
serout c.0,t2400,(128,0,2,100) ' hacia la izquierda 20min
serout c.0,t2400,(128,0,0,100) ' rev derecha 20 minutos
volver
Rev2:
' dejar de
serout c.0,t2400,(128,0,0,0) ' dura parada derecha
serout c.0,t2400,(128,0,6,0) ' izquierda dura parada
pausa de 50
' inversa
serout c.0,t2400,(128,0,0,100) ' rev derecha 20 minutos
serout c.0,t2400,(128,0,3,100) ' rev 20 minutos a la izquierda
volver
opengrip2:
serout c.0,t2400 ($80, $01, $01,1,30)'set4 para servo #, set5 velocidad de 0to127
serout c.0,t2400,($80,$01,$04,1,13,127) ' abrir la pinza, 13
PAUSE 1000
volver
closegrip2:
serout c.0,t2400,($80,$01,$01,1,30) ' velocidad sistema # pasado de 0 a 127
serout c.0,t2400,($80,$01,$04,1,26,127) ' cerrar pinza 26
PAUSE 2000
volver
headleft2:
serout c.0,t2400 ($80, $01, $01,0,20)'set4 para servo #, set5 velocidad de 0to127
serout c.0,t2400,($80,$01,$04,0,15,127) ' cabeza izquierda 15
hacer una pausa en 800
volver
headright2:
' c.0,t2400,($80,$01,$01,0,20) serout ' velocidad sistema # pasado de 0 a 127
serout c.0,t2400,($80,$01,$04,0,32,127) ' cabeza derecha 30
hacer una pausa en 1600
volver
headcenter2:
serout c.0,t2400,($80,$01,$01,0,20) ' velocidad sistema # pasado de 0 a 127
serout c.0,t2400,($80,$01,$04,0,26,127) ' central centro
PAUSE 500
volver
bodyup2:
serout c.0,t2400 ($80, $01, $01,2,30)'set4 para servo #, set5 velocidad de 0to127
serout c.0,t2400,($80,$01,$04,2,13,30) ' cuerpo para arriba, 13
pausa 220
volver
bodydwn2:
serout c.0,t2400 ($80, $01, $01,2,30)'set4 para servo #, set5 velocidad de 0to127
serout c.0,t2400,($80,$01,$04,2,26,30) ' cuerpo abajo 26
pausa de 200
volver
leftfast:
serout c.0,t2400,(128,0,1,127) ' adelante derecha 20 minutos
serout c.0,t2400,(128,0,3,127) ' rev 20 minutos a la izquierda
volver
rightfast:
serout c.0,t2400,(128,0,2,127) ' hacia la izquierda 20min
serout c.0,t2400,(128,0,0,127) ' rev derecha 20 minutos
volver