Sie sind auf Seite 1von 40

TALLER DE INTRODUCCION AL LENGUAJE DE

PROGRAMACION ROBOTC
Del juego al robot el
camio e! Lego"
Contenido:
Presentacin
Conociendo al NXT
RobotC
Motores
Sensores
Trabajando con pantalla
Anexo
www.creativecommons.org
Te#arac$o % UNAM
Pre!etaci % Co &u 'amo! a trabajar(
Antes de que acabe este siglo, los seres humanos ya no sern los seres
ms inteligentes o ms capaces del planeta... Ray Kurzweil
Cuando se asiste a una exposicin de robtica, en la mayora de los casos se espera encontrar una Robotina o un R2D2
totalmente funcional con el cual poder conversar. En un principio, estas expectativas parecan sueos solo alcanzables por el
sptimo arte. Sin embargo, durante el ltimo lustro el avance tecnolgico nos permite suponer que estamos muy cerca de ver
realizados estos sueos.
Actualmente podemos ver robots realizando tareas humanas en industrias como la automotriz, la aeronutica e incluso en
situaciones de alto riesgo como es durante la negociacin con criminales en casos de rehenes o en la exploracin de terrenos
peligrosos. La robtica se muestra como un nuevo horizonte para la humanidad; el momento en que se logre crear un robot
totalmente inteligente, ser probablemente el momento ms importante de toda la Historia, pues el hombre habr creado una
inteligencia tan inteligente como la suya. Desde luego, este evento, aunque cercano, an se encuentra a unas dcadas de
distancia.
Por lo pronto, considerables sectores de la humanidad se unen a esta bsqueda de
conocimiento, en parte, gracias al abaratamiento de los materiales y las tecnologas necesarias
para construir un robot. Tambin los pases subdesarrollados, como es nuestro caso,
pueden explorar e incluso innovar en esta rea, ejemplo de ello son los logros alcanzados
por la Facultad de ngeniera de la UNAM que entre otros, este ao se posiciono como
tercer lugar a nivel mundial en la creacin de un robot para el hogar (dicho de otra forma: una
robotina). Tan es as, que actualmente podemos encontrar en el mercado juguetes que son en
realidad pequeos robots, tal es el caso del Lego NXT. Es precisamente con este juguete tan
especial con el cual vamos a trabajar durante el curso.
El Lego NXT nos permite introducirnos de una manera prctica y sencilla al mundo de la
robtica, gracias a que se encuentra diseado de forma tal que tan slo es necesario armar y
programar, sin que el usuario se vea en la necesidad de disear y construir los Sensores o los
motores incluso el propio microprocesador. Gracias a estas ventajas, resulta bastante ameno
construir pequeos robots, que con un poco de paciencia y algo de ingenio son capaces de realizar las ms bastas tareas.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
)
Sin embargo, para poder utilizar este robot (a partir de ahora lo nombraremos NXT) es necesario saber programar. El NXT
incluye un lenguaje de programacin grafica bastante sencillo de utilizar pero que limita al usuario, es preferible utilizar
lenguajes de bajo nivel como el C o el JAVA, en este curso utilizaremos una adaptacin comercial del lenguaje C, llamada
RobotC, este lenguaje nos facilita la programacin debido a que incluye las funciones y los comandos necesarios para
manejar el NXT y sus componentes, de esa forma solamente es necesario programar para resolver en
lugar de programar para controlar.
El presente documento no supone una gua completa de RobotC, mas bien una
introduccin muy rpida y sencilla a este lenguaje y a los componentes del NXT. Se
espera dotar al alumno de los conocimientos bsicos necesarios para que pueda
seguir su aprendizaje de manera autodidacta, no solo en el manejo de este lenguaje
tambin como incentivo para aprender otros lenguajes y otras tecnologas que le
permitan, en un futuro, poder construir sus propios robots.
El curso se encuentra dividido en dos partes: la primera nos muestra la estructura
fsica del NXT y la segunda se enfoca a la programacin. Es importante abordar el
curso en este orden, ya que no es posible programar un sensor sin saber
como funciona, ni mucho menos suponer como va actuar el NXT con
X o Y instruccin si no sabemos como funciona, ni como se
comporta fsicamente.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
*
Bric+ N,T
Coocie-o al N,T % Nuestro robot de prctica
El Lego NXT es el ltimo modelo de la serie de juguetes MindStorms que fabrica la popular compaa
Lego, aunque esta dirigido a nios de 12 aos en adelante, en la realidad los que ms utilizan este
juguete son los adultos, en parte por lo sofisticado de sus componentes y en parte por el amplio horizonte
de cosas que se pueden hacer con l.
Durante este apartado conoceremos las caractersticas tcnicas del NXT y de sus componentes ms
comunes. De esta forma podremos comprender su funcionamiento, lo que nos permitir programarlo en el
siguiente apartado.
El NXT se puede conseguir a travs de nternet o dentro del pas en tiendas dedicadas como Robotics3d
o Robodacta, tambin es posible hallarlo en algunos Samborns de la capital pero su precio aumenta
considerablemente, regularmente ste oscila entre $ 4,000 y $ 5,000 pesos (MX) pero vara segn la
paridad del dlar (US).
Lo venden como un Kit, que contiene una batera, tres servomotores, cuatro sensores, un Brick, un cable
USB, llantas de diversos tamaos as como varias decenas de piezas que permiten armar diversas
estructuras y formas asi como un manual bsico de construccin.
Las partes que conforman el NXT se pueden agrupar en:
1. El Brick,
2. los motores,
3. los sensores y
4. los accesorios.
La parte ms importante del NXT es el Brick, en l se encuentra el
procesador y la memoria del NXT, es en otras palabras, el cerebro de
nuestro robot, as como la fuente de poder del mismo, pues cuenta con
una ranura para la insercin de batera.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
.
1988: LEGO y el
MT colaboran en el
desarrollo de un
"ladrillo inteligente
que de vida a las
creaciones LEGO va
programacin por
ordenador. En 2006
Surge el NXT.
El Brick cuenta con un Microprocesador ARM7 de 32 bits que corre a 48 MHz, as como una memoria de
256 Kb y una RAM de 64 Kb, lo que le permite almacenar y correr sus propios programas sin tener que
estar conectado a una computadora, lo que aunado a su bajo consumo elctrico y a la posibilidad de
alimentarse de 6 pilas AA o de una batera general recargable (que es mucho mas recomendable) le
provee de una autonoma muy valiosa a la hora de disear nuestros modelos.
Para el uso de los sensores cuenta adems con un microprocesador dedicado AVR de 8 bits a 8MHz,
con 4Kb de memoria y 512 Kb de RAM. Tiene 7 conectores RJ-12 con el tope a la derecha de 6 hilos para
conectar los sensores y los motores.
Para mostrar informacin y poder realizar la seleccin de programas guardados en el Brick, ste cuenta
con un Display LCD de 100*60 pxeles con un pad de 4 botones. Adems de un Speaker interno para
emitir sonidos.
Se puede comunicar con la computadora mediante interfaz USB 2.0 de alta velocidad y Bluetooth Clase
con un alcance de hasta 10 metros. Esta tecnologa le permite mantener comunicacin con otros NXT e
incluso con celulares y PDAs.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
/
El nombre de
Bluetooth procede del
rey dans del siglo X
llamado Harold
Bluetooth, conocido por
unificar las tribus de
Noruega, Suecia y
Dinamarca.
RobotC 0 El lenuaje del NXT
Lego provee de manera comercial un software que permite al usuario programar el NXT, conocido como
ensamblador Lego, este programa permite (mediante dibujos) que cualquier usuario pueda, incluso sin
tener conocimientos previos de programacin, controlar el NXT.
Sin embargo, el software de Lego tiene grandes limitaciones en el mbito acadmico y practico, ya que
limita la programacin a las funciones que se incluyen en el software, en cambio RobotC nos permite crear
nuevas tareas para el NXT. ste lenguaje de programacin fue creado por Robotics Academy y le llamo
de esta forma debido a que esta basado en el lenguaje de bajo nivel: "C.
Si el lector cuenta con alguna experiencia previa en la estructura y la lgica de Lenguaje C, pronto
descubrir lo sencillo que es aprender RobotC, debido a su gran parecido gramatical, estructural y lgico.
RobotC es un programa comercial que se puede adquirir en tiendas especializadas de robtica o a travs
de nternet, afortunadamente, pertenece al grupo de Software denominado Shareware. As, podemos
utilizar la versin de prueba (que es totalmente funcional) durante 30 das.
nstalar RobotC es muy simple, puedes consultar los cuatro pasos para lograrlo en la seccin de Anexos
al final del manual. Es importante mencionar que hasta el momento en que se escribi este manual no
existe una versin de RobotC para sistema alguno distinto de Windows, ni tampoco una versin en
espaol.
La interfaz de RobotC es muy sencilla y su uso es mayoritariamente intuitivo, de ah que no sea
necesario abordar a fondo la manera de utilizar la interfaz de RobotC, basta con que conozcamos las
partes de la Pantalla del Software a las que nombraremos en este manual de la siguiente forma:
1. Men
2. Barra de Funciones
3. Numerador
4. Escritorio
Elaborado por: Eduardo Muz Trejo. Octubre 2007
1
Se denomina
Shareware a una
modalidad de
distribucin de
software para que el
mismo pueda ser
evaluado de forma
gratuita, pero
generalmente por un
tiempo especifico,
aunque tambin las
limitaciones pueden
estar en algunas de
las formas de uso o
las capacidades
finales.
!a pantalla de RobotC
El escritorio es la zona de edicin del cdigo, en la barra de Funciones, ubicada a la izquierda del
escritorio podemos encontrar todas las funciones que acompaan a RobotC, desde luego, en el presente
curso solo abordaremos algunas de ellas, depende de cada usuario experimentar y aprender sobre las
otras.
Una vez que terminas de escribir tu cdigo fuente sin errores gramaticales y has
conectado y encendido el NXT al ordenador, puedes compilar tu programa
presionando la tecla F5 o a travs del men Robot > Download Program.
Si el cdigo se encuentra correctamente escrito y el NXT esta conectado a la
computadora, aparecer un cuadro de dilogo desde el cual podrs ejecutar el
cdigo.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
Escritorio
Numerador
Barra de
Funciones
Men
2
Para poder
establecer
comunicacin con el
NXT a travs de la
computadora, es
necesario instalar el
Firmware de
MindStorms, que se
puede entender como
"los controladores del
NXT.
ste se puede
descargar de nternet
de manera totalmente
gratuita.
"structura # Sintaxis de RobotC
Al igual que cualquier otro idioma, RobotC cuenta con una estructura y una sintaxis propias, sin embargo,
stas resultan ser muy parecidas a las del lenguaje C, sin duda gracias a que RobotC esta inspirado en
ste lenguaje. Para empezar es necesario mencionar que RobotC distingue maysculas de minsculas: no
es lo mismo escribir motor que Motor.
Existen en RobotC una lista de 162 palabras reservadas, esto significa que no se pueden usar dichas
palabras de forma libre, pues representan alguna funcin o algn comando dentro del propio lenguaje.
Afortunadamente para nosotros, todas estas palabras son en ngles y solo hay algunas excepciones con
las palabras que se escriben como en el espaol, ejemplo: motor.
Todas las instrucciones, con excepcin de las sentencias de control, deben de terminar con un punto y
coma (;), adems, siempre que se abra algn parntesis (()) o un corchete ({}) se debe de cerrar.
En trminos muy generales, la estructura general de un programa escrito en RobotC es:
// 0 Inclusion de archivo externos
// 1 Declaracion de variables globales
// 2 Firma de Funciones
task main(){
// 3 Declaracin de sensores
// ! Instrucciones
"
//Funciones
Es muy raro utilizar alguna librera o un archivo externo en el desarrollo de software para el NXT con
RobotC, sin embargo, si se llegara a utilizar, es necesario que primero se compile la librera en el NXT
para posteriormente poderla llamar desde otro programa compilado en el mismo NXT.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
3
El task main() es de carcter obligatorio ya que es el cuerpo principal del programa, expresado de otra
forma, es la primer funcin que se ejecuta al iniciarse el programa. La declaracin de sensores debe de
ser la primer instruccin del main (siempre y cuando se utilicen).
Por debajo del main y slo si se han firmado antes, se escriben las funciones; en caso de que no se firmen
las funciones, el main deber de ser el ultimo bloque del programa. Es ms recomendable firmar las
funciones que usar el main() hasta el final.
La forma de firmar una funcin es:
Tipo nombre (parmetros);
En la sentencia anterior se menciona la palabra "tipo, esta palabra hace referencia al valor que devuelve
la funcin una vez terminada su ejecucin, sin embargo estos tipos son propios de las variables a utilizar, y
existen cuatro de ellos:
INT
FLAT
LN!
BL
Contiene nmeros enteros con signo o sin signo (hasta 32 768)
soporta nmeros decimales y nmeros con exponente. (4 bytes)
soporta nmeros decimales y nmeros con exponente. (8 bytes)
Contiene dos valores: true o false
Existe otro tipo que se utiliza para indicar al compilador que X funcin no devuelve ningn valor y es "oid#
F$nciones
Una funcin es un pequeo algoritmo utilizado dentro de otro algoritmo mayor, sirve para simplificar el
trabajo y para estructurar de mejor forma tu cdigo. Supongamos que tienes un programa que en distintas
condiciones debe de sumar dos nmeros, si escribieras esta suma en cada ocasin que la necesitas, las
lneas de tu cdigo se duplicaran y adems se complicara mucho el cdigo, mejor que eso es usar una
funcin que te ejecute esa instruccin. As, solo tendras que llamarla y recibir los resultados devueltos.
Ejemplo:
#loat suma(#loat n1$ #loat n2){
#loat r%
r & n1 ' n2%
return r%
"
Elaborado por: Eduardo Muz Trejo. Octubre 2007
4
Una funcin es un
subalgoritmo, es el
trmino para describir
una secuencia de
rdenes que hacen una
tarea especfica de una
aplicacin ms grande.
As, slo basta con escribir suma(numero1,numero2) aplicando a un ejemplo cualquiera: suma(1,2)
y el resultado devuelto seria 3, puede que en un ejemplo tan sencillo como este no se alcance a
comprender en toda su magnitud la enorme ventaja de usar funciones, pero supongamos que tu funcin
no solo suma, sino que adems realiza la cotizacin bancaria del dlar basndose en los puntos de la
Bolsa de Valores, definitivamente usar una funcin es mucho ms sencillo y cmodo que repetir este
procedimiento cada vez que se utilice.
Adems de contar con funciones, puedes ayudar a otros programadores e incluso a ti mismo a entender
mejor el cdigo fuente del programa usando comentarios. Un comentario es una frase o un breve texto
que explica lo que realiza un segmento del cdigo o lo que se supone que debe de realizar. Este texto es
ignorado por el compilador pero no por ello representa un gasto intil de tiempo o de esfuerzo, al contrario,
con el paso de los meses, cuando deseemos reutilizar o mejorar un programa que desarrollamos en el
pasado, es muy probable que no recordemos con exactitud para que usamos tal o cual instruccin, gracias
al cdigo fuente podemos recordarlo fcilmente!, as que no escatimes en colocar comentarios a tu cdigo
fuente.
Los comentarios se colocan de la siguiente forma:
%% &omentario de so'o $na '(nea
%) &$ando se $sa diagona' y asterisco
Indica *$e es $n comentario de "arias '(neas )%
Sentencias de &ontro'
El flujo de un programa escrito en RobotC es totalmente lineal. Se ejecuta la primer lnea, la segunda,
luego la tercera y as sucesivamente, hasta que no quedan lneas que ejecutar. Pero Qu pasa si solo
queremos que se ejecuten ciertas lneas bajo ciertas circunstancias?
Para lograrlo, es necesario utilizar sentencias de Control: las sentencias de control son comprobaciones
basadas en valores binarios para determinar si una condicin se cumple o no.
Un ejemplo muy cotidiano es: "Hijo, si llueve, cierras las ventanas, pero sino, riegas las plantas en esta
situacin se da una condicional (la lluvia) y dos acciones distintas por si se cumple o no dicha condicional.
Esto es posible mediante la instruccin i+ (condicin) {,instrucciones }
Elaborado por: Eduardo Muz Trejo. Octubre 2007
56
Un compilador es un
programa informtico
que traduce un
programa escrito en un
lenguaje de
programacin a otro
lenguaje de
programacin,
generando un programa
equivalente que la
mquina ser capaz de
interpretar.
f se puede componer de distintas condiciones que se suman y a travs de ellas se determina si es
correcto o no ejecutar las instrucciones contenidas entre corchetes.
Las condiciones se logran mediante el uso de operadores de comprobacin, estos son los siguentes:
-erador S(mbo'o .escri-ci/n
gual a
Mayor que
Menor que
Menor o gual que
Mayor o gual que
Distinto a
00
1
2
20
10
30
Devuelve true si ambos factores son iguales
Devuelve true si el factor a la izquierda es mayor.
Devuelve true si el factor a la derecha es mayor.
Devuelve true si el factor a la izquierda es menor o igual.
Devuelve true si el facto a la derecha es menor o igual.
Devuelve true si los factores son distintos entre si.
Si se desea realizar mas de una operacin booleana en una sola asignacin se deben de utilizar alguno de
los siguientes caracteres:
La sentencia F acepta una excepcin que es e'se o e'se i+ que se usan cuando la primer condicin
resulto ser false, si se utiliza else, la segunda opcin se usa por defecto, pero si se utiliza else if, se obliga
al programa a realizar primero la comprobacin de if y luego la comprobacin de else if. As, la estructura
es:
i#(a(b){
//)rimer com)robacin*
"else i# ((a'+),&b){
//segunda com)robacin*
"else{
// Instruccin- e.ecutada x/ue no se e.ecut las anteriores
"
Existe otra estructura de control denominada switch, esta opera bajo la lgica de que una condicin puede
tener muchos posibles estados y no solo dos (0 o 1), por ejemplo, una variable puede valer 1 o 2 o 3 o 4 o
Elaborado por: Eduardo Muz Trejo. Octubre 2007
44
55
Solo si ambas condiciones son true, se devuelve true (AND)
Si alguna de las condiciones es true, se devuelve true (OR)
55
infinito -1 y el programa puede realizar una funcin distinta dependiendo del valor de la variable, la
estructura de Switch es:
s0itch(a){
scase 1-
//Instrucciones*
break%
scase 2-
//Instrucciones*
break%
scase 3-
//Instrucciones*
break%
de#ault-
//Instrucciones e.ecutadas )or /ue no se e.ecut otra*
break%
"
Podemos observar que es muy parecido a una cadena de "}else if{" pero este sistema es mas eficiente en
cuanto a rendimiento de memoria, pues mientras que en el F es necesario recorrer cada comprobacin
para llegar a la correcta, en el switch, el comprador brinca de inmediato a la opcin (case)correcta.
Rec$rsi"idad
Hace un momento mencionamos que las lneas del programa se ejecutan de forma lnea, pero en muchas
ocasiones no solo es necesario decidir si ejecuto una lnea o no, tambin es necesario ejecutar una lnea
mientras que se cumpla una condicin. A esto se le llama recursividad
La recursividad es Propiedad de algunos lenguajes de programacin de permitir que un programa solicite
su propia ejecucin en el curso de su desarrollo.
Las sentencias de recursividad o b$c'es al igual que las de control, funcionan mediante comprobaciones,
la diferencia es que en stas, el conjunto de instrucciones encerradas entre los corchetes se ejecutan
indefinidamente hasta que se cumpla la condicin. Es importante subrayar la palabra: NDEFNDAMENE
ya que si se planea mal un programa y resulta que jams se va a cumplir la comprobacin, entonces se
Elaborado por: Eduardo Muz Trejo. Octubre 2007
5)
dice que se entro en un "bucle infinito, lo que ocasiona que el sistema (robot y computadora) se saturen
de trabajo y colapse, que es lo mismo que "trabarse.
En robotC existen tres sentencias de recursividad: +or, 67i'e, do, la diferencia entre ellas radica en la
forma en la que cada una realiza su repeticin.
La sentencia for es una sentencia de conteo preestablecido. Significa que se va a repetir la accin cierto
nmero de veces y no mas, el propio for cuenta con una estructura de conteo:
+or (,"a'or inicia'8 ; ,&ondici/n8; ,incremento8)
{
%% instr$cciones
}
En valor inicial se indica con cuanto va a iniciar el ciclo la variable de control, en condicin, cuando va a
terminar el ciclo, y el incremento es en cuanto va a variar la variable de control cada vez que se ejecute un
ciclo.
Otra forma de recursividad son el 97i'e y el .o, ambos funcionan de la misma forma, excepto por qe el
Do asegura que el cdigo por lo menos se va a ejecutar una vez.
67i'e (,&ondici/n8) {
%% instr$cciones
}
do {
%% instr$cciones
} 67i'e (,&ondici/n8)
Elaborado por: Eduardo Muz Trejo. Octubre 2007
5*
E!tructura Itera -e u
7er'omotor N,T
Motores
La forma correcta de nombrar los motores del NXT es: Servomotores. La diferencia entre un motor y un
servomotor radica en que el motor tan solo es una bobina que gira en un sentido u otro dependiendo de la
corriente, mientras que un servomotor incluye un juego de engranes que nos permiten controlar tanto la
velocidad de giro como la cantidad de revoluciones que ejecuta el motor.
La gran ventaja de estos servos radica en que se puede detener el motor en un punto especifico con una
precisin de un grado; de esta forma es posible, por ejemplo ordenar que el motor se detenga justo dos
grados antes de que de un giro completo.
Tambin nos permite calcular la distancia recorrida por el robot tomando en cuenta el dimetro de su
rueda y el nmero de revoluciones que ha dado el motor. Todo esto es posible mediante programacin,
gracias al conteo de encoders. Un encoder es un "clic del motor y equivale a 1 grado de giro.

Los servomotores del NXT se conectan en los puertos A, B y C. Y son nombrados segn el puerto al
cual estn conectados, de esta forma si un servo esta conectado en el puerto A, entonces dicho servo se
denomina motorA.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
5.
La forma de calcular
la distancia recorrida
por una llanta en base a
las revoluciones que a
dado es:
La velocidad de los servos se indica mediante valores que pueden ir del :;<< al ;<<. ndicando con el
cero que el motor se encuentra inactivo y los extremos (100 y -100) las velocidades mas altas alcanzadas
en un sentido u en otro. Se recomienda no utilizar velocidades mayores a
+
/- 95 para no forzar los motores
y producirles algn dao. En RobotC, no es necesario declarar los servos antes de utilizarlos.
Mediante el mismo comando, es posible tanto leer la velocidad actual del servo como de asignar
velocidades, el conteo de los encoders no es infinito, al llegar a
+/-
32 768 se reinicia a 0.
//1rograma 01- 2otores
task main(){
0hile(n2otor3ncoder4motor56,+0){
motor4motor56&7+%
"
1la89ound (sound:o0;u<<)%
"
En este ejemplo, el motor conectado al puerto A, girara durante 50 encoders a una velocidad de 75%,
luego, se detendr y emitir un sonido descendente mediante el comando "='aySo$nd ( ), que recibe
como comando una constante predefinida que le indica que tipo de sonido emitir. Estas constantes son:
soundBeepBeep
soundBlip
soundDownwardTones
soundException
soundFastUpwardTone
s
soundLast
soundLowBuzz
soundShortBlip
soundUpwardTones
PROBLEMA #1
Haz que el robot avance en lnea recta hasta que la llanta gire 4 vueltas completas, luego deber
de dar vuelta hacia un lado y detenerse.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
5/
Cdi o RobotC
Sensores
Un sensor es un dispositivo diseado para recibir informacin de una magnitud del exterior y
transformarla en otra magnitud, normalmente elctrica, que seamos capaces de cuantificar y manipular.
Normalmente estos dispositivos se encuentran realizados mediante la utilizacin de componentes pasivos.
Los componentes pasivos son todos aquellos componentes que varan su magnitud en funcin de alguna
variable.
Algunos tipos de sensores son.
Fotoe'>ctricos: La construccin de este tipo de sensores, se encuentra basada en el empleo de una
fuente de seal luminosa (lmparas, diodos LED, diodos lser etc.) y una clula receptora
de dicha seal, como pueden ser fotodiodos, fototransistores o LDR etc.
Sensores de contacto: Estos dispositivos, son los ms simples, ya que son interruptores que se
activan o desactivan si se encuentran en contacto con un objeto, por lo que de esta manera
se reconoce la presencia de un objeto en un determinado lugar.
Sensores -or $'trasonidos: Este tipo de sensores, se basa en el mismo funcionamiento que los de tipo
fotoelctrico, ya que se emite una seal, esta vez de tipo ultrasnica y esta seal es
recibida por un receptor.
El Kit del NXT contiene 4 sensores que podemos utilizar para dotar a nuestro robot de la capacidad de
interactuar con el ambiente, estos sensores son:
1. Sonar
2. nfrarrojo o R
3. Touch
4. Sonido
En robotC es necesario declarar el sensor antes de utilizarlo, esto se logra mediante la instruccin:
SetSensorTy-e ?puerto@ sensorA luego solo es necesario usar: SensorBa'$e ?puertoA.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
51
Un ejemplo de
resistencia pasiva son:
PTC, NTC y LDR.
Sensor Sonar
El sensor sonar se puede identificar por su forma rectangular que tiene dos crculos que en ocasiones dan
la apariencia de ser una cabeza de juguete. Se conecta a cualquier puerto del NXT y se declara utilizando
la funcin: SetSensorType ( ) antes de empezar a utilizarlo.
El parmetro utilizado para declarar el sensor sonar es: sensorSNAR, este
parmetro es enviado como la segunda variable requerida por la funcin
SetSensorType (puerto, sensorSONAR).
El funcionamiento de ste sensor se basa en la emisin y la recepcin de ultrasonido. El sensor
emite una frecuencia continua de sonido ultrasnico que al rebotar sobre los objetos del ambiente regresa
al sonar, de manera automtica, este calcula el tiempo en que tarda la seal en rebotar y en base a eso
determina a que distancia se encuentra el objeto en el cual reboto el sonido.
El mximo alcance del sonar es 2.5 metros lineales y hacia al frente del sensor sonar. Cuando no existe
ningn objeto con el cual choque la frecuencia ultrasnica en menos de este rango con el cual pueda
rebotar el sonido, el sensor devuelve un valor nulo: cero. Veamos un uso prctico de este sensor:
//1rograma 03- sensor 9=>5?
task main(){
9et9ensor@8)e(91$sensor9=>5?)%
0hile(true){
nxtDis)la89tring(1$ AB3dA$ 9ensorCalue4916)%
"
"
Elaborado por: Eduardo Muz Trejo. Octubre 2007
52
Ultrasonido: Sonido
cuya frecuencia de
vibraciones es superior
al lmite perceptible por
el odo humano. Tiene
muchas aplicaciones
industriales y se emplea
en medicina
Cdi o RobotC
En el programa anterior utilizamos una nueva funcin desconocida hasta el momento: nCt.is-'ayString
(), sta funcin sirve para imprimir en pantalla un mensaje, en este caso se imprime el valor que regresa el
sensor conectado al puerto S1 en la lnea 1 de la pantalla, como es un campo variable, se utiliza el formato
de cadena: DEd que indica a RobotC que es un campo numrico entero (d) formateado en tres dgitos (3).
PROBLEMA #2
Es necesario realizar un programa que haga que el robot avance en lnea recta siempre y cuando el
sonar devuelva un valor superior a 35, en cuyo caso: deber girar hacia un lado y continuar
avanzando en lnea recta.
Existe otro comando utilizado para emitir sonidos por el altavoz, ste es:
='ayImmediateTone (frecuencia@ duracin); recibe como parmetro un numero entero
que es la frecuencia a reproducir por el altavoz y un numero igualmente entero que es la
duracin del sonido que debe emitir.
A continuacin realizaremos un programa que nos permita medir la distancia entre el robot y el objeto mas
cercano que nos permita ver y or el valor de esta distancia:
//1rograma 0+- sensor 9=>5?
task main(){
9et9ensor@8)e(91$sensor9=>5?)%
0hile(true){
nxtDis)la89tring(1$ AB3dA$ 9ensorCalue4916)%
1la8Immediate@one(9ensorCalue4916$10)%
"
"
Combinado con otros sensores y con imaginacin y creatividad, es posible realizar muchas cosas con el
sensor Sonar, por ejemplo: un radar. Para realizarlo solo necesitas una base que pueda girar en su propio
eje, colocar el sensor sonar en ella e ir tomando mediciones cada 4 o 5 encoders e irlas graficando en el
Display del NXT, para hacerlo necesitaras algunas funciones que veremos en el capitulo 7.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
53
Cdi o RobotC
El sonido se
desplaza a 334 metros
por segundo en el aire a
20 C, lo que significa
que la tasa de medicin
del sensor Sonar es de
tan solo 0.0145
segundos, que es lo
que le toma al sonido ir
y venir en una distancia
de 2.5 metros. (en total
recorrer 5 metros).
8it -el Lego N,T
PROBLEMA #3
Realice un programa que haga que el robot trate de seguir tu mano cuando esta se encuentre cerca
de su sonar, y que cuando se encuentre muy cerca de ella se detenga y espere, si la mano se aleja
demasiado, debe de buscarla. Nota: es probable que no funcione del todo bien con tu mano,
gracias a las rugosidades de la misma, te recomiendo usar un cuaderno que simule ser tu mano.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
54
Sensor $n%rarrojo ($R)
El sensor infrarrojo o nfrared (R) pude cuantificar la cantidad de luz infrarroja en el ambiente, tanto por
recepcin como por reflejo. Cuenta con dos pequeos diodos, uno ubicado encima del otro, el de la parte
inferior es mejor dicho un Led rojo que emite luz de ste color cuando el sensor se encuentra en
su estado Acti"e y se mantiene apagado en el estado Inacti"e.
Se puede conectar en cualquier puerto y devuelve valores de entre 0 y 100, siendo 0 la
nulidad en luz infrarroja y el 100 la mxima cantidad captable por el sensor. Cuando el
sensor se encuentra en su estado inactive es posible utilizarlo para detectar colores, sin
embargo, como esta no es su funcin, es muy difcil calibrarlo y resulta con graves errores
de medicin, debido a que mide la cantidad de luz reflejada por un color u otro y no propiamente el
color, as que si la fuente de iluminacin vara, la medicin tambin. Para medir colores MindStorms a
puesto a la venta un sensor especifico que se vende por separado.
Al igual que con todos los sensores, el R se debe declarar antes de empezar a utilizarlo, para hacerlo se
utilizan los parmetros:
sensorLig7tActi"e sensorLig7tInacti"e
Que corresponden cada uno a su estado Activo y a su estado nactivo respectivamente. La ventaja de
utilizar el estado active consiste en que se obtiene una lectura mas "leal gracias a que se le suma a la luz
del ambiente la luz emitida por el propio sensor, lo que reduce considerablemente el "ruido existente por
otras frecuencias de luz.
Es muy importante mencionar y tener en cuenta a la hora de programar nuestros robots que por ningn
motivo es aceptable utilizar el sensor infrarrojo bajo luz solar directa, debido a que el sol emite enormes
cantidades de luz infrarroja, el sensor devolvera constantemente un valor de 100 y podra estropearse por
tanta energa lumnica.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
)6
La longitud de onda
de los rayos infrarrojos
es menor que la de las
ondas de radio y mayor
que la de la luz visible.
Oscila entre
aproximadamente 10
-6
y
10
-3
metros.
//1rograma 07- sensor I?
task main(){
9et9ensor@8)e(92$sensor:igth5ctive)%
0hile(true){
nxtDis)la89tring(2$ AI?- B3dA$ 9ensorCalue4926)%
1la8Immediate@one(9ensorCalue4926$10)%
"
"
El sensor R es muy socorrido en el juego de ftbol, debido esto a que se utiliza en este tipo de
competencias una pelota de emisin infrarroja que emite esta luz invisible en todas direcciones, as los
robot pueden ir hacia ella y tratar de llevarla a la portera.
Ahora vamos a realizar un programa que sigua una luz infrarroja. Para ello es necesario tener conectado
un motor en el puerto A y otro en el puerto B, as como el R en el puerto S1 y configurado en su modo
Active.
//1rograma 0D- sensor I?
task main(){
9et9ensor@8)e(92$sensor:igth5ctive)%
0hile(true){
i#(9ensorCalue4926(70){
nxtDis)la89tring(2$ AI?-B3d 3>EA$ 9ensorCalue4926)%
motor4motor56&0%
motor4motor;6&0%
"else{
nxtDis)la89tring(2$ AI?-B3d ;F9A$ 9ensorCalue4926)%
motor4motor56&G0%
motor4motor;6&HG0%
"
"
"
Elaborado por: Eduardo Muz Trejo. Octubre 2007
)5
Cdi o RobotC
Cdi o RobotC
Citlalli9 Ua !oluci #ractica -e
tre! !e!ore! #ara la :alta -el
IR !ee+er; utili<a-o -urate el
Robocu# )662 #or e&ui#o
me=icao como #ortero>
Pelota
I:rarroja
Ja#oe!a
El programa anterior hacia que el robot girara hacia un lado a una velocidad de 60% hasta que encontrara
una luz infrarroja superior a 70, entonces se detiene, todas sus acciones las imprime en la pantalla.
PROBLEMA #4
Basad@ en la informacin pasada escribe un programa que haga que el robot busque una fuente
lumnica de luz infrarroja, nos permita ver y or cuanta luz esta viendo mientras la sigue, pero en
caso de encontrarse con un obstculo, deber detenerse.
La gran limitacin del sensor nfrarrojo consiste en que solo devuelve un valor que indica la
presencia de luz infrarroja y en que cantidad, pero no nos dice en que direccin se encuentra o
desde donde es emitida esta luz, actualmente existe en el mercado un sensor que nos devuelve
ese valor expresado en grados desde 0 a 150 grados. Es conocido como R Seeker y se puede
conseguir en nternet.
Una solucin a esta deficiencia consiste en dotar al robot de tres sensores R, viendo en tres posiciones
distintas, as se abarca una zona muy parecida a la que abarca el R Seeker, pero es un poco complicado
programar el uso de estos tres sensores al mismo tiempo de forma tal que nos devuelvan la posicin de la
luz infrarroja.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
))
Dispositivos
infrarrojos como los
empleados durante la
Guerra Mundial
permiten ver objetos en
la oscuridad. Estos
instrumentos consisten
bsicamente en una
lmpara que emite un
haz de rayos infrarrojos,
a veces denominados
luz negra, y un
telescopio que recibe la
radiacin reflejada por
el objeto y la convierte
en una imagen visible.
Sensor Touc& o de tacto
El sensor de Touch o de tacto es el sensor mas simple que puede haber, se debe declarar
antes de utilizarlo y se conecta en cualquier puerto, los valores que devuelve son: 0 y 1; true o
false dependiendo de su estado. Cuando no se encuentra presionado se dice que su estado es
false, siendo true el estado contrario. Se declara utilizando la funcin SetSensorType()
mandando como parmetro: sensorTo$c7.
Consiste en un circuito muy simple; el flujo elctrico es cortado en uno de sus puntos, se
coloca un puente en la parte que hace el contacto en el Touch y cuando este es presionado
cierra el circuito, el botn regresa a su posicin mediante un resorte.
//1rograma 10- sensor @ouch
task main(){
9et9ensor@8)e(93$sensor@ouch)%
0hile(true){
i#(9ensorCalue4936&&true){
1la8Immediate@one(G+0$10)%
"
"
"
Elaborado por: Eduardo Muz Trejo. Octubre 2007
)*
Cdi o RobotC
Sensor de Sonido o Sound
El sensor de Sonido o Sound nos permite, como lo dice su nombre, medir la cantidad de sonido que
existe en el ambiente, aunque tericamente es posible usar el sensor para dar ordenes orales al
robot, sin embargo en la vida real es muy complicado y difcil de lograr debido a que en el
ambiente urbano existe una gran cantidad de ruido que se confundira con el sonido de la voz.
El sensor de sonido no detecta tonalidades o sonidos especficos, solo mide cantidad
de ruido en decibeles, pero los valores que devuelve un valor entre 0 y 100% siendo el
0 la ausencia de sonido en el ambiente. Se puede conectar en cualquier puerto y se
debe declarar antes de ser usado, para hacerlo se utiliza el parmetro: sensorSo$nd.B.
//1rograma 11- sensor 9ound
task main(){
9et9ensor@8)e(9!$sensor9oundD;)%
0hile(true){
i#(9ensorCalue49!6(+0){
nxtDis)la89tring(2$ AB3d D;A$ 9ensorCalue49!6)%
motor4motor56&7+%
motor4motor;6&7+%
" else{
nxtDis)la89tring(2$ AB3d D;A$ 9ensorCalue49!6)%
motor4motor56&0%
motor4motor;6&0%
"
"
"
PROBLEMA #5
Escriba un programa que haga que el robot avance a una velocidad variante segn la cantidad de
ruido en el ambiente: a ms ruido ms velocidad, pero si encuentra un obstculo debe de dar vuelta
hacia un lado y continuar haciendo su funcin; los datos de los sensores deben ser impresos en
pantalla
Elaborado por: Eduardo Muz Trejo. Octubre 2007
).
Cdi o RobotC
.
'tros Sensores para el NXT
Existen en el mercado diversos sensores disponibles para el Lego NXT, tanto los construidos por
MindStorms como por otras compaas independientes de Lego, gracias a que ste a liberado los
controladores y la documentacin tcnica para su construccin compatible con el NXT.
Entre estos sensores se encuentran:
El sensor de aceleracin.
El sensor de brjula,
El sensor de color,
Giroscopio,
nfrared Seeker.
Tambin existe en el mercado un adaptador de sensores, con el cual se pueden conectar sensores de
otros robots, soporta hasta treinta dispositivos diferentes. Se puede conseguir en nternet y tiene un costo
aproximado de $39 USD
Elaborado por: Eduardo Muz Trejo. Octubre 2007
)/
Trabajando con la Pantalla 0 U ca!o #ractico
Es momento de plantear un programa que implique todo un reto en comparacin con lo visto hasta el
momento, se trata de realizar un sencillo videojuego que se pueda jugar desde el teclado del Brick. Se
coloca en el margen de la pantalla una barda, en la parte inferior se deja libre y se coloca una pequea
barra que solo se mueve de un lado a otro (segn lo indique el usuario con el teclado), se coloca una
pelota mas pequea o por lo mucho del tamao de la barra y se programa de tal forma la pelota que
rebote en las paredes. Si la pelota cae hacia la zona inferior sin que la barra la toque, el juego se termina,
se debe de llevar un conteo visible en todo momento de los golpes que le de la barra a la pelota.
Lo primero que debemos hacer es pintar nuestro escenario en pantalla tal y como se muestra en la figura:
Para logralo necesitamos saber que la pantalla esta dividida en una
cuaricula de 70*100 pixels, y tiene su origen (0,0) en la esquina
inferior izquierda de la pantalla.
Primero dibujaremos el borde, que es algo que se mantiene
constante durante todo el juego. Para hacerlo usamos la funcin:
nCt.ra6Line(); que recibe dos parejas de argumentos, una del
punto de origen y otra del punto de destino, la funcin pinta una lnea
recta de un punto a otro. Pintemos pues las tres lneas que
conforman nuestro borde:
nxtDrawLine(0, 0, 0, 64); // izq
nxtDrawLine(0, 55, 99, 55); // sup
nxtDrawLine(99, 0, 99, 64); // der
La pelota se pinta mediante la funcion nCt.ra6F''i-se(); que dibuja un ciculo y la funcin
nCtFi''F''i-se(); que reyena un circulo previamente pintado. Ambas funciones reciben dos parejas de
parametros como la anterior.
Pero siendo la pelota un objeto que se estar moviendo durante todo el juego es necesario que sus
parametros sean variables. Se requiere de dos variables: X y Y, ya que su movimiento es en estos dos
ejes, asi necesitamos declarar dos variables al principio del cdigo y las inicializamos como x=30 y y=50.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
)1
Ahora si podemos pintar la pelota usando estas dos variables:
nxtDrawEllipse(x, y,x+8,y-8);
nxtFillEllipse(x, y,x+8,y-8);
Notaras que en la segunda pareja e utilizado una suma y una resta, esto es porque todos los numeros
deben ser variables, y de esta forma mantengo la constante en el tamao de la pelotita.
Pintaremos ahora la barra inferior, cuyo movimiento se limita solo al eje X, por tanto solo se requiere una
variable en ese eje.
nxtDrawRect(rx,6,rx+15,5); // utilizo DrawRect para mejorar su apariencia visual.
*Como el movimiento en X de la pelota es independiente al de la barra, requiero otra variable con la cual
pueda controlarlo.
A continuacin necesitamos definir el movimiento de la pelota, para ello debemos tener dos fuerzas, una
en Y y otra en X, que son a su vez variables que llamaremos fx y fy respectivamente. Si las fuerzas fx y fy
se encuentran en cero, la pelota no se mover de su lugar, si por ejemplo: fx=0 y fy=1, la pelota se mover
hacia arriba. Si fx=-1 y fy=-1, la pelota se mover hacia el origen. Por cuestiones prcticas slo pueden ser
estos tres valores: -1, 0, 1.
El movimiento de la pelota se da en cada ciclo con estas sentencias:
x=x+(fx);
y=y+(fy);
Se utilizan los parntesis para obligar al compilador a hacer una suma algebraica (G + G = G@ G + : = :).
Ahora debemos dotar a nuestra pelota de movimiento, iniciemos fx y fy con cualquier valor y antes de
ejecutar el cdigo, escribamos las siguientes condicionales:
if(x<=1){ // muro izq
fx=1;
PlaySound(soundShortBlip);
}
if(x>=90){ // muro der
Elaborado por: Eduardo Muz Trejo. Octubre 2007
)2
fx=-1;
PlaySound(soundShortBlip);
}
if(y>=54){ // techo
fy=-1;
PlaySound(soundShortBlip);
}
Nuestra pelota ahora si puede rebotar en las paredes. Slo falta hacer que nuestra barra se pueda mover
con los selectores. Necesitamos primero saber si se ha presionado una tecla:
f ( nNxtButtonPressed > 0 ) {
}
La funcin nNHTB$tton=ressed regresa un nmero mayor que cero dependiendo de que botn se
presione. Dentro de este F colocaremos dos if ms, uno para controlar el selector derecho y otro para
controlar el selector izquierdo:
f (nNxtButtonPressed == kLeftButton ){
}
if( nNxtButtonPressed == kRightButton ){
}
Ahora hemos utilizado dos constantes que hacen ms legible el cdigo que solo usar 1 o 2 segn el botn
presionado. Sin embargo, nuestra barra tambin debe de limitarse al rea del juego y no poder salirse de
ella por ms clics que de el usuario, por eso, en cada uno de estos if incluimos un if de control:
f (nNxtButtonPressed == kLeftButton ){
f ( rx > 3 ){
rx=rx-4;
}
}
if( nNxtButtonPressed == kRightButton ){
Elaborado por: Eduardo Muz Trejo. Octubre 2007
)3
if ( rx > (397-15) ){
rx=rx-4;
}
}
Faltan dos cosas: Cuando pierde el jugador y cuando tiene contacto con la barra la pelota. Lo primero se
logra tomando la posicin de Y de la pelota y comparndola con la de la barra, si la Y de la pelota es
menor que la de la barra, obviamente la barra no podr jams rebotar la pelota hacia arriba, y el juego se
detiene.
f ( y < ry ){
Perdio();
}
El contacto con la pelota por parte de la barra es un poco mas complicado de programar. El Contacto se
da cuando el punto Y inferior de la pelota (y-8) coincide con la altura del Y superior de la barra y adems el
punto X de la pelota esta a la altura del punto X de la barra, pero sigue existiendo un contacto en el punto
X derecho de la pelota (x+8) y el punto X derecho de la barra(rx+15). Que en RobotC seria:
if ( (y-8) <= ry ){
if( (x>=rx) && (x+8<=rx+20) ){
dy=dy*-1;
PlaySound(soundShortBlip);
}
}
El cdigo completo del programa es ste:
Elaborado por: Eduardo Muz Trejo. Octubre 2007
)4
task main(){
int x=30;
int y=50;
int rx=15;
int fx=1;
int fy=-1;
int golpes=0;
while(true){
nxtDrawLine(0, 0, 0, 64); // izq
nxtDrawLine(0, 55, 99, 55); // sup
nxtDrawLine(99, 0, 99, 64); // der
nxtDisplayString(2, "%2d",golpes);
nxtDrawEllipse(x, y,x+8,y-8);
nxtFillEllipse(x, y,x+8,y-8);
nxtDrawRect(rx,6,rx+15,5); /* utilizo
DrawRect para darle mas solides
visual.*/
x=x+(fx);
y=y+(fy);
if(x<=1){ // muro izq
fx=1;
PlaySound(soundShortBlip);
}
if(x>=90){ // muro der
fx=-1;
PlaySound(soundShortBlip);
}
if(y>=54){ // techo
fy=-1;
PlaySound(soundShortBlip);
}
if ( nNxtButtonPressed > 0 ) {
if (nNxtButtonPressed == kLeftButton ){
if ( rx > 3 ){
rx=rx-4;
}
}
if( nNxtButtonPressed == kRightButton ){
if ( rx > (397-15) ){
rx=rx-4;
}
}
}
if ( (y-8) <= ry ){
if( (x>=rx) && (x+8<=rx+20) ){
dy=dy*-1;
golpes = golpes + 1;

}
}
if ( y < ry ){
eraseDisplay();
nxtDisplayBigStringAt(10,40,"PERDO!");
PlaySound(soundDownwardTones);
wait10Msec(300);
}
}//while
}
Elaborado por: Eduardo Muz Trejo. Octubre 2007
*6
NE,O
PROBLEMA7 RE7UELTO7
PROBLEMA7 PARA RE7OL?ER
) @UNCIONE7 LI7TA7 PARA U7AR
BRE?E AI7TORIA DE MIND7TORM7
IN7TALACI(N DE ROBOTC
Proble)as Resueltos
=rob'ema I<;
task main(){
0hile(n2otor3ncoder4motor56,(3G+I!)){
motor4motor56&7+%
motor4motor;6&7+%
"
motor4motor56&H7+%//Jiro a un lado
motor4motor;6&7+%
0ait102sec(20)%//detengo la e.ecucion del )or 200 nanosegundos
motor4motor56&0%//Detengo el robot
motor4motor;6&0%
"
=rob'ema I<J
task main(){
9et9ensor@8)e(91$sensor9=>5?)%
0hile(true){
i#(9ensorCalue4916(3+){
motor4motor56&7+%
motor4motor;6&7+%
"else{
motor4motor56&H7+%
motor4motor;6&7+%
0ait102sec(10)%
"
"
"
Elaborado por: Eduardo Muz Trejo. Octubre 2007
*)
=rob'ema I<E
task main(){
9et9ensor@8)e(91$sensor9=>5?)%
0hile(true){
i#(9ensorCalue4916(&!0){
//;usco la mano girando en mi e.e
motor4motor56&G+%
motor4motor;6&HG+%
"else i#( (9ensorCalue4916,3K) LL (9ensorCalue4916(20) ){
//esta cerca$ la sigo
motor4motor56&7+%
motor4motor;6&7+%
"else{
//esta mu8 cerca$ me detengo
motor4motor56&0%
motor4motor;6&0%
"
"
"
Elaborado por: Eduardo Muz Trejo. Octubre 2007
**
=rob'ema I<K
task main(){
9et9ensor@8)e(91$sensor9=>5?)%
9et9ensor@8)e(92$sensor:igth5ctive)%
0hile(true){
//esto siem)re se e.ecuta
nxtDis)la89tring(2$ A9=-B3dA$ 9ensorCalue4916)%
nxtDis)la89tring(2$ AI?-B3dA$ 9ensorCalue4926)%
1la8Immediate@one(9ensorCalue4926$10)% //9onido del I?
i#(9ensorCalue4926(&!0){ //veo la #uente luminosa
i#(9ensorCalue4916,30){ //existe un obstaculo
motor4motor56&0%
motor4motor;6&0%
"else{
motor4motor56&7+%
motor4motor;6&7+%
"
"else{ //no veo nada
motor4motor56&G+%
motor4motor;6&HG+%
"
"//0hile
"
Elaborado por: Eduardo Muz Trejo. Octubre 2007
*.
=rob'ema I<L
task main(){
//declaro sensores
9et9ensor@8)e(91$sensor9=>5?)%
9et9ensor@8)e(92$sensor:igth5ctive)%
9et9ensor@8)e(9!$sensor9oundD;)%
0hile(true){
//in#ormacion constantemente actuali<ada
nxtDis)la89tring(2$ A9=-B3dA$ 9ensorCalue4916)%
nxtDis)la89tring(3$ AI?-B3dA$ 9ensorCalue4926)%
nxtDis)la89tring(!$ AD;-B3dA$ 9ensorCalue49!6)%
i#(9ensorCalue4916,30){ //veo un obstMculo
motor4motor56&H7+%
motor4motor;6&7+%
0ait102sec(30)%
"else{ //avan<o en lNnea recta
motor4motor56& 9ensorCalue49!6%
motor4motor;6& 9ensorCalue49!6%
"
"
"
Elaborado por: Eduardo Muz Trejo. Octubre 2007
*/
Proble)as para resol*er
=rob'ema A
Programe un robot nocturno que se pueda colocar en una mesa de noche o en un bur, y que
mediante sonar detecte si "algo (persona o animal) se movi frente a l, si as es: prende un led
conectado al puerto C. Si detecta el encendido de la luz del cuarto debe de emitir un sonido y
desplegar en pantalla un mensaje pidiendo que la apaguen pues es de noche. Si escucha dos
ruidos fuertes (procura que sean aplausos) debe de apagarse. *Usa la funcin: powerOff(); para
lograrlo
=rob'ema B
Construye un pequeo circuito compuesto por una lnea negra sobre un fondo blanco y programa tu
NXT para que sea capaz de seguirla, luego has que mediante encoder sea capaz de determinar
que distancia mide el circuito.
=rob'ema &
Usando el programa anterior logra que tu robot pinte en pantalla el circuito conforme lo este
recorrindolo, usa una escala. Te recomiendo que por cada 5 cm. pintes un pxel. Si cuentas con
brjula has que marque en todo momento el norte.
=rob'ema .
Usando tres etiquetas de colores diferentes, combnalas en series de 3 y haz que tu robot pueda
reconocer estos colores. Luego asigna una etiqueta a un lugar especifico de tu casa, o del rea de
pruebas y logra hacer que tu robot sepa donde sta slo por el cdigo de colores. Te recomiendo
mucho usar el sensor de color y no el R.
=rob'ema F
Usando la misma tcnica que con el circuito del problema B, crea una pequea ciudad, selecciona
dos o tres puntos, etiqutalos con las series del problema D y has que mediante la lectura de estos
cdigos tu robot sea capaz de ir a otro punto que t le pidas mediante teclado. Eficientiza lo ms
que puedas el cdigo para que llegue lo mas pronto posible.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
*1
+unciones !istas para usar
Bater(aM Muestra el control sobre la bateria del NXT
nxtDisplayTextLine(5,"Bat. %3.2f V",nmmediateBatteryLevel / (float) 1000);
if ((nmmediateBatteryLevel < 7500) && (nmmediateBatteryLevel > 7100)){
nxtDisplayTextLine(6,"** BATERA BAJA **");
}else if(nmmediateBatteryLevel < 7000){ // la batera mnima aceptada por el NXT es de 6300
nxtDisplayTextLine(6,"** BATERA NULA **");
}
Ade'anteM Evita que el robot avance ligeramente inclinado hacia un lado
void Adelante(int Velocidad){
//antes de llamar la funcin por primera vez, es necesario reiniciar los encoders,
if (nMotorEncoder[motorA]>nMotorEncoder[motorB]){
//si una llanta ha avanzado mas que la otra, acelero la del menor avance.
//*aumento la velocidad, segn el nmero de encoders que tenga de retraso.
motor[motorA]=Velocidad; // motor derecho
motor[motorB]=Velocidad+(nMotorEncoder[motorA]-nMotorEncoder[motorB]); // motor zquierdo
}else if(nMotorEncoder[motorA]<nMotorEncoder[motorB]){
motor[motorA]=Velocidad+(nMotorEncoder[motorB]-nMotorEncoder[motorA]);
motor[motorB]=Velocidad;
}else{ // ambas llantas van igual
motor[motorA]=Velocidad;
motor[motorB]=Velocidad;
}
}
Elaborado por: Eduardo Muz Trejo. Octubre 2007
*2
,re*e &istoria de MindStor)s
;NOP: Se comercializan los primeros productos controlados por ordenador de LEGO.
;NOO: El Grupo LEGO y el MT (nstituto Tecnolgico de Massachusetts) empiezan a colaborar en el
desarrollo de un "ladrillo inteligente que de vida a las creaciones LEGO va programacin por ordenador.
;NON: Dr. Seymour Papert, del Massachusetts nstitute of Technologys Development Laboratory of
Computer Learning se convierte en "LEGO Profesor de nvestigacin Educativa. Enero a Febrero 1998:
LEGO MNDSTORMS y Robotics nvention System son presentados en pblico en Ferias del Juguete en
Nrnberg, London y New York.
Se-tiembre ;NNO: Robotics nvention System es lanzado simultneamente en Estados Unidos y Reino
Unido. Tambin estn disponibles dos expansiones: RoboSports y Extreme Creatures.
; de diciembre de ;NNO: Robotics nvention System 1.0 se agota antes del boom navideo.
Febrero de ;NNN: Robotics Discovery Set, un producto derivado del Robotics nvention System que
permite a los usuarios programar directamente el pequeo ladrillo sin necesitar el ordenador, y el Droid
Developer Kit, kit de construccin de robots preprogramados y con control remoto, son presentados en
la Feria nternacional del Juguete en Nueva York.
Febrero de J<<<: Robotics nvention System 2.0, Dark Side Developer Kit (kit de construccin de robots
preprogramados y con control remoto), Vision Command System (un kit de expansin para el RS con
una cmara para PC) y el kit de expansin Exploration Mars (propuestas temticas sobre Marte,
instrucciones de construccin y juegos para el RS) son presentados en la Feria nternacional del Juguete
de Nueva York.
Febrero J<<;: SpyBotics, una serie de robots programables y controlables remotamente que simulan un
juego de espionaje, son presentados en la Feria nternacional del Juguete en New York.
Fnero J<<P: La siguiente generacin de robtica LEGO MNDSTORMS es presentada en la Muestra
nternacional de Electrnica de Consumo.
Elaborado por: Eduardo Muz Trejo. Octubre 2007
*3
$nstalacin -e RobotC
Elaborado por: Eduardo Muz Trejo. Octubre 2007
1. Ejecute el programa de nstalacin desde el icono de RobotC.
2. Siga las instrucciones del Asistente de nstalacin, que se limitan
bsicamente a dar clic en "Ne!t y en ""inish. Una vez concluida
la instalacin es necesario instalar el Firmware de Lego, que se
instala de la misma forma que RobotC.
3. Reinicie la computadora para que pueda utilizar RobotC.
4. Bien, ahora puede ejecutar RobotC en su computador. De clic en
el icono de RobotC y seleccione la opcin "#$aluate Robot% for
&indStorms de la ventana emergente, o inserte la licencia
correspondiente, que se puede adquirir desde nternet.
;
J
K
*4
Ta''er de introd$cci/n a' 'eng$aQe de -rogramaci/n Robot&
'Del (uego al robot el camino es Lego)
&reati"e &ommons J<<R Fd$ardo M$S(T TreQo#
Mxico, Octubre de 2007.
El presente documento esta protegido bajo licencia Creative
Commons tribuci!n"#o Comercial"$icenciamiento %ecproco 2.&
M'(ico ) se distribu)e *tal cual esta+ por tanto no se ,arantiza la
-uncionalidad o veracidad de la in-ormaci!n a.u e(presada.

*Las marcas, compaas, imgenes y nombres mostrados en
este documento son propiedad de sus respectios autores
y se muestran s!lo con "ines ilustratios, respetando
en todo momento la autora de los mismos#
Elaborado por: Eduardo Muz Trejo. Octubre 2007
http://creativecommons.org/licenses
.6

Das könnte Ihnen auch gefallen