Anda di halaman 1dari 16

Universidad Nacional de Colombia.

Introduccin a la Plataforma LEGO Mindstorms.


Prctica 1- Grupo 5-2, Laboratorio de Control
Felipe Patio Cd: 25441284 , Emir Lpez Cd: 223513,, Jorge Luis Mora Mora Cod:25441442
Departamento de Ingeniera Elctrica y Electrnica
Resumen En el presente informe se relaciona
una primera aproximacin a la plataforma LEGO
Mindstorms- NXT mediante prctica de
laboratorio, sta se llev a cabo en dos sesiones;
una primera para el reconocimiento de la
arquitectura del hardware, caracterizacin de
sensores
y un segunda en la cual se
implementaron cdigos para el control del
servomotor y aplicacin del sensor de tacto.
Palabras Claves
LEGO Mindstorms,
Hardware, Software, Servomotor, Sensor.
Abstract In this report a first approximation to
the platform Mindstorms- LEGO NXT is related
by lab, it was held in two sessions; a first to
recognize
the
hardware
architecture,
characterization and second sensors in which
certain codes implemented control functions and
application servomotor touch sensor.
Key Words LEGO Mindstorms, Hardware,
Software, Servomotor, Sensor.
I.

OBJETIVOS.

A. Objetivo General:
Utilizar las herramientas bsicas necesarias para la
implementacin de algoritmos de control en la
plataforma de LEGO Mindstorms NXT utilizando
el lenguaje de programacin NXC mediante el
entorno Bricx Command Center.
B. Objetivos Especficos.

Identificar los componentes bsicos


como sensores, actuadores y unidades de
procesamiento del LEGO Mindstorm.
Examinar y explorar algunas de las
caractersticas de los sensores, actuadores
y la estructura interna del Brick.

Reconocer y estudiar la estructura bsica


del lenguaje de programacin NXC, as
como las herramientas de programacin
presentes en el software bricxCC.
II.

INTRODUCCIN.

El control automtico ha venido desarrollndose e


implementndose cada vez con ms detalle dentro
de los diferentes campos industriales del pas,
existen diversos procesos que se efectan de
manera eficaz y eficiente si se llevan a cabo con
algn mtodo de automatizacin y por ende se
logra ms avance y optimizacin en las cadenas
productivas.
As, es importante desarrollar capacidades acordes
con los diferentes componentes y herramientas
necesarias para desarrollar dichos procesos, en
nuestro caso iniciaremos el manejo de una
plataforma que involucra tanto desarrollo de
algoritmos como manejos de sensores y teora de
control dado al funcionamiento del Brick.
Por estas razones, en esta prctica se realiza un
primer acercamiento al entorno y arquitectura de
LEGO Mindstorms- NXT, en primer instancia se
conoci el Hardware y los diferentes accesorios
como servomotores y sensores que se pueden
acoplar al Brick, se llev a cabo la ejecucin de
los diferentes cdigos registrados en la gua,
utilizando Brick Command Center para la
descarga al dispositivo.
Como parte complementaria de la prctica se
realiz una segunda sesin, donde se implement
con anterioridad tres cdigos con funciones
especficas, dos de ellos para controlar posicin y
velocidad en el servomotor de acuerdo a una seal
de comportamiento diente de sierra, y el otro para
manejo del sensor de contacto o presin.

Universidad Nacional de Colombia.


III.

GENERALIDADES HARDWARE.

Es necesario profundizar en aspectos de


funcionamiento acerca de la plataforma LEGO
Mindstorms y revisar con detenimiento los
accesorios que la conforman, para as poder llevar
a cabo prcticas de laboratorio ms productivas.
a.

Descripcin del Hardware.

Segn la gua de laboratorio se tiene que LEGO


Mindstorms NXT es un kit de robtica
programable que incluye, adems de componentes
de construccin bsicos de Lego, un Brick
inteligente y una serie de sensores que permiten al
robot
realizar diferentes movimientos
y
operaciones [1].
Otra descripcin segn (Pinto, Bermdez) se tiene
que Los sistemas de Robtica: LEGO y
MINDTORMS- NXT Hardware Developer Kit
conforman
herramientas
principalmente
destinadas al diseo, construccin programacin y
modelado de diversos prototipos robticos
mviles y articulados. Ambos sistemas, estn
constituidos por una serie de piezas LEGO, un
dispositivo programable, un conjunto de sensores
(entradas) y actuadores (salidas) compatibles, que
permiten armar estructuras robticas, tomar
seales de ambiente, procesar datos y ejecutar
ciertas tareas [2].
Segn lo anterior se puede apreciar que est
compuesto de bloques que claramente representan
una plataforma diseada segn teora de control
en lazo cerrado, por tanto se puede afirmar que la
parte ms importante es el Brick, ste se encuentra
conformado por 3 puertos de salida A,B,C que se
encuentran en la parte superior izquierda, en la
parte superior derecha se ubica el puerto USB de
comunicacin con PC, tambin consta de 4
puertos de entrada ubicados en la parte inferior los
cuales se pueden apreciar claramente en la figura
1, el botn naranja es el encendido de la
plataforma, el botn gris para retroceder o apagar
el sistema y las flechas para desplazarse dentro de
su entorno grfico [1].

