Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Portapilas
2 Tuercas
Atornillar el portapilas a la base del chasis del SumoBot a travs de los orificios acondicionad
quedar en la parte exterior y las tuercas en el interior.
2 Servomotores Parallax
8 Tuercas
Unir los motores al chasis. La manera mas sencilla de realizar es mantener con un dedo la tuerca mientras co
Mediante los tornillos de 3/8 de pulgada atornillar los soportes para circuito impreso al chas
quedar por la parte inferior.
Colocar los tornillos y los tubos de aluminio en los orificios de la parte frontal del circuito imp
nombre del robot. (ver imagen)
2 Arandelas de Nylon
Introducir los tornillos de 2,5 cm situados en la placa a travs de los orificios en la parte fr
tornillos, colocar 1 arandela de nylon en cada uno y atornilla los tubos de aluminio. Fina
orificios de la parte trasera del circuito integrado.
2 Ruedas
2 Gomas
Ajusta la goma a travs de todo el permetro de la rueda, esto har que el microrobot tenga mayor traccin.
Chasis
2 Ruedas ya preparadas
Con los tornillos negros, fija por eje la rueda a la transmisin del servo motor.
Chasis
Frontal
2 Tuercas
Fija fuertemente el frontal al chasis del SumoBot por los dos agujeros en la parte frontal mediante los dos torn
Chasis.
Chasis.
2 sensores de lnea.
Fija los sensores de lnea en el extremo del tubo de aluminio anteriormente instalado. Conecta los cables que
necesario mantener la polaridad. En el pequeo circuito del sensor vienen las iniciales del cable que correspo
Cables sensores.
Cables motores.
Cables portapilas.
Realiza las conexiones en la placa SumoBot de los motores y sensores segn se indican a continuacin:
X7 = Servo motor izquierdo
X6 = Servo motor derecho
X5 = Sensor de lnea izquierdo
X4 = Sensor de lnea derecho
Tener en cuenta que la letra B en los conectores indica que ah debe ir el cable Negro[Black].
Conecta el pack de pilas al conector X1 de la placa. Es necesario soltar ligeramente los tornillos, introducir los
SumoBot
2 Emisores infrarrojos
2 Receptores infrarrojos
EnsambladodelosemisoresIR
ColocacindelossensoresIR
Montar los diodos dentro de su capuchn, esto se hace para evitar falsos positivos en el receptor. Doblar la
frontal del robot. Cortar ligeramente el receptor para que no sobresalga demasiado en el conector. Insertar los
respectivamente (ver imagen).
Para conseguir un buen desarrollo y una fcil depuracin de los programas es conveniente estructurar el cdigo de manera que co
variables, constantes, entradas y salidas. A continuacin veremos como se definen todos estos elementos.
'PatxiOlivaMurillo
'Competi.BS2
'{$STAMPBS2}
'{$PBASIC2.5}
'[I/ODefinitions]
LMotorPIN13'servomotorizdo
RMotorPIN12'servomotordcho
LLinePwrPIN10'Powersensorlineaizdo
LLineInPIN9'Entradasensorlineaizdo
RLinePwrPIN7'Powersensorlineadcho
RLineInPIN8'Entradasensorlineadcho
LfIrOutPIN4'SalidaIRLEDizdo
LfIrInPIN11'EntradaIRsensorizdo
RtIrOutPIN15'SalidaIRLEDdcho
RtIrInPIN14'EntradaIRsensordcho
SpeakerPIN1'Zumbador
StartLEDPIN0'Led
'[Constants]
LFwdFastCON1000'motorizdoadelantefast
LFwdSlowCON800'motorizdoadelanteslow
LStopCON750'motorizdostop
LRevSlowCON700'motorizdoatrasslow
LRevFastCON500'motorizdoatrasfast
RFwdFastCON500'motordchoadelantefast
RFwdSlowCON700'motordchoadelanteslow
RStopCON750'motordchostop
RRevSlowCON800'motordchoatrasslow
RRevFastCON1000'motordchoatrasfast
'[Variables]
lLineVARWord'sensordelineaizdo
rLineVARWord'sensordelineadcho
blackThreshVARWord'threshold
lineBitsVARNib'sensoresdelineajuntos
lbLeftVARlineBits.BIT1
lbRightVARlineBits.BIT0
irBitsVARNib'Infrarrojos(izdaydcha)
irLeftVARirBits.BIT1
irRightVARirBits.BIT0
lastIrVARNib'ultimalecturainfrarrojos
pulsesVARByte'contadorparacontroldemotores
tempVARByte
tempoVARByte
'[EEPROMData]
RunStatusDATA$FF'Estadoactual
En la seccin I/O Definitions declararemos donde tenemos conectados nuestros sensores y actuadores. En el ejemplo de abajo v
conectados a los pines 13 y 12 respectivamente del nuestro microcontrolador.
Conexindelosmotores
Las secciones de Variables y Constantes establecern los nombres, valores y tamaos que se utilizaran en secciones siguiente
1 word
16 bits
1 byte
8 bits
1 nibble
4 bits
Los nombres de las variables han sido escogidos por su nombre en ingles, de esta manera la letra L indicar Izquierdo y R indic
diferentes sensores consiguiendo con esto una mayor transparencia y rpida identificacin.
Ej:
RLineIn
LFwdFast
Ademas de nuestro programa tambin podremos escribir y leer variables en la memoria EEPROM por lo que definiremos un estado
memoria se realiza mediante las rdenes READ y WRITE.
2.
Inicializacin
El reglamento de competicin en la categora de minisumo especifica que es necesario un tiempo de 5 segundos desde que el rob
periodo es importante sensorizar y reconocer donde se encuentra el contrario para girar y encararlo lo mas rpido posible. Otra pos
contrario no sepa de antemano cual va a ser tu movimiento inicial. En el cdigo de a continuacin se implementan 4 salidas diferen
Tenemos una variable que va tomando valores desde el 0 hasta el 8 circularmente, es decir, cuando sea 8 el siguiente valor de la v
se ejecuta la rutina Reset, esta incrementara en una unidad la variable y comprobara si estamos en valor par (estado de parada)
detallaran mas adelante.
Subrutinasdeinicio
' -----[ Initialization ]--------------------------------------------------
Reset:
READ RunStatus, temp
temp = temp + 1
Start_Delay:
FOR temp = 1 TO 5
FREQOUT Speaker, 100, 2500, 1500
PAUSE 900
NEXT
GOTO inicio1
GOTO inicio4
ENDIF
3.
Programa principal
El principal propsito que debe conseguir el robot es no salirse del rea de juego y como propsito secundario, que no por ello me
Lo primero que se realiza es una llamada a la subrutina Read_Line_Sensors. Esta subrutina hace una lectura de los sensores de
adelante veremos mas detenidamente esta funcin) .Veamos como hemos declarado anteriormente linebits:
lineBits
VAR
Nib
lbLeft
VAR
lineBits.BIT1
lbRight
VAR
lineBits.BIT0
Las variables 1bleft y 1bright guardan el valor 0 para negro y 1 para blanco. Por lo tanto la variable linebits tendr la siguiente
00
Search_For_Opponent
01
Spin_Left
10
Spin_Right
11
About_Face
Con la orden BRANCH lo que hacemos es dirigir el flujo del programa segn el valor de dicha variable.
Main:
GOSUB Read_Line_Sensors
' Si no se encuentra en el borde de la pista, continua buscando oponente
' en caso contrario dar media vuelta
BRANCH lineBits, [Search_For_Opponent, Spin_Left, Spin_Right, About_Face]
Spin_Left:
' sensor derecho activo, girar a la derecha
FOR pulses = 1 TO 20
PULSOUT LMotor, LRevFast
PULSOUT RMotor, RFwdFast
'Mientras gira leer tambien los sensores IR
GOSUB Read_IR_Sensors
IF (irbits = %01) THEN Follow_Right
IF (irbits = %10) THEN Follow_Left
IF (irbits = %11) THEN Lunge
'Fin mientra gira leer sensores IR
PAUSE 20
NEXT
lastIr = %00
GOTO Main
Spin_Right:
' sensor izquierdo activo, girar a la derecha
FOR pulses = 1 TO 20
PULSOUT LMotor, LFwdFast
PULSOUT RMotor, RRevFast
'Mientras gira leer tambien los sensores IR
GOSUB Read_IR_Sensors
About_Face:
' ambos sensores en Shikiri, hacia atrs y girar
FOR pulses = 1 TO 10
PULSOUT LMotor, LRevFast
PULSOUT RMotor, RRevFast
PAUSE 20
NEXT
FOR pulses = 1 TO 30
' girar
En caso de que ninguno de los dos sensores detecte la lnea de borde, se llama a la subrutina Search_For_Opponent. Esta
sensores infrarrojos para buscar y seguir al oponente. El tratamiento dado a las variables sigue la misma filosofa que en el caso a
01
10
11
Scan
Follow_Right
Follow_Left
Lunge
Search_For_Opponent:
GOSUB Read_IR_Sensors
' Si no esta el oponente a la vista, escanea la ultima direccin conocida, si lo ve con un ojo
FOR pulses = 1 TO 5
PULSOUT LMotor, LFwdSlow
PULSOUT RMotor, RRevSlow
PAUSE 20
NEXT
GOSUB Creep_Forward
GOTO Main
Scan_Left:
FOR pulses = 1 TO 5
PULSOUT LMotor, LRevSlow
PULSOUT RMotor, RFwdSlow
PAUSE 20
NEXT
GOSUB Creep_Forward
GOTO Main
Follow_Right:
GOTO Main
Follow_Left:
Lunge:
FOR pulses = 1 TO 25
4.
Subrutinas
En este apartado se especifican las subrutinas que utilizaremos a lo largo del programa: lectura de los sensores de lnea, lectura d
salidas que tenemos configuradas para nuestro robot.
Read_Line_Sensors:
HIGH LLinePwr
HIGH RLinePwr
HIGH LLineIn
HIGH RLineIn
PAUSE 1
RCTIME LLineIn, 1, lLine
LOW LLinePwr
LOW RLinePwr
Read_IR_Sensors:
FREQOUT LfIrOut, 1, 38500
irLeft = ~LfIrIn
irRight = ~RtIrIn
RETURN
Creep_Forward:
' Movimiento por defecto
FOR pulses = 1 TO 20
PULSOUT LMotor, LRevFast
PULSOUT RMotor, RFwdFast
PAUSE 20
NEXT
RETURN
inicio1:
FOR pulses = 1 TO 25
NEXT
GOTO Main
inicio2:
inicio3:
FOR pulses = 1 TO 50
PULSOUT LMotor, LFwdFast
PULSOUT RMotor, RRevFast
NEXT
FOR pulses = 1 TO 50
PULSOUT LMotor, LFwdFast
PULSOUT RMotor, RFwdFast
GOSUB Read_Line_Sensors
NEXT
FOR pulses = 1 TO 120
inicio4:
FOR pulses = 1 TO 50
PULSOUT LMotor, LRevFast
PULSOUT RMotor, RFwdFast
NEXT
FOR pulses = 1 TO 50
PULSOUT LMotor, LFwdFast
PULSOUT RMotor, RFwdFast
GOSUB Read_Line_Sensors
NEXT
FOR pulses = 1 TO 120
PULSOUT LMotor, RRevFast
PULSOUT RMotor, LFwdFast
NEXT
GOTO Main
Diagramadeflujodelprograma
http://www.msebilbao.com/tienda/product_info.php?cPath=53_95&products_id=132
http://www.roboteknia.mx/revista/roboticistas/manuales/sumobot-roboteknia