Informe1 Castillo Mesias Torres

7
Informe 1: Introducción Al Lego Mindstorms NXT Resumen—El contenido corresponde al primer informe del laboratorio de Control, que consistió en realizar un acercamiento a la unidad Lego Mindstorms, para conocer de manera general su hardware y emplear su software (Bricx Command Center con lenguaje NXC) en ejercicios sencillos que dan una idea de la variedad de opciones que brinda el equipo. Palabras clave—Brick, Bricx command center, Lego, Lenguaje NXT, sensores I. INTRODUCCIÓN l equipo Lego Mindstorms NXT, es una herramienta pedagógica desarrollada por Lego basándose en estudios realizados en el MIT, con el cual realizó una alianza para construir una primera versión que poseía el bloque RCX, versión previa del actual NXT que permite acercarse a la lógica del control, en la que se relacionan entradas y salidas mediante algoritmos construidos en el lenguaje NXC (Not exactly C) mediante el programa Brick command center que se administra desde un computador.. E La plataforma Lego NXT consta de una unidad de procesamiento (Brick), sensores de distintos tipos y actuadores del tipo servomotores. Juntos se conjugan para realizar las tareas que se disponga en el programa que se construya en el software indicado, programa que se descarga mediante conexión usb desde un computador hacia el Brick, el cual lo almacena y permite su ejecución. Como descripción general se puede indicar que el Brick posee 4 puertos de entrada (marcados como 1, 2, 3 y 4), 3 puertos de salida (A, B y C), una conexión USB, así como bluetooth y parlante incorporados. . II. INTRODUCCIÓN AL HARDWARE A. Características Técnicas de la Unidad Básica de Procesamiento La unidad de procesamiento o Brick posee un procesador con un microcontrolador ARM7 de 32 bits, el cual posee 256 Kbytes de memoria FLASH, 64 Kbytes de RAM y trabaja a una velocidad de 48 MHz, dicha unidad a diferencia del bloque RCX (versión anterior presentada por Lego), posee mayores capacidades de ejecución de programas, evitando que los procesos inherentes de varios paquetes de datos colisionen y produzcan errores y un posible error en la ejecución del software. Por su parte el co-procesador del Brick consiste en un microcontrolador AVR de 8 bits, posee 4 Kbytes de FLASH, 256 Bytes de EEPROM y 512 Bytes de RAM con un rendimiento de hasta 20 MIPS (millones de instrucciones por segundo) a 20 MHz. [1] Comunicación entre el procesador y coprocesador: Se hace mediante el bus I 2 C (Inter- Integrated Circuits), un estándar que facilita la comunicación entre microcontroladores, memorias y otros dispositivos con cierto nivel de "inteligencia", sólo requiere de dos líneas de señal y un común o masa. Fue Informe 1: Introducción al Lego Mindstorms NXT (Agosto 2012) Castillo A. Syndy, Mesias B. Nina, and Torres P. Wilson. {sfcastilloa,namesiasb,wctorresp}@unal.edu.co 1

Transcript of Informe1 Castillo Mesias Torres

Page 1: Informe1 Castillo Mesias Torres

Informe 1: Introducción Al Lego Mindstorms NXT

Resumen—El contenido corresponde al primer informe del laboratorio de Control, que consistió en realizar un acercamiento a la unidad Lego Mindstorms, para conocer de manera general su hardware y emplear su software (Bricx Command Center con lenguaje NXC) en ejercicios sencillos que dan una idea de la variedad de opciones que brinda el equipo.

Palabras clave—Brick, Bricx command center, Lego, Lenguaje NXT, sensores

I. INTRODUCCIÓN

l equipo Lego Mindstorms NXT, es una herramienta pedagógica desarrollada por Lego basándose en estudios

realizados en el MIT, con el cual realizó una alianza para construir una primera versión que poseía el bloque RCX, versión previa del actual NXT que permite acercarse a la lógica del control, en la que se relacionan entradas y salidas mediante algoritmos construidos en el lenguaje NXC (Not exactly C) mediante el programa Brick command center que se administra desde un computador..