Figura 1: Brick- NXT

Internamente el brick conforma el cerebro de los


sistemas que se vayan a implementar, por tanto
como se mencion anteriormente es la parte ms
funcional, es aqu donde se determinan las
respectivas seales de control para modificar la
dinmica, estabilizar o cambiar el comportamiento
de algn prototipo que se desee construir todo
segn la informacin de realimentacin que
proveen los sensores [3].
El brick se conforma por las siguientes partes:

Un
microprocesador
principal:
ARM7TDMI, de 32 Bits a 48 MHz;
Memoria Flash de 256KB y RAM de
64KB.
Un microcontrolador ATMEGA48 de 8
Bits a 4MHz; Memoria Flash de 4KB y
RAM de 512Bytes.
Controlador USB 1.1, Controlador
Bluetooth BlueCore 4.
4 puertos de entrada para sensores, 3
puertos de salida para actuadores.
Display LCD.

Los componentes anteriores tienen sus respectivos


protocolos de comunicacin internos y externos,
El Brick tiene el protocolo de comunicacin
RS485, la comunicacin puede ser almbrica e
inalmbrica, la comunicacin inalmbrica por
medio de Bluetooth por medio de un dispositivo
CSR BlueCoreTM4 v2.0 + EDR System, el cual
tiene las siguientes especificaciones:

Serial Port Profile (SPP),

una memoria RAM interna de 47


Kbytes.

una memoria FLASH de 8Mbit Externa,


a una frecuencia de 26 MHZ. [4]

La comunicacin almbrica usando tecnologa


USB con una velocidad del puerto mxima de 12
Mbit/s. [4]

Universidad Nacional de Colombia.

Como se describi anteriormente, LEGO cuenta


con 7 puertos en total, 4 puertos de entrada con
conexin RJ12, 1 de estos puertos es un puerto de
alta velocidad, IEC 61156 tipo 4/EN 50170
compilant, en esta entrada se podrn conectar los
sensores digitales y anlogos. [4] Los otros 3
puertos son de salida con conexin RJ12, en
donde se conectaran los actuadores, los ms
comunes sern motores. [5]

Figura 2. Estructura de bloques Brick.


El Brick cuenta con un Display para la
visualizacin de las diferentes operaciones y
control del entorno, el cual tiene una resolucin de
100x64 pixeles, a blanco y negro, la arrea visual
es 26 X 40.6 mm. Tambin El Lego cuenta con
sonido por medio de un canal de sonido con 8 Bit
de resolucin, tiene una impedancia de 16 , y
consume potencia segn la frecuencia, la
frecuencia de muestreo es de 2 a 16 KHz. [4]
Tiene 4 botones de interfaz con el usuario. El
Brick usa 6 bateras alcalinas AA, y las bateras
recargables recomendadas son de 1400 mAH. [4]

La velocidad de los puertos de comunicacin de


entrada y salida digitales es de 9600 bit/s. El Brick
internamente puede suministrar una corriente de
700 mA y llegar hasta un pico de corriente de 1
A, en una salida de poder la mxima corriente que
se puede suministrar es de 180 mA. [4].

Actuadores
Son aquellos elementos que permiten realizar la
accin que se desea ejecutar, para nuestras
prcticas son los dispositivos que deseamos
controlar.
Los servomotores son los principales actuadores
que se deber controlar, son dispositivos
electromecnicos de corriente continua e imn
permanente, El motor de la lnea NXT
(servomotor), que se observa en la figura 2, es
ms pesado (80gr) y lento (170 RPM libre) con
respecto a la otra serie que maneja LEGO (RCX),
lo que se debe a la incorporacin de un tren
reductor (Figura. 3) La caja reductora le permite al
motor generar torques ms grandes (50 N cm)
con un consumo mayor (60 mA libre y 2000 mA
frenado). Es el ms indicado para labores que
impliquen ms fuerza como la construccin de
robots y dispositivos mecnicos mviles [3].
En las siguientes figuras se pueden apreciar en
detalle el principal actuador a controlar en las
prcticas.

El diagrama de bloques de la operacin de los


anteriores componentes se muestra en la figura 2.

Figura 3. Servomotor NXT.

Universidad Nacional de Colombia.

int continuous(): //Pone el sensor de ultrasonidos


en funcionamiento continuo.
int off ():// Detiene el funcionamiento continuo.
int getDistance():// Calcula y devuelve la distancia
en centmetros hasta el objeto ms cercano. El
valor mximo es de 255 cm.

Figura 4. Caja Reductora Servomotor NXT.


Sensores.
Son los elementos responsables de emitir la seal
correspondiente para que l controlador del Brick
pueda realizar realimentacin y de esta manera
poder aplicar teora de lazo cerrado para llevar a
cabo las funciones de los sistemas que se
implementen.
Estos permiten a cualquier sistema conocer
informacin sobre su entorno. A partir de los datos
recogidos se pueden tomar decisiones correctivas
para cambiar la dinmica y el comportamiento de
los sistemas. Esa es la base de disciplinas como el
control en lazo cerrado, la robtica y la
inteligencia artificial, entre otras. [3]

int getDistances(int[] dist): //Devuelve un array


