Hola buen día alguien sabe de que lenguaje de programación es este código
Como
crear un robot de seguidor de líneas basico con un micro Propeller
En
este tutorial pretendo mostrar en forma simple como crear un robot
seguidor de línea básico usando un microcontrolador Propeller, dos
servos y dos sensores QTI.
La idea es que el robot sirva para la primera
competencia de robots seguidores de línea en el marco de la 4ta.
Competencia de Sumo de Robots del Paraguay.
Antes que nada quiero resaltar que es un robot
básico y puede que no sea muy rápido, pero servirá de base para
introducirse en el tema y por un costo de poco más de 60 dólares parece
una buena opción.
El robot está basado en un microcontrolador
Propeller por la simple razón de disponibilidad, pero queda a criterio
de cada uno usar el micro que mas le guste.
Materiales necesarios
Electrónica
2 servos
2 sensores qti
2 cables para los qti
1 Microcontrolador Propeller
1 eeprom de 32k
1 regulador de voltaje 3.3
1 cap 10 uf
1 resistencia 10k
16 espadines
Para programar es necesario el Propeller Plug o un programador serial como el que se muestra en el tutorial del Propeller. En caso de no tener programador les puedo grabar en la eeprom el programa que muestro mas abajo.
Estructura
Plancha de PVC, acrílico o Madera de 10 x 16
2 ruedas (para el tutorial use ruedas hechas de PVC de 4,5cm)
2 tornillos de 3mm con 6 tuercas (el largo del tornillo deberá ser mayor al radio de la rueda + 2cm)
2 cintillos de nylon
Cinta doble faz
Protoboard
Porta pila
Paso uno – la estructura
Cortar el PVC, acrílico o madera según la siguiente plantilla.
El chasis debe quedar más o menos como en la imagen
Modificar los servos para rotación continua como se indica en esta sección, cada marca de servo es diferente pero el concepto es básicamente el mismo.
Una vez modificados fijar los servos entre los dos
agujeros de 5mm usando cinta doble faz y asegurar con los cintillos de
nylon como muestra la imagen.
Luego pasar los cables de los servos al otro lado usando los agujeros de 8mm perforados en el chasis.
Fijar las cruces que vienen con los servos a la rueda usando los tornillos que suelen traer los servos como se ve en la imagen
Colocar las ruedas por los servos y fijarlas con los tornillos negros que traen los servos
Doblar
con calor la pieza de PVC o acrílico de 7cm de forma que quede como una
S y pegar la misma en el centro de la parte trasera.
Es importante que el chasis quede bien horizontal,
para eso hay que variar el tamaño de la pieza de pvc trasera de acuerdo
al tamaño de la rueda.
Utilizar los tornillos de 3mm para fijar los sensores qti con una tuerca como muestra en la imagen.
Luego
colocar otra tuerca al tornillo a aproximadamente la distancia del
radio de la rueda. Por último introducir el tornillo en el agujero de
3mm y colocar una tuerca más para fijar al chasis.
Con este sistema es fácil regular la altura del sensor, lo ideal es que el QTI esté a unos 3mm del piso.
Por ultimo pegar con cinta doble faz el protoboard al chasis para armar ahí nuestro circuito.
El robot debe verse como el de la imagen.
Paso 2 – la electrónica
El diagrama para el robot es el siguiente:
Para
principiantes la manera mas fácil de crear el circuito es usando un
protoboard, por lo tanto consideré basar el tutorial en la utilización
de uno.
Para el montaje del regulador, propeller y eeprom les recomiendo ver este video tutorial.
Paso 3 – el programa
Como
mencioné más arriba la idea del tutorial es para un robot básico por lo
tanto el programa es sencillo y fácil de entender. La lógica utilizada
es muy simple, si el sensor qti de la derecha detecta línea negra
doblar a la derecha, si el sensor qti de la izquierda detecta la línea
negra doblar a la izquierda, si ningún sensor detecta la línea negra ir
adelante.
Para mover los servos se envían pulsos de un ancho variable cada 20
ms, si quieren entender como funciona un servo pueden ver esta información.
El código del programa es el siguiente:
{{
robot seguidor de líneas básico para cuarta competencia de sumo del paraguay
y primer competencia de robots velocistas
pines:
15 servo izquierda
16 servo derecha
14 qti izquierda
17 qti derecha
}}
CON
sensqti = 100 'valor que determina la sensibilidad de los qti variar entre 10 y 1000
VAR
long pila[20] 'pila para reservar memoria para el cog sensores
byte qtider, qtiizq
PUB principal
dira[15..16]~~ 'pines de los servos como salida
pause (3000) 'pausa de 3 segundos al encender (no es necesario para la competencia)
cognew (sensores, @pila) 'inicia cog con metodo para leer qtis
'programa principal
repeat
if qtider == 1 'si el sensor de la derecha detecta la linea negra
derecha 'va a la derecha
else
if qtiizq == 1 'si el sensor de la izquierda detecta la linea negra
izquierda 'va a la izquierda
else
adelante 'si los sensores no detectan linea negra va adelante
pub adelante
outa[15]:=1
pauseus(900)
outa[15]:=0
outa[16]:=1
pauseus(2000)
outa[16]:=0
pause(17)
pub izquierda
repeat 5
outa[15]:=1
pauseus(2000)
outa[15]:=0
outa[16]:=1
pauseus(2000)
outa[16]:=0
pause(17)
pub derecha
repeat 5
outa[15]:=1
pauseus(900)
outa[15]:=0
outa[16]:=1
pauseus(900)
outa[16]:=0
pause(17)
pub sensores
outa[14]~~
outa[17]~~
repeat
dira[14]~~
dira[17]~~
pauseus(sensqti)
dira[14]~
dira[17]~
pauseus(sensqti)
qtiizq := ina[14]
qtider := ina[17]
PUB pauseus(time) | clocks '' Pause for number of microseconds
if time > 0
clocks := ((clkfreq / 1_000_000) * time)
waitcnt(clocks + cnt)
PUB pauses(time) | clocks '' Pause for number of seconds
if time > 0
clocks := (clkfreq * time)
waitcnt(clocks + cnt)
PUB pause(time) | clocks '' Pause for number of milliseconds
if time > 0
clocks := ((clkfreq / 1000) * time)
waitcnt(clocks + cnt)