E

La plataforma Lego NXT consta de una unidad de procesamiento (Brick), sensores de distintos tipos y actuadores del tipo servomotores. Juntos se conjugan para realizar las tareas que se disponga en el programa que se construya en el software indicado, programa que se descarga mediante conexión usb desde un computador hacia el Brick, el cual lo almacena y permite su ejecución.

Como descripción general se puede indicar que el Brick posee 4 puertos de entrada (marcados como 1, 2, 3 y 4), 3 puertos de salida (A, B y C), una conexión USB, así como bluetooth y parlante incorporados.

.

II.INTRODUCCIÓN AL HARDWARE

A. Características Técnicas de la Unidad Básica de Procesamiento

La unidad de procesamiento o Brick posee un procesador con un microcontrolador ARM7 de 32 bits, el cual posee 256 Kbytes de memoria FLASH, 64 Kbytes de RAM y trabaja a una velocidad de 48 MHz, dicha unidad a diferencia del bloque RCX (versión anterior presentada por Lego), posee mayores capacidades de ejecución de programas, evitando que los procesos inherentes de varios paquetes de datos colisionen y produzcan errores y un posible error en la

ejecución del software.Por su parte el co-procesador del Brick consiste en un

microcontrolador AVR de 8 bits, posee 4 Kbytes de FLASH, 256 Bytes de EEPROM y 512 Bytes de RAM con un rendimiento de hasta 20 MIPS (millones de instrucciones por segundo) a 20 MHz. [1]

Comunicación entre el procesador y coprocesador:Se hace mediante el bus I2C (Inter- Integrated Circuits), un

estándar que facilita la comunicación entre microcontroladores, memorias y otros dispositivos con cierto nivel de "inteligencia", sólo requiere de dos líneas de señal y un común o masa. Fue diseñado a este efecto por Philips y permite el intercambio de información entre muchos dispositivos a una velocidad aceptable, de unos 100 Kbits por segundo, aunque hay casos especiales en los que el reloj llega hasta los 3,4 MHz.

La metodología de comunicación de datos del bus I2C es en serie y sincrónica. Una de las señales del bus marca el tiempo (pulsos de reloj) y la otra se utiliza para intercambiar datos, se conocen como SCL (System Clock) y SDA (System Data) respectivamente.

EL bus I2C funciona con la lógica maestro-esclavo, en la cual el dispositivo maestro envía la señal de sincronización, cuando éste quiere comunicarse con un esclavo, produce una secuencia de inicio en el bus. Los datos se transfieren en secuencias de 8 bits. Estos bits se colocan en la línea SDA comenzando por el bit de más peso (o más significativo). Una vez puesto un bit en SDA, se lleva la línea SCL a alto. Por cada 8 bits que se transfieren, el dispositivo que recibe el dato envía de regreso un bit de reconocimiento, de modo que en realidad por cada byte de dato se producen 9 pulsos de reloj. Si el dispositivo que recibe envía un bit de reconocimiento bajo, indica que ha recibido el dato y que está listo para aceptar otro byte. Si retorna un alto, lo que indica es que no puede recibir más datos y el dispositivo maestro debería terminar la transferencia enviando una secuencia de parada. [2]

Comunicación entre el Procesador, el Display y el Bluetooth:Se hace mediante el bus SPI (Serial Peripherical Interface)

es un bus de tres líneas, sobre el cual se transmiten paquetes de información de 8 bits. Cada una de estas tres líneas porta la información entre los diferentes dispositivos conectados al bus. Cada dispositivo conectado al bus puede actuar como transmisor y receptor al mismo tiempo, por lo que este tipo de comunicación serial es full duplex. Dos de estas líneas

Informe 1: Introducción al Lego Mindstorms NXT (Agosto 2012)

Castillo A. Syndy, Mesias B. Nina, and Torres P. Wilson. {sfcastilloa,namesiasb,wctorresp}@unal.edu.co

1

Page 2: Informe1 Castillo Mesias Torres