con las ltimas 8 distancias calculadas. [6]

Sensor de Rotacin.

Sensor de Ultrasonido.

Este sensor utiliza el principio del eco, el cual


consiste en emitir una seal ultrasnica y capta las
seales de retorno para poder calcular las
distancias a las cuales se encuentran los objetos,
su principal funcin es detectar las distancias y el
movimiento de un objeto que se interponga en el
camino del robot, mediante el principio de
deteccin ultrasnica. Este sensor es capaz de
detectar desde 0 a 255 cms, con una precisin
relativa del 3 cms [3] se puede apreciar en la
figura 5:

Figura 5. Sensor Ultrasnico para medir


distancias.
Algunos comandos importantes
programacin de este sensor son:

para

la

Figura 6.Sensor Giroscopio.

El sensor de Rotacin mide la velocidad de giro.


Este sensor devuelve el nmero de grados por
segundo y la direccin de rotacin. Mide +/- 360
por segundo, lo que en aplicaciones de sistemas se
puede orientar el robot o dispositivo mvil de tal
manera que tome determinadas direcciones
controladas, El sensor utiliza el pin de entrada
analgica del puerto del Brick, por lo que la
lectura es un valor entre 0 y 1023 [7]

La velocidad de rotacin puede ser leda hasta


unas 300 veces por segundo. El eje de medida est

Universidad Nacional de Colombia.


en el plano vertical con la parte oscura del sensor
mirando hacia arriba. [7]

Sensor de Luz.

El sensor de luz es capaz de detectar luz u


oscuridad, as como la intensidad de la luz de una
habitacin. Tambin es capaz de medir la
intensidad de la luz en colores (clasificacin en
escala de grises) [8].

4-5% es como una habitacin en silencio.

5-10% sera alguien hablando a cierta


distancia.

10-30% es el valor de una conversacin


prxima al sensor o msica a niveles
"normales".

30-100% es el valor que producirn gente


gritando, o msica a un volumen fuerte.

Figura 7. Sensor de Luz.

Sensor de sonido.

Es capaz de medir niveles de sonido en dBs


(decibelios) y dBAs (frecuencias entre 3 y 6 kHz).
Tambin es capaz de reconocer patrones de sonido
e identificar diferencias de tono. Se necesita un
cable de conexin, que se incluye en la caja Base
9797.

dBA: la sensibilidad del sensor se adapta


a la sensibilidad del odo humano. Dicho
ddBe otra forma, estos son los sonidos
que nuestros odos son capaces de or.

dB: cuando realizamos deteccin son


ajustar los decibelios todos los sonidos se
miden con la misma sensibilidad. Con
ello, estos sonidos pueden incluir algunos
que bien son demasiados fuerte o dbiles
como para que el odo humano los pueda
percibir.

El sensor de sonido NXT se puede apreciar en la


figura 8, este puede medir niveles de presin de
sonido de hasta 90 dB. Para evitar la complejidad
de interpretacin de estos niveles de presin, las
lecturas de sonido que presenta Lego
MINDSTORMS se muestran en porcentajes (%).
Cuanto menor sea este valor, menos intensidad
tiene [1] [9]. Por ejemplo:

Figura 8. Sensor de Sonido.

Sensor de Contacto.

Es un sensor booleano que es estimulado al ser


oprimido, y es capaz de contar presiones nicas o
mltiples, Dispone de un interruptor que al ser
presionado enva una seal al NXT. Este sensor es
til para detectar obstculos. SENSOR_TOUCH
es el comando que reconoces el lenguaje de
programacin [10].

Figura 9. Sensor de Contacto.


IV.

INTRODUCCIN AL SOFTWARE.

Ahora que es familiar el hardware con el que se va


a trabajar es necesario profundizar en el lenguaje
de programacin que se va a utilizar para poder

Universidad Nacional de Colombia.


controlar los diferentes actuadores segn la
aplicacin que se requiera.
La plataforma LEGO Mindstorm NXT incluye un
software de aplicacin tipo grfico que se basa en
NI Labview bastante prctica y fcil de
implementar, sin embargo para nuestra prctica es
necesario profundizar en los algoritmos de
programacin, de tal manera que se entienda
como funciona realmente el dispositivo, por lo
tanto es necesario manejar un entorno de
programacin de texto para bajar al Brick y poder
llevar a cabo las respectivas funciones que
queremos.
Los lenguajes que existen en el momento para
aplicacin NXT de LEGO son: Next Byte, Codes
NBC, Not eXactly C y NXC, en las prcticas a
desarrollar se trabajar con NXC en el entorno de
programacin BCC- Brick Comman Center.
Los cdigos que se implementen en NXC constan
de una tarea principal task main () la cual es la
tarea que ejecutar el sistema. Dentro de esta tarea
principal se pueden programar las respectivas
instrucciones acordes a la funcin que se quiera
implementar, dichas instrucciones deben ir entre
los corchetes principales y cada lnea de cdigo
debe terminar con punto y coma para que el
compilador no tenga ningn inconveniente en
aprobar el cdigo.
Las instrucciones en forma de sentencias son las
encargadas de indicarle al sistema qu debe hacer.
En trminos de estructura bsica, son muy
similares al lenguaje C pero poseen sentencias,
palabras reservadas y estructuras propias de NXC
que son especiales para el manejo de los
actuadores y sensores.
Dado a que el lenguaje es muy parecido a C, es
necesario declarar las diferentes variables con las
cuales se va a trabajar, estas variables pueden ser
de diferentes tipos tal como se muestra a
continuacin:

