# Lego MindStorm NXT

LEGO Mindstorms NXT es un set programable fabricado por LEGO en julio de 2006. Este set reemplazó a la primera versión de Lego Mindstorms RCX. Dicho aparato tiene dos versiones, la versión comercial (set#8527) y la versión educativa (set #9797). El set viene con el programa NXT-G u opcionalmente con el programa de LabVIEW para Lego Mindstorms. Una nueva versión del NXT salió en 2009, llamada Lego Mindstorms NXT 2.0, la cual incluía un sensor de color y algunas otras mejoras. Posteriormente salió un nuevo modelo llamado EV3, el último a la fecha (2018).

## Ladrillo Programable NXT

El elemento principal del set es la computadora con forma de ladrillo, llamada Ladrillo programable NXT, o también conocido como el cerebro. El ladrillo soporta tener hasta cuatro sensores conectados y controlar hasta tres motores. Estos se conectan mediante un cable RJ12, el cual es muy similar al RJ11, pero este último es incompatible con el sistema.
El ladrillo cuenta con una pantalla LCD monocromática de 100 x 60 píxeles, cuatro botones para navegar y seleccionar los programas, también cuenta con un microcontrolador de 32 bits ARM7TDMI-core Atmel AT91SAM7S256 con 256KB de memoria y 6KB de RAM, además de un microcontrolador de 8 bit Atmel AVR ATmega48. Es alimentado por 6 pilas AA (1.5 V c/u), o con una pila recargable de Li-Ion, en la versión educativa.
El ladrillo NXT no cambió para la versión 2.0, aunque para celebrar el décimo aniversario de Mindstorms salió una edición limitada de color negro, con ninguna modificación interna.

### Kits de firmware y de desarrolladores

Lego lanzó el firmware del NXT como open source, al igual que los diagramas de todos los componentes de hardware.
Varios kits de desarrolladores que contienen documentación del NXT están disponibles:
* Software Developer Kit (SDK), incluye información sobre los controladores USB, formatos de archivo ejecutable y referencias en byte code.
* Hardware Developer Kit (HDK), contiene documentación y diagramas para el ladrillo y los sensores del NXT.
* Bluetooth Developer Kit (BDK), contiene la documentación sobre los protocolos Bluetooth.

## Programación

Se pueden crear programas muy simples solo utilizando el menú en el ladrillo NXT, para programas más complicados o sonidos se deben programar mediante el puerto USB o usando una comunicación inalámbrica mediante Bluetooth. Algunos archivos se pueden pasar de un ladrillo a otro usando Bluetooth, también se puede usar algunos celulares como control remoto. Los NXT se pueden comunicar entre sí y correr algunos programas simultáneamente, esto se puede hacer hasta con tres dispositivos NXT.
La versión comercial del kit incluye un software para escribir programas en Windows o en Mac OS. Este software está basado en LabVIEW de National Instruments el cual provee una programación visual, lo que implica que en vez de tener que escribir el código simplemente se puede programar usando diagramas esquemáticos.

### NXT-G

NXT-G v2.0 es una plataforma de programación que viene incluido con el NXT. Con la construcción de bloques y cables para encapsular la complejidad, el NXT-G se puede usar para real-world programming. Su programación en paralelo es buena para poder correr ciclos de secuencias y respuestas en paralelo, para mezclar el control autónomo con el bluetooth, o con algún otro control remoto. Este lenguaje permite la visualización de todos los instrumentos de LEGO, y la mayoría de sensores y componentes externos. La versión 2.0 contiene nuevos tutoriales, un control remoto, diseños de gráficos y sonidos personalizados y soporte del nuevo sensor de color de LEGO.

### C sharp con Microsoft Robotics Developer Studio

Herramientas gratuitas (Visual Studio Express en combinación con Robotics Developer Studio) habilitan la programación del NXT usando el lenguaje de programación C sharp, otros lenguajes que acepta son IronPython y VB.NET.

### BricxCC, Next Byte Codes, Not eXactly C

Bricx Command Center (BricxCC) es la IDE, usada para escribir, compilar, y editar programas NBC y NXC para NXT. También, como BricxCC originalmente fue creado para el RCX, los programas pueden ser escritos usando NQC vía BricxCC. Diferentes firmwares pueden ser usados para programar al NXT usando BricxCC.
BricxCC tienen muchas utilidades como NeXTExplorer (carga/descarga archivos, y desfragmento el NXT, usando el archivo hex viewer); y NeXTScreen (visualización de la pantalla LCD del NXT y captura de imágenes y vídeo).
Next Byte Codes (NBC) es un lenguaje simple de open source con la sintaxis del lenguaje de ensamblador que puede ser utilizado para programar el NXT.CricxCC también tiene la capacidad de descompilar ejecutables .rxe de NXT a NBC.
Not eXactly C (NXC) es una lenguaje de programación de open source de alto nivel, similar a C, construido en el compilador NBC. NXC también sirve para programar el NXT. El NXC es básicamente el NQC para el NXT . Es uno de los lenguajes de programación externos más utilizados para programar el NXT. Es posible crear videojuegos para el NXT en NXC.

### Robolab

Robolab 2.9 es la plataforma más reciente originalmente usada en el RCX. La versión 2.9 ha sido actualizada para que pueda ser usada por el NXT. Lego anunció que oficialmente va a dejar de soportar Robolab pero Robolab 2.9 sigue disponible.

### RoboMind

RoboMind es el software educacional que fue especialmente diseñado para enseñarle a los maestros y alumnos sobre lógica, programación y robótica. La fortaleza de RoboMind es el ambiente de aprendizaje, el cual permite desarrollar y probar scripts en una plataforma virtual rápidamente. Los scripts se pueden transferir directamente al robot NXT para visualizar los resultados en la vida real. Los scripts de RoboMind corren el estándar firmware.

### Enchanting

Enchanting trae la programación del NXT al Scratch IDE, diseñada por Lifelong Kindergarten Group en el MIT para hacer la programación más intuitiva inclusive para niños pequeños. El programa de NXT tiene la claridad ofrecida por esa plataforma de programación.

### ROBOTC

Carnegie Mellon Robotic's Academy, ROBOTC es un lenguaje de programación basado en C por VEX, el nuevo VEX Cortex, FIRST Tech Challenge y LEGO MindStorms. ROBOTC corre una versión optimizada del firmware el cual permite que el NXT corra con gran velocidad los programas, además de que comprime los archivos para que puedan caber una gran cantidad de estos en el NXT, como cualquier otro lenguaje del NXT, ROBOTC requiere que descargues el programa directamente de la interfaz de ROBOTC para que pueda ser ejecutado.

### NXTGCC

NXTGCC es una toolchain GCC para programar el NXT firmware en C.

### leJOS NXT

leJOS NXJ es un lenguaje open source de alto nivel basado en Java que utiliza un firmware específico producido por el leJOS team.

### nxtOSEK

Para poder programar en C/C++, puede usarse nxtOSEK, pero eso requiere también un firmware específico.

### ICON

Para escribir archivos directamente en el NXT, ICON de Steve Hassenplug es el recurso ideal.

### MATLAB y Simulink

* MATLAB es un lenguaje de programación de alto nivel para cálculo numérico, adquisición de datos y análisis. Puede ser usado para controlar el NXT mediante el puerto serial del bluetooth (la comunicación serial es parte de la funcionalidad de MATLAB) o vía USB, por ejemplo usando el RWTH - Mindstorms NXT Toolbox.
* Simulink es una plataforma de modelado y simulado de sistemas dinámicos usando diagrama de bloques. Usando Simulink el usuario puede diseñar y simular algoritmos de control y sistemas LEGO, por lo que se puede programar el NXT o el EV3. El soporte para programar el NXT o el EV3 requiere tener Simulink el cual no tiene un costo adicional.
El soporte de MATLAB y Simulink para programar LEGO MINDSTORMS es gratuito.
LEGO MINDSTORMS Support from MATLAB and Simulink

### Lua

pbLua es un puerto del lenguaje de programación Lua, un lenguaje de programación de uso general para Lego Mindstorms.

### Ada

Un puerto de GNAT está disponible para el NXT. Se basa en núcleo de ejecución de tiempo real basado en el Ravenscar profile, el mismo que se utiliza en el satélite GOCE, este permite usar características Ada de alto nivel para desarrollar sistemas de tiempo real y concurrentes en el NXT.

### URBI

URBI es otro lenguaje y es un lenguaje en paralelo y orientado a eventos, con interfaces en C++, Java y Matlab. También tiene una arquitectura de componentes (UObject) para la distribución. Urbi es compatible con varios robots, incluyendo a: NAO, Bioloid y Aibo.

### FLL NXT Navigation

FLL Nxt Navigation Archivado el 4 de marzo de 2016 en Wayback Machine. es un programa de código abierto (open source) que permite la navegación en la tabla de la competencia de FLL. Este programa utiliza NXT-G y archivos .txt para escribir los programas. No se sabe si es legal implementar esto en las competencias de FLL.

### ruby-nxt

ruby-nxt es una librería del NXT para el lenguaje de programación Ruby. A diferencia de algunos otros lenguajes para el NXT el código no es compilado a un archivo binario sino que el código es directamente transmitido al NXT vía bluetooth.

### Robotics.NXT

Robotics.NXT es una interfaz Haskell para el NXT por Bluetooth. Este permite comandos directos, mensajes y muchos sensores (incluyendo no oficiales), también permite un control a base de mensajes de un NXT ejecutado vía remota.

### LibNXT

LibNXT es una librería de utensilios para hablarle al NXT en un nivel muy bajo. LibNXT está enfocada principalmente a las plataformas oficiales de LEGO Mindstroms NXT. La librería trabaja en todos los sistemas operativos POSIX-compliant donde libusb 0.1 sea soportado. También puede ser utilizado en Windows usando el puerto win32 de libusb.

### C_NXT

C_NXT es una librería para controlar el NXT certificada bajo el GPLv2. La librería permite a los usuarios controlar el NXT vía un control bluetooth desde otros programas en C. La librería provee un bajo nivel de control pero un gran nivel de abstracción, la librería solo corre en GNU+Linux.

### PyNXC

PyNXC es un proyecto que convierte Python en NXC para poder ser descargado a los robots de LEGO Mindstroms.

### NXT-Python

NXT-Python es un módulo de python en el cual se comunica con el NXT vía USB o Bluetooth, soporta comandos directos y varios sensores ajenos a LEGO.

### LEGO Mindstorms EV3 Software

El software que viene con el nuevo LEGO Mindstroms EV3 puede ser usado para programar el NXT, por el momento la señal bluetooth es incompatible por lo que los programas deben de ser descargados usando el cable USB.

### Physical Etoys

Physical Etoys es un sistema de programación visual para diferentes equipos electrónicos. Es soportado en modo directo o compilado.

## Sensores

El kit base de Lego Mindstorms NXT 1.0 incluye:
* 3 servo motores idénticos que tienen incorporado un conjunto de reductores de velocidad con codificadores rotatorios ópticos que perciben las rotaciones con un grado de precisión.
* 1 sensor de presión, este detecta si está presionado, fue presionado o fue soltado. El botón naranja de "Enter" y los dos botones grises pueden ser programados como sensores de presión. En el software NXT-G se le asigna un valor de 0 cuando no está presionado y un valor de 1 si fue o está presionado.
* El sensor de luz detecta el nivel de luz en una sola dirección, también incluye un Led para iluminar un objeto. El sensor de luz puede detectar los valores de luz reflejados (usando el led rojo), o el nivel de luz ambiental. En el programa de NXT-G el sensor mide una escala de luz de 0 al 100, siendo 100 muy claro y 0 muy oscuro. Si se calibra el sensor puede ser utilizado como un sensor de distancia.
* El sensor de sonido mide el volumen en una escala de 0 al 100, siendo 100 muy ruidoso y 0 silencio completo.
* El sensor ultrasónico mide la distancia a la que un objeto se encuentra del sensor, y puede detectar movimiento, el sensor se puede programar para que de la medición en centímetros o en pulgadas. La distancia máxima que puede medir es de 233 cm con una precisión de 3 cm.
* En el LEGO Mindstorms 2.0 incluye un sensor de color.
Los siguientes sensores se venden por separado y no vienen incluidos en el kit de LEGO:
* Compañías externas a LEGO también fabrican sensores como: compás, giroscopio, rastreador infrarrojo, lector RFID, acelerómetros y sensores de temperatura, algunos de estos sensores también los fabrica LEGO.
Los sensores se deben de programar usando cualquiera de los medios mencionados arriba y es decisión del usuario saber qué hacer con los valores que le otorga cada uno de los sensores.
Lego también vende adaptadores para la línea de sensores Vernier.

### Conectores

Los sensores son conectados al ladrillo del NXT usando una conexión modular de 6 posiciones que incluye interfaces analógicas y digitales. La interfaz análoga es compatible con la versión anterior RCX usando un adaptador. La interfaz digital es capaz de manejar las comunicaciones I$^2$C y RS-485.
Interfaz de conexión de pines de los sensores del NXT :
| Pin | Nombre | Función | Color |
| 1 | ANALOG | Analog interface, +9V Supply | blanco |
| 2 | GND | Tierra | negro |
| 3 | GND | Tierra | rojo |
| 4 | IPOWERA | +4.3V Supply | verde |
| 5 | DIGIAI0 | I$^2$C Clock (SCL), RS-485 B | amarillo |
| 6 | DIGIAI1 | I$^2$C Data (SDA), RS-485 A | azul |