Informe 1: Introducción Al Lego Mindstorms NXT

trasfieren los datos (una en cada dirección) y la tercer línea es la del reloj.

Los dispositivos conectados al bus son definidos como maestros y esclavos. Un maestro es aquel que inicia la transferencia de información sobre el bus y genera las señales de reloj y control.

Todas las líneas del bus transmiten la información sobre una sola dirección, las líneas son:

La señal sobre la línea de reloj (SCLK) que es generada por el maestro y sincroniza la transferencia de datos.

La línea MOSI (Master Out Slave In) que transporta los datos del maestro hacia el esclavo.

La línea MISO (Master In Slave Out) transporta los datos del esclavo hacia el maestro.

Los datos sobre este bus pueden ser transmitidos a una razón de casi cero bits por segundo hasta 1 Mbits por segundo. Los datos son transferidos en bloques de 8 bits, en donde el bit más significativo (MSB) se transmite primero.

En un tiempo determinado solo podrá existir un maestro sobre el bus. Cualquier dispositivo esclavo que no esté seleccionado, debe deshabilitarse (ponerlo en alta impedancia), el bus SPI emplea un simple registro de desplazamiento para transmitir la información. La transferencia de los datos es sincronizada por la línea de reloj de este bus para que un BIT sea transferido por cada ciclo de reloj. [3]

Comunicación entre el procesador y el Bluetooth:Se hacen mediante el bus UART. El protocolo UART

(Universal Asynchronous Receiver Transmitter) es usado desde hace mucho tiempo, tanto para recibir como para transmitir datos de forma serie es decir  bit por bit.

Se dice que es un protocolo Asíncrono ya  que no lleva señal de sincronismo, por lo que debe ser implementado  en el funcionamiento del dispositivo, configurando el transmisor y el receptor para que trabajen a una misma velocidad. Las velocidades típicas son 300, 600, 1200, 4800, 9600, 19200, 38400, 57600, 115200 bps.

Los datos se envían por una sola línea por lo tanto se necesita un bit de inicio y un bit de parada; en una UART la línea estará en alto cuando no se esté transmitiendo por lo tanto el bit de inicio será 0 y el bit de parada será un 1. [4]

B. Puertos de Entrada y Salida del Brick

Las Entradas del Brick se encuentran identificadas por números del 1 al 4, sus salidas se identifican con las letras A, B y C.

Las entradas constan de seis contactos que permiten señales analógicas y digitales. La identificación y distribución de los pines se muestran en la Figura 1. El pin 1 corresponde a una entrada analógica que está conectada a un convertidor análogo digital (A/D) de 10 bits, este toma una señal de muestreo cada 333Hz. Los pines 2 y 3 sirven como señales de referencia. El pin 4 es un fuente de 4.3 voltios que suministra un máximo de corriente de 180mA, es decir 20mA para cada puerto; si este es cortocircuitado con la señal de referencia, el bloque se reprogramara. Los pines 5 y 6 son señales digitales que se comunican por I2C a una velocidad

de 9600 bit/s, estos puertos solo permiten que los elementos externos tengan resistores Pull-up en los pines de comunicación.

Fig. 1. Pines de los Puertos de entrada

A las entradas se pueden conectar sensores activos, pasivos o digitales, para ello este equipo tiene predeterminadas las siguientes entradas:

Puerta 1: Sensor de tactoPuerta 2: Sensor de sonidoPuerta 3: Sensor de luzPuerta 4: Sensor de ultrasonido

Fig. 2. Pines de los Puertos de salida

En el caso de las tres salidas se cuenta también con seis contactos soportados por una plataforma digital para permitir a las salidas regresar información al bloque. En la figura 2 se puede apreciar la distribución de los pines en los puertos de salida. Los pines 1 y 2 corresponden a una señal PWM que permite controlar a los actuadores, esta señal es controlada por un motor que le suministra 700 mA con un pico de 1A que además tiene una protección térmica que permite ajustar automáticamente la corriente de salida si se llega a presentar mucha potencia. El pin 3 corresponde a la señal de referencia. El pin 4 corresponde a una funte de 4.3 voltios que suministra una corriente de 180 mA es decir 20 mA a cada puerto, si se llega a presentar un potencia mayor la corriente disminuye sin avisar. Los pines 5 y 6 son puertos de entrada que están conectados a un un interruptor Schmitt, esto da como resultada una señal de cuadratura en el sistema que permite detectar en qué sentido es el movimiento del motor. [5]