Int: Para datos de tipo entero de 16 bits


en un rango entre -32768 y 32767.
Char: para variables de tipo carcter
para valores entre -127 y 128.
Bool: Tipo booleano de 8 bits.
Lgica: FALSO/VERDADERO.

Short: Valor de 16 bits con signo,


parecido a los tipo Int.
Long: Valor de 32 bits con signo y cuyos
valores varan de -2147483648 hasta
2147483647.
Unsigned: Para definir variables de tipo
char, int, long.
Float: Valor de 32 bits con precisin de
punto flotante (decimales).
String: Cadena de caracteres.
Array: Arreglos.
Matrices.
Structures: Arreglo de variables.

Ahora conozcamos algunas de las sentencias ms


importantes para empezar a implementar cdigos
en nuestra plataforma LEGO por medio de
lenguaje NXC.
Sentencias Ms comunes:
OnFwd(OUT_A, 50);
Esta sentencia le indica al sistema que debe
activar el motor que se encuentra conectado en el
puerto A que debe avanzar en sentido positivo o
hacia adelante con una potencia del 50% nominal
es decir se va a mover con la mitad de la mxima
velocidad que pueda dar el servomotor.
Como se mencion anteriormente El brick posee 3
salidas disponibles para actuadores, siendo A, B y
C respectivamente. El primer argumento indica
que se trata de una salida, seguido del puerto al
cual se desea hacer funcionar OUT_A , el
segundo argumento la potencia con la que
funciona el motor siendo 0 apagado y 100 la
mxima potencia.
OnRev(OUT_A , 20);
Esta sentencia permite realizar el sentido de giro
contrario del motor, es decir realiza lo contrario a
la primera sentencia y sus argumentos significan
lo mismo.
Existen instrucciones especiales como:
Wait(5000);
Es la sentencia que permite llevar a cabo
determinada funcin por el tiempo deseado ya que
el procesador ejecutara cada lnea de una manera
muy rpida, por tanto es necesario implementar

Universidad Nacional de Colombia.


dicha sentencia para que se noten los cambios de
las diferentes instrucciones del cdigo.
Para el caso del ejemplo el Brick esperara o
ejecutara la lnea anterior durante 5 segundos
antes de continuar.
Off( OUT_A):
Esta sentencia permite apagar los actuadores
conectados en el puerto de salida A o dependiendo
del argumento que se le asigne.

Dado a que el lenguaje de programacin est muy


relacionado con C++, tambin existen las
expresiones de sentencias cclicas para realizar
determinada accin como es el caso de if, for,
while, y dems estructuras que permiten realizar
operaciones de manera ms eficiente.
La interfaz de usuario del software BCC- Brick
Command Center es muy prctica y manejable se
puede apreciar en la figura 10:

Los comandos anteriores son los bsicos para los


primeros pasos en cuanto al control de los
actuadores de la plataforma, tambin es necesario
revisar las sentencias que permiten el manejo de
los sensores:
Los sensores deben ser ajustados o preparados
para que puedan pasar su seal censada al
programa en NXC. Por tanto se utilizan las
siguientes sentencias para tal fin.
SetSensorTouch(IN_1);
SetSensorLight(IN_1);
SetSensorUltrasonic(IN_1);
En la cual, SetSensor prepara el sensor y la
siguiente palabra indica el tipo de sensor que se
vaya a utilizar.
La expresin entre parntesis ya no indica un
puerto de salida como en los casos anteriores para
el control del motor, sino que son puertos de
entrada encesarios para recibir las seales que los
sensores capturen del entorno del sistema, El
argumento de esta sentencia corresponde al puerto
de entrada del sensor, IN_1 representa el sensor
conectado al puerto 1, IN_2 el sensor al puerto 2 y
as sucesivamente.
Tambin necesitamos sentencias que nos permitan
leer la operacin del cdigo en pantalla para esto
es necesario utilizar:
NumOut(10,40, rotorRotationCount(OUT_A),0);
TextOut(5,50, "Felpe Patio");
Dichas sentencias imprimen en pantalla en la
coordenada indicada dentro de la resolucin la
variable numrica (en este caso los grados que ha
girado el motor) o el texto que necesitemos ver.

Figura 10. Interfaz BCC.


Una vez escrito el cdigo o programa que se
requiera implementar es necesario compilarlo y
posteriormente bajarlo al brick.
Para esto se debe configurar el tipo de plataforma
que se est utilizando, en nuestro caso NXT, como
sigue:

Universidad Nacional de Colombia.


Los servomotores son motores de corriente
continua que incorporan un circuito electrnico, el
cual permite control de forma sencilla la velocidad
de giro de su eje mediante impulsos PWM seal
de pulsos modulada en ancho de pulso (Pulse
Width Modulation).
Por lo general dichas seales se generan con un
periodo de 20 ms y permiten controlar la potencia
que se est entregando al motor si los circuitos del
motor reciben una seal de entre 0.5 a 1.4 ms
(depende del fabricante el rango)
el eje del
motor se mover en sentido horario y si recibe una
seal con ancho de pulso de 1.6 a 2 ms el eje del
motor gira en sentido opuesto a las manecillas del
reloj, 1.5 representa un estado neutro para el
motor.

Figura 11. Configuracin Brick Nxt

Si se quiere regular la velocidad del motor hay


que jugar con el ancho de pulso que reciba el
servomotor, dependiendo si est girando en
sentido horario o no, por ejemplo si va en adelanto
se modificara el ancho de pulso entre 0.5 y 1.4 ms
para regular la cantidad de potencia que se
entregue.

Figura 13. Seal PWM Avance ancho de pulso


0.7ms

Figura 12: Configuracin BCC


Dados los soportes suficientes respecto al
hardware y software necesarios para el adecuado
manejo y operacin de la plataforma se presenta el
procedimiento que se llev a cabo en las prcticas
de laboratorio.
V.

PROCEDIMIENTO.
HARDWARE

1) Investigue y explique cmo es posible


cambiar la velocidad angular de los
motores LEGO usando una seal de
PWM. Cuando usamos los comandos
OnFwd y OnRev, que hacen estos
comandos para que se cambie la
direccin del motor?

Figura 14: Seal PWM en Rev ancho de pulso


1.8 ms
Cuando en el programa se utilizan sentencias
como OnFwd y OnRev el Brick se encarga de
modular la seal generada para el control del
motor y cambia el ancho de pulso en los dos
rangos establecidos anteriormente, para que el
motor identifique si debe ir en avance o
retroceso. :
2) Cmo utiliza el Brick las seales que
entrega el Encoder incremental de cada
motor LEGO para leer la posicin actual
del mismo?, y
dems explique
detalladamente cmo a partir de los
pulsos que entrega el Encoder es posible
conocer la direccin de giro del motor?.

Universidad Nacional de Colombia.


El enconder es un dispositivo que consta de
ranuras y est ubicado en el eje del motor de tal
manera que continuamente est censando posicin
y velocidad del mismo, en la siguiente figura se
aprecia el encoder de un servomotor LEGO NXT
[2].

Bsicamente se desarrollaron prcticas de


reconocimiento se hardware, identificar los
diferentes componentes como Brick, actuadores,
sensores y una primera aproximacin al entorno
de programacin con BCC.
Una vez identificados los diferentes dispositivos
se procedi a compilar los diferentes cdigos que
se proporcionan en la gua para el control y
reconocimiento de los diferentes sensores en el
brick.

Figura 15. Encoder Servomotor NXT.


El anterior dispositivo es capaz de generar dos
seales de pulsos como referencias las cuales
llegan al procesador del brick, dependiendo del
desfase y el ancho de pulso de las mismas el brick
interpreta un patrn de bits que le indican si va en
sentido horario o anti horario. Este proceso se
muestra a continuacin con ms detenimiento.

Para lo anterior fue necesario conectar el Brick


por medio de puerto USB al PC, conectar un
servomotor a la salida A y disponer los diferentes
sensores para conectar uno a la vez a la respectiva
entrada que se especifique en los cdigos.
A continuacin se presentan los cdigos
comentados que se instalaron para cada sensor:

Sensor de Ultrasonido

Para probar el sensor de ultrasonido se copi el


cdigo de la gua en un nuevo proyecto y se
compil, posteriormente se empez a modificar el
cdigo para observar la respuesta del sensor.

Figura 16. Ciclo de pulsos.


En la anterior figura se puede apreciar que se
producen un ciclo peridico de bits dependiendo
del desfase de las dos seales, se ve que despus
de la primer secuencia se repite igualmente, el
brick identifica la seal dependiendo de si
empieza con 10 o 01 segn se regule, el identifica
si el eje del motor va en sentido horario o al
contrario y la velocidad depender netamente del
periodo de las funciones detectadas [11].
De esta manera se explica como el brick utiliza las
seales del encoder para saber sentido de giro,
posicin y velocidad del servomotor [2].

Primera Sesin:

Sensor de Sonido.

Con este cdigo se pretende generar una velocidad


del motor a una cierta intensidad de ondas sonoras
en un micrfono. Para ello se utiliza el sensor de
sonido como entrada al bloque y el servomotor
como salida del bloque. El umbral determina
cundo comienza a moverse el motor.

Universidad Nacional de Colombia.


Los cdigos se disearon y se compilaron en
laboratorio para poder realizar los ajustes de
funcionamiento pertinentes.
a) Disear e implementar dos algoritmos: uno
que conduzca el movimiento en posicin de
un servomotor siguiendo el patrn de una
seal diente de sierra; y otro que conduzca el
movimiento en velocidad de un servomotor
siguiendo el patrn de una seal diente de
sierra.

Sensor de Contacto.

El siguiente cdigo permite cambiar el estado del


motor en funcin de activar el sensor de contacto.
Cuando se mantiene pulsado el sensor de
contacto, el motor se detiene. Cuando el sensor no
se mantiene presionado el motor gira con la
intensidad especificada en el cdigo, que en este
caso es de 75%.

Diseo Cdigo de Posicin:

Para simular la posicin del servomotor segn un


patrn diente de sierra es necesario que el brick
establezca la orden de que el motor avance hacia
adelante a una velocidad constante y luego
regresar el eje del motor a la posicin inicial lo
ms rpido posible, para lograr esto se pondr a
avanzar el motor a una potencia baja con el
comando RotateMotor() y luego se devuelve el eje
con al 100% de la potencia.
Cabe mencionar que existe una funcin diferente
para el sensor de contacto que permite acumular
pulsos del sensor, es decir, contar cuantas veces se
ha pulsado el sensor, esta funcin se aplicar en
uno de los ejercicios propuestos en este
laboratorio.

Segunda Sesin.

Para la segunda sesin se disearon posterioridad


tres cdigos correspondientes al control de
velocidad y posicin del motor segn una seal
diente de sierra y el control de un sensor de
contacto.

Para realizar esta tarea se programa primero un


bucle sin fin para que el programa corra
indefinidamente, luego dentro de este se programa
un bucle que por un tiempo mueva el motor con
velocidad constante, esto con la opcin
OnRevReg, y luego de esto, regresar el motor a
su posicin inicial con la mayor velocidad del
mismo, utilizando la opcin rotatemotor pero con
el argumento de velocidad negativo.
El cdigo que se desarroll para cumplir la
especificacin para control de posicin con un
comportamiento diente de sierra es:

Universidad Nacional de Colombia.

El anterior cdigo se explica a continuacin:

Primero se declaran los diferentes tipos


de variables que se van a utilizar para
almacenamiento en memoria, estas se
utilizaron de tipo long, string, int y
dems.
Seguidamente se programa la tarea
principal- task main()
Co los comandos TextOut y Wait se
imprimen los nombres de los integrantes
en pantalla durante 10 segundos luego se
limpia la pantalla con ClearScreen.
Los comandos DeleteFile() y CreateFile()
crean el archivo al cual se van a exportar
los datos que se censen.
Despus se establece un ciclo infinito
while (true) donde se encuentra la
totalidad del cdigo funcional como tal.
Dentro del while se establece un for el
cual se encarga de repetir el proceso 10
veces.

RotateMotor(OUT_A,10,a) se encarga de
hacer girar el motor a una potencia del
10% los 360 grados que fue el valor que
se le dio anteriormente a la variable a.
La
lnea
NumOut
(3+(i*20),40,
MotorRotationCount(OUT_A),0);
se
encarga de imprimir la posicin del
motor, para el siguiente ciclo imprime al
lado de los valores anteriores.
Las siguientes 5 lneas se encargan de
escribir los datos de posicin que se estn
censando en el archivo.txt que se cre
anteriormente.
Despus
se
utiliza
RotateMotor
(OUT_A,100,-a); para devolver la
posicin del motor al estado inicial y esto
se hace al 100% de la potencia para que
se produzca el cambio drstico en la
diente de sierra.
Se vuelve a imprimir los datos y se los
carga en el archivo.txt.
Finalmente se cierra el archivo creado
con CloseFile(archivo).

Una vez cargado el cdigo en el Brick fue


necesario realizar algunas modificaciones para
que todo funcione bien, ya que por no contar con
el prototipo en la casa es complicado que el
cdigo funcione perfectamente en los primeros
instantes de la sesin de laboratorio.
Los datos exportados al .txt se registraron en dos
columnas las cuales las identificamos como el
tiempo en la columna de la izquierda y la posicin
en ngulos en la columna derecha. Realizando la
grfica de los datos obtenidos para los diez ciclos
se obtiene:

Universidad Nacional de Colombia.

Figura 17: Posicin Servomotor.


Se puede apreciar en la grfica que la cada de
pendiente en la seal diente de sierra no se puede
lograr que sea completamente vertical ya que se
estaba regresando a la posicin inicial al 100% de
la potencial lo cual tomaba un tiempo en
desarrollarse.

Diseo Cdigo de Velocidad:

Para simular la velocidad del motor con un patrn


diente de sierra es necesario crear una variable
incremental de tal manera que se la utilice en el
comando OnFwd y la velocidad vaya aumentando
desde 0 hasta su mxima potencia, y despus se
apaga el motor para que produzca la cada a muy
alta pendiente en la seal, el cdigo vuelve hacer
el mismo proceso por un nmero determinado de
ciclos.
El cdigo que se implement es el siguiente:

Lo que se realiz anteriormente fue:

Primero se declaran los diferentes tipos


de variables que se van a utilizar para
almacenamiento en memoria, estas se
utilizaron de tipo long, string, int y
dems.
Seguidamente se programa la tarea
principal- task main()
Co los comandos TextOut y Wait se
imprimen los nombres de los integrantes
en pantalla durante 10 segundos luego se
limpia la pantalla con ClearScreen.
Los comandos DeleteFile() y CreateFile()
crean el archivo al cual se van a exportar
los datos que se censen.
Se establece un for el cual se encarga de
repetir
el
proceso
un
nmero
determinado de veces.
Se crea otro for anidado for (vel=0;
vel<=100; vel++); el cual se encarga de
variar la velocidad hasta la potencia
mxima.
Se pone avanzar el motor a una velocidad
variable
utilizando
la
variable
incrementeal
vel
:
OnFwd
(OUT_A,0+vel);
NumOut
(3+(i*20),30,
MotorActualSpeed(OUT_A),0); imprime
los datos de la velocidad del motor en

Universidad Nacional de Colombia.

pantalla variando la posicin para cada


ciclo.
Las siguientes 5 lneas se encargan de
escribir los datos en el archivo que se
gener anteriormente.
Despus fuera del ciclo anterior se apaga
el motor para crear la pendiente de la
seal diente de sierra mediante: Off
(OUT_A);
Finalmente se cierra el archivo creado
con CloseFile(archivo).

Como se mencion anteriormente los datos se


guardaron en un archivo.txt y a continuacin se
dispone la grfica de comportamiento para la
velocidad.

Al dejar presionado el sensor de contacto


por algn tiempo (por ejemplo: ms de
tres segundos), el programa termine.

OJO: Entindase como pulsar a la accin de


presionar y soltar el sensor de contacto.
Agregue al anterior algoritmo lo siguiente:
Imprima en la pantalla del Brick el
estado actual de funcionamiento del
motor LEGO, ya sea: Detenido, girando
en sentido horario, o Girando en sentido
anti-horario.
Imprima en la pantalla del Brick la
posicin actual del motor LEGO (en
grados y radianes), y adems imprima la
cantidad de vueltas que ha dado el motor
LEGO.
El cdigo que se implement para el manejo del
sensor de contacto es el siguiente:

Figura 18: Control Velocidad Servomotor

A diferencia de la seal para el control de posicin


en la anterior si se puede lograr una pendiente
completamente sbita ya que se puede apagar el
motor para lograr las especificaciones del
programa.
b.

Diseo Cdigo Sensor de Contacto.

Use un sensor de contacto y un motor LEGO. A


continuacin disee e implemente un algoritmo
que ejecute las siguientes acciones en cualquier
orden:

Al pulsar una vez el sensor de contacto,


el motor LEGO gire a una velocidad en
sentido horario.
Al pulsar dos veces, el motor LEGO gire
a una velocidad pero en sentido antihorario.
Al pulsar tres veces, el motor LEGO se
detenga y siga detenido aunque se suelte
el pulsador.

Primero se declaran los diferentes tipos


de variables que se van a utilizar para
almacenamiento en memoria, estas se
utilizaron de tipo long, string, int y
dems.
Seguidamente se programa la tarea
principal- task main()

Universidad Nacional de Colombia.

Con los comandos TextOut y Wait se


imprimen los nombres de los integrantes
en pantalla durante 10 segundos luego se
limpia la pantalla con ClearScreen

Para este ejercicio se utiliza la funcin


SENSOR_MODE_PULSE
la
cual
permite contar la cantidad de pulsos que
se hacen al sensor en un tiempo
determinado.

La siguiente parte da el lapso en el cual


se van a dar los pulsos, es decir, el
usuario tiene un tiempo de 1000
milisegundos para dar la cantidad de
pulsos que desea.

VI.

Lo siguiente da la instruccin de mostrar


en pantalla la velocidad angular del
motor, la cantidad de vueltas del motor
en grados y radianes y por ltimo los if
dan la instruccin adecuada al
servomotor dependiendo de los pulsos
entregados por el usuario. Cada if va a
mostrar en pantalla el estado del
servomotor; sentido horario, sentido anti
horario y detenido.
COMENTARIOS Y OBSERVACIONES.
El uso de la modulacin por ancho de
pulsos nos permiti regular la velocidad
de giro de los motores, mediante la
modificacin del ciclo til de trabajo del
pulso de entrada PWM y mediante los
comandos OnFwd(OUT_A, 50) u
OnRev(OUT_A
, 20) que son
equivalentes; nos permitieron manipular
desde la programacin el cambio del
sentido de giro del servomotor con el
ciclo til de la seal.
Gracias a los codificadores rotatorios o
encoders transforma la posicin angular
de un eje, directamente a un cdigo
digital mediante un encoder de
cuadratura, y gracias a este mecanismo se
puede obtener dos seales de pulsos
digitales desfasadas, es decir la duracin
o frecuencia del pulso determina la
posicin en la que se debe situar el motor
y mediante ellas es posible suministrar
los datos de posicin, velocidad y
direccin de rotacin del eje. Hay que

tener en cuenta las transiciones que


pudiesen ocurrir, es conveniente abarcar
las siguientes situaciones: giro horario,
giro anti horario, error momentneo es
decir sin cambio, y error en cambios de
fase producidos por sobre velocidad u
otro factor. Un elemento imprescindible a
la hora de controlar un servosistema es
la realimentacin de posicin y
velocidad. La duracin o frecuencia del
pulso determina la posicin en la que se
debe situar el motor.
El uso de los sensores del lego
mindstorm resulta bastante similar entre
los diferentes tipos de sensores. Se debe
tener especial cuidado al definir las
variables que reciben la medicin del
sensor, ya que algunos entregan valores
booleanos, otros valores enteros, etc. Es
importante resaltar tambin que se debe
tener precaucin al visualizar los valores
en la pantalla del brick para algunos
sensores con un rango grande, un error
comn observado en el laboratorio
consiste en visualizar la variable sin
realizar un refresco de pantalla. Esto
ocaciona errores al leer la cifra medida
con uno o dos valores de ms en la
pantalla que no corresponden con el valor
real entregado por el dispositivo.
Al momento de realizar la practica con el
sensor Touch. Present la particularidad
de que cuando se presionaba el sensor 2
veces y el motor deba andar en sentido
contrario
el
brick
se
apaga
inmediatamente, con las observaciones
del ingeniero se logr deducir que el
motor se estaba quedando sin potencia,
es decir la corriente que el servomotor
consuma en marcha atrs, era demasiado
grande para poder operar. Revisando el
cdigo tenamos la velocidad en sentido
anti-horario al 100%, una vez se la bajo
al 50% el cdigo funcion normalmente.
VII.
CONCLUSIONES.
Con respecto a la seal lograda con el
control de posicin del motor lego, se
observ que no se puede describir
exactamente una seal diente de sierra
perfecta ya que es imposible regresar el

Universidad Nacional de Colombia.

eje del servomotor a la posicin inicial


relativa en un tiempo igual a 0, lo que si
se puede lograr con el control de
velocidad ya que nos permite cortar el
suministro de potencia al dispositivo.
A pesar de que las herramientas con las
que trabajamos no implican dispositivos
de potencia grandes o a escala industrial,
los procedimientos que se llevan a cabo,
conforman una fuerte base para
experimentar
y
observar
el
comportamiento similar al que se podra
implementar en la vida prctica.
Para la implementacin de los cdigos se
debe actuar con algo de criterio teniendo
en cuenta cmo responder la plataforma,
para as evitar inconvenientes como el
presentado respecto a que el brick se
apagaba por que la potencia no era
suficiente para regresar el motor a la
velocidad mxima.
El entorno de programacin y el lenguaje
manejado permiten muchas facilidades al
momento de implementar los cdigos ya
que se cuenta con muchos comandos que
realizan funciones completas es el caso
de: avance hacia adelante, avance hacia
atas, contar el nmero de grados, etc.
La operacin con la plataforma LEGO
permiten concentrarse en la accin de
controlar netamente los dispositivos ya
que por su estructura, en muchas de las
ocasiones, evitar la caracterizacin y
linealizacin de los sensores, logrando
Otorgan simplicidad, practicidad y
facilidad de uso.
VIII.

BIBLIOGRAFA.

[1] H. Surez, Gua de Laboratorio 1:


Introduccin a la plataforma Lego Mindstorms,
Laboratorio de Control, Universidad Nacional De
Colombia, Control, 2015 - I.
[2] M L. Pinto, G, Bermdez. Determinacin de
los Parmetros Para el Servomotor NXT LEGO
Minstoms Con Tcnicas de Identificacin de
Sistemas.2010.

[3] D. Herrera, Implementacin y puesta en


Marcha de Una Plataforma de Prcticas de
Control Con Arquitectura LEGO. Tesis para optar
por el ttulo de Magister en Automatizacin
Industrial. Universidad Nacional de Colombia,
Posgrado en Automatizacin Industrial. Bogot,
2010.
[4]. LEGO MINDSTORMS NXT Hardware
Developer Kit pdf- consultado el 15 de febrero de
2015 disponible en: http://ebookbrowse.com/legomindstorms-nxt-hardware-developer-kit-pdfd1384528.
[5]. I. Calvo, Uso conjunto de la plataforma
LEGO MINDSTORMS NXT y metodologas PBL
en Informtica Industrial, Perianez - Consultado
el 15 de Febrero del 2015 - Disponible en:
www.ehu.es/ikastorratza/6_alea/lego.pdf
[6]. Manejo bsico del sensor de ultrasonido.
Consultado el 16 de febrero de 2015 disponible
en:http://blog.electricbricks.com/es/2010/03/tutori
al-java-lejos-lego-mindstorms-nxt-7/
[7] MS1044 Sensor Giroscpico NXT - LEGO
Education - consultado el 16 de febrero de 2015
disponible: http://www.electricbricks.com/legomindstorms-sensor-ms1040-sensor-aceleracioninclinacion-nxt-lego-education-p-1082.html
[8] MS1048 Sensor de Luz NXT - LEGO
Education- consultado el 17 de febrero de 2015.
http://www.electricbricks.com/lego-Mindstormssensor-9844-sensor-luz-nxt-lego-education-p254.html.
[9] MS1048 Sensor de Sonido NXT - LEGO
Education- consultado el 21 de febrero de 2015
http://www.electricbricks.com/lego-mindstormssensor-9845-sensor-sonido-nxt-lego-education-p255.html.
[10] MS1048 Sensor de Tacto NXT - LEGO
Education- consultado el 21 de febrero de 2015
http://www.electricbricks.com/lego-mindstormssensor-9843-sensor-contacto-nxt-lego-educationp-567.html

Universidad Nacional de Colombia.


[11]https://www.youtube.com/watch?
v=zbvVrqFM2io. Consultada el 21 de febrero de
2015.