Al igual que las entradas, estas salidas tienen asociadas los siguientes elementos:

Puerta A: Motor para función externa

2

Page 3: Informe1 Castillo Mesias Torres

Informe 1: Introducción Al Lego Mindstorms NXT

Puerta B: Motor IzquierdoPuerta C: Motor Derecho

C. Sensores Del Lego Mindstorms:

Los sensores utilizan protocolos de comunicación I2C y están diseñados para conectarse a los puertos de entrada, aquellos que no poseen estas características tiene asociados cables que permiten realizar su adaptación.

Sensor de UltrasonidoEs un sensor de tipo digital, que trabaja con el principio de

los murciélagos, es decir que emite un sonido y espera su retorno para determinar a qué distancia se encuentra. Para calcular la distancia a la cual se encuentra el objeto es necesario que éste se encuentre a una distancia menor a 255 cm, sin embargo si el objeto es curvo puede existir la posibilidad de no ser detectado. El error de medida se encuentre en +/- 3 cm.

Sensor EOPDLa sigla corresponde a sensor Electro Óptico de Detención

de Proximidad. Este sensor trabaja con una fuente de luz que emana de su interior, para realizar la identificación de la proximidad de los objetos distingue entre la diferencia de luz, es decir entre la sombra y la luz que rodea la sombra del objeto. Puede realizar esto en un rango de 20 cm, dependiendo de las características del objeto.

Sensor de colorEs un sensor que permite distinguir entre diferentes colores

realizando un lectura que devuelve al programa un número entre 0 y 17, este número está asociado a diferentes colores y se refresca 100 veces por segundo. Para hacer la lectura el sensor emite tres luces de color diferentes con LEDs, toma la lectura de la intensidad reflejada y genera el número de color, debe estar ubicado a 20 mm de la superficie.

Sesor GiroscopioEs un sensor de tipo activo, que permite determinar la

velocidad de rotación del motor, esto se hace para permitir movimiento de balanceo. La lectura permite medir 360 grados por segundo y lo hace 300 veces por segundo. Su posición inicial trabaja con el eje vertical.

Sensor AcelerómetroEs un sensor que puede medir la aceleración en los tres

ejes (x, y, z) en un rango de -2g a 2g con una resolución de 200 unidades por g. La lectura de esta información se hace 100 veces por segundo. También realiza mediciones de inclinación en los tres ejes. Al tomar los datos devuelve una medición al sistema de un número entre 0 y 254.

Sensor de ContactoEs un sensor de tipo pasivo, que permite detectar presiones

sobre el pulsador, este se activa al chocar con algo, enviando una señal de 0 a 5 voltios. Se dice que el sensor esta presionado al llegar a un valor de 450. Sensor de Compas

Este sensor contiene una brújula magnética que lee el campo magnético de la tierra y de este modo calcula un ángulo de partida el cual tiene una precisión de 1 grado. LA lectura de los datos se realiza 100 veces por segundo

III. INTRODUCCIÓN AL SOFTWARE

A. Lenguaje NXC En Brick Commman Center

El lenguaje NXC (Not Exactly C) permite establecer comunicación con el Brick del Lego mediante el entorno de programación Bricx Command Center. Este entorno posee los comandos necesarios para definir los sensores y los actuadores, por lo cual sólo se necesita construir el algoritmo deseado.

Tal y como sucede en C, se requiere de un archivo principal para que el Lego ejecute las tareas (se define como task main), en él se deben declarar las variables, con los tipos disponibles en el programa:

Int, long, short, unsigned int, unsigned long, bool, char, byte, string, float, mutex (En NXC el tipo mutex es un valor de 32-bits que se utiliza para sincronizar el acceso a los recursos y compartirlo entre varios subprocesos.)

El programa permite declarar funciones y tareas, así como contar con plantillas (templates) que facilitan el diseño de los algoritmos. Además de las estructuras de condicionales y ciclos comunes en el lenguaje C (if, while, for, etc.), el Brick command center permite el acceso a librerías preestablecidas algunas de ellas con funciones como:

Definir las salidas y sus acciones: OUTPUTS Establecer acciones ligadas al tiempo: TIMING Definir tareas y comunicación con los sensores:

SENSORS Definir los modos, tipos y características varias de los

sensores (respectivamente): SENSOR TYPES, SENSOR MODES, SENSOR MISC

Tareas varias: MULTITASK Acceder al display del Brick: DRAWING Acciones relacionadas con el parlante: SOUNDS Definir operaciones matemáticas: MATH

En la plataforma Brick Command center el programa debe ser compilado, para que el software compruebe si su sintaxis y el uso de las variables es correcto, posteriormente debe descargarse al Brick para finalmente ser ejecutado, desde el Brick mismo o desde el computador. El Brick command center genera 3 tipos de archivo para cada programa:

.nxc (El que se lee desde el Brick command center)

.back

.sym (El que ejecuta el Brick, una traducción enre niveles de lenguaje).

Como se verá más adelante en los códigos que se construyeron y probaron en el laboratorio, en general en los algoritmos deben indicarse los puertos que se van a emplear tanto para las entradas (IN_1, IN_2, IN_3, IN_4) como para las salidas (OUT_A, OUT_B, OUT_C), y también

3

Page 4: Informe1 Castillo Mesias Torres

Informe 1: Introducción Al Lego Mindstorms NXT

instrucciones temporales que garanticen la ejecución de las tareas y la visualización de las mismas de ser necesario.

Es muy importante al iniciar el software indicar el tipo de conexión que se establecerá con el Brick (el usado en los ejemplos fue USB), para descargar el programa cuando se haya compilado correctamente, también se debe seleccionar el tipo de Lego que para nuestro caso es NXT.

B. Programa Para controlar La Posición Del Servomotor

Fig. 3. Señal Genérica Diente de Sierra.

El algoritmo necesario para que el motor del Lego responda a un patrón diente de sierra como el de la figura 3 se muestra a continuación:

task main(){TextOut(1, 1, "Camilo Torres 261592");TextOut(2, 2, "Nina Mesias 285644");TextOut(3, 3, "Syndy Castillo 22781" );int pos=0;for(int i=0;i<5;i++){while(pos<=270){OnFwd(OUT_A,15);Wait(100);pos=MotorRotationCount(OUT_A);

}while(pos>23){OnRev(OUT_A,80);Wait(2);pos=MotorRotationCount(OUT_A);}

} OnFwd(OUT_A,80); Wait(10); Off(OUT_A);}Las primeras líneas de código imprimen en la pantalla del

Brick los nombres de los integrantes del grupo y sus respectivos códigos, luego se declara un variable de tipo entero llamada “pos” que será la encargada de guardar la última posición leída por el sensor de posición del servomotor. El ciclo for se encarga de realizar 5 repeticiones las que generan cinco dientes de sierra.

Dentro del for hay dos ciclos while el primero hace que al motor se le suministre el 15% de la corriente máxima haciéndolo girar hacia adelante 270°, cuando supera esta posición empieza a ejecutarse el segundo while el cual produce un retroceso del motor hasta la posición de 0° sin embargo este cicle no se rompe cuando la posición es 0° sino

cuando es 23°devido a la inercia que lleva el motor se tuvo que modificar ese valor, el cual se obtuvo de manera experimental, fruto de la observación en el laboratorio. Finalmente después de ejecutar los cinco dientes de sierra se hace girar el motor hacia adelante un instante pequeño de tiempo debido a la inercia, así se garantiza que termine en la posición inicial.

C. Programa Para Controlar La Velocidad Del Servomotor

l código necesario para que la velocidad del servomotor responda a un patrón diente de sierra se muestra a continuación:

task main(){TextOut(1, 1, "Camilo Torres 261592");TextOut(2, 2, "Nina Mesias 285644");TextOut(3, 3, "Syndy Castillo 22781" );int vel;repeat(30){ for (vel=0;vel<90;vel++) { OnFwd(OUT_B, vel); Wait(50); } Off(OUT_B); Wait(50);}}

Las primeras tres líneas de código son iguales a las de la implementación anterior por lo tanto no se explicaran. Primero se declara una variable tipo entero llamada “vel” esta variable corresponde al porcentaje de corriente que se le suministrara al motor para que este gire, dicha variable se hará aumentar de 0 a 90 cada 50 ms dentro de un ciclo for, después de llegar a la velocidad máxima correspondiente a 90%, se apaga el motor durante 50 ms, todas estas líneas están dentro de un repeat el cual hace que se generen 30 repeticiones, es decir, 30 dientes de sierra.

D. Programa Para Uso De Un Sensor De Sonido

Para esta parte de la práctica se decidió utilizar un sensor de sonido, de tal manera que el servomotor se accionara si el sensor detectaba un sonido fuerte como un aplauso o un grito. El código se presenta a continuación.

task main(){int valor;SetSensorType(IN_1,SENSOR_TYPE_SOUND_DBA);valor=0;while(valor<1000) {valor= Sensor(IN_1);Wait(5);} OnFwd(OUT_A, 50);

4

Page 5: Informe1 Castillo Mesias Torres

Informe 1: Introducción Al Lego Mindstorms NXT

Wait(2000);Off(OUT_A);}

Primero se le asigna el sensor de tipo sonido a la entrada uno del Brick luego, se declara una variable de tipo entero llamada “valor”, la cual se encargara de almacenar el valor retornado por el sensor de sonido, de tal manera que si este valor superior a 1000, se romperá un ciclo while y el motor girara hacia adelante durante 2 segundos y se apagara, de lo contrario el ciclo no se rompe y el motor permanecerá quieto

IV. CONCLUSIONES

1) El lenguaje NXC da una amplia gama de posibilidades para el diseño de programas y facilita la comunicación del usuario con el lego Mindstorm, debido en gran parte a que es un lenguaje muy similar a C con el que la mayoría de los usuarios está familiarizado.

2) Se debe considerar un tiempo entre la ejecución de tareas, especialmente para la visualización de la información en el display del Brick, porque de lo contrario los datos cambiarán continuamente o incluso el microcontrolador encargado puede no alcanzar a ejecutar una instrucción. Dado esto se debe tener cuidado con el muestreo de los sensores, pues estos tiempo necesarios al interior de los ciclos implican la pérdida de información en la detección de las señales externas.

3) La manera en que se implementó la señal diente de sierra de velocidad no es la mejor forma de hacerlo debido a que se interactúa con el porcentaje de corriente que se le suministra al motor no directamente con la velocidad del mismo.

REFERENCIAS

[1] Atmel.(2011, mayo) Atmel Microcontroller [Online]. Disponible: http://www.atmel.com/Images/2545s.pdf

[2] E.J. Carletti, (2007) Comunicación BUS I2C, Descripción y funcionamiento [Online], Disponible: http://robots-argentina.com.ar/Comunicacion_busI2C.htm

[3] Ingeniería en Microcontroladores, “Curso de Redes de Microcontroladores PIC (Protocolo SPI)”, [Online], Disponible: http://www.i-micro.com/pdf/articulos/spi.pdf

[4] M.D. Chaparro, (2010, enero16) Transmisor UART VHDL, [Online], Disponible: http://unelectronica.260mb.com/2010/01/transmisor-uart-vhdl/

[5] Lego Mindstorms NXT (2006) Lego Mindstorms Hardware developer Kit [Online] Disponible: http://mindstormsnxt.blogspot.com/2006/08/whats-inside-nxt-brick-part-ii.html

5