# Lego Mindstorms

Lego Mindstorms fue una línea de robótica para niños fabricada por la empresa LEGO que utilizaba elementos básicos de las teorías robóticas, como la unión de piezas y la programación de acciones en forma interactiva. Este robot fue comercializado por primera vez en septiembre de 1998, y descontinuado a fines de 2022.
Comercialmente se publicitaba como Robotic Invention System, en español Sistema de Invención Robotizado (RIS). También se vendía como herramienta educacional, lo que originalmente se pensó en una colaboración entre LEGO y el MIT. La versión educativa se llamaba Lego Mindstorms for Schools, en español Lego Mindstorms para la Escuela e incluía un software de programación basado en la GUI de Robolab.
Lego Mindstorms podía ser usado para construir un modelo de sistema integrado con partes electromecánicas controladas por computador. Prácticamente todo podía ser representado con las piezas tal como en la vida real, como un elevador o robots industriales.
La simplicidad de uso del kit LEGO Mindstorms al no requerir conocimientos eléctricos ni electrónicos, propició que, poco a poco aumentase su uso en el campo de la educación.
LEGO Mindstorms fue el material de construcción más eficaz para comenzar a experimentar con robots y concentrarnos en el aspecto académico del aprendizaje.
Hasta 2021 hubo cuatro generaciones de Lego Mindstorms: el bloque RCX, el bloque NXT, el EV3 y EV4.

## Historia

Lego Mindstorms fue uno de los resultados de la colaboración entre Lego y el MIT. Esta asociación se emplea como ejemplo de relación entre la industria y la investigación académica que resulta muy beneficiosa para ambos socios.

### Colaboración con el grupo de epistemología y aprendizaje del MIT

La línea Lego Mindstorms nació en una época difícil para Lego, a partir de un acuerdo entre Lego y el MIT. Según este acuerdo, Lego financiaría investigaciones del grupo de epistemología y aprendizaje del MIT sobre cómo aprenden los niños y, a cambio, obtendría nuevas ideas para sus productos, que podría lanzar al mercado sin tener que pagar regalías al MIT. Un fruto de esta colaboración fue el desarrollo del MIT Programmable Brick (Bloque programable MIT).
El mentor del grupo del MIT era Seymour Papert, un matemático interesado desde la década de 1960 por la relación entre la ciencia, la adquisición de conocimiento y el desarrollo de la mente infantil. De hecho, el nombre del producto, Mindstorms, proviene del título de un libro suyo, llamado MindStorms: Children, Computers, and Powerful Ideas, en el que describe sus ideas respecto al empleo de las computadoras como impulsoras del aprendizaje. Papert, uno de los creadores de lenguaje de programación Logo, ampliamente empleado como herramienta para enseñar programación, toma de Jean Piaget la concepción de niño como “constructor de sus propias estructuras mentales”. Es partidario del construccionismo, tesis que sostiene que el niño crea su conocimiento de forma activa y que la educación debe de facilitarle herramientas para realizar actividades que impulsen esta actividad. La lectura de su libro fue lo que impulsó al presidente de Lego a contactar en 1985 con el MIT, pues le hizo pensar que ambos grupos tenían ideas similares sobre el aprendizaje infantil.
El grupo de epistemología y aprendizaje del MIT, dirigido por Mitchel Resnick, que a su vez había sido pupilo de Papert, estaba profundamente influido por el constructivismo de Piaget, extendido por el propio Papert bajo la denominación de construccionismo. Según esta perspectiva, en lugar de instruir al estudiante proporcionándole fórmulas y técnicas (instruccionismo), es mejor potenciar el aprendizaje creando un entorno en el que los estudiantes puedan desempeñar actividades propias de ingenieros o inventores como vía para acceder a los principios fundamentales de la ciencia y la técnica. De esta forma es como se desarrolla la forma de pensar propia de los científicos, los estudiantes se interesan de manera real en su trabajo y motu proprio tratan de informarse para resolver los problemas que van encontrando. Así que se concentraron, en palabras de Resnick, en “diseñar cosas que permitan a los estudiantes diseñar cosas”.

### Antecedentes y desarrollo del “Bloque programable”

La línea Mindstorms no fue el primer fruto la relación entre Lego y el MIT, aunque sí el más exitoso. Con anterioridad, Lego se había interesado por el Lenguaje de programación Logo. Fruto de este interés nació en 1986 el sistema Lego TC Logo, creado por Resnick y Steve Ocko. Lego TC Logo era un sistema en el que se programaba en una computadora que estaba conectada por un cable a una construcción Lego que contaba con motores, luces y sensores. Aunque alcanzó un relativo éxito comercial, según Resnick el sistema «imponía restricciones tanto físicas como imaginativas».
Esta línea de desarrollo continuaría en 1993 con el lanzamiento de Control Lab, de software mejorado.
El paso de programar una computadora que se conectaba a una construcción Lego a programar un bloque de esa construcción era una idea natural que se estudió durante largo tiempo. Desde principios de los años 90 se empezó a investigar esta posibilidad. Sin embargo el proyecto tuvo que esperar a que el mercado fuera propicio. Por una parte, al principio el coste de la tecnología era demasiado alto. Por otra, el bloque se programaría desde un computador, y por esas fechas los computadores no estaban tan extendidos como lo estaban ocho años más tarde, lo que afectaría negativamente a la demanda. Hubo que esperar un lustro hasta que las condiciones fueran las apropiadas y decidieran empezar seriamente el desarrollo de lo que acabaría siendo el bloque RCX, un bloque de Lego que contaba con un microcontrolador, y que constituye el corazón del producto Mindstorms. De esta forma las construcciones Lego pasaban de ser estructuras estáticas a máquinas dinámicas que interactúan con el mundo. Por otra parte, mientras que en muchos casos los productos Lego proporcionaban las piezas necesarias para construir algo con un objetivo fijo, como un tren o un puente, lo que permite “aprender haciendo”, en el desarrollo del nuevo bloque se siguió en cambio la filosofía de Papert y Resnick de fomentar el “aprender diseñando”, y tratar de dejar más abiertas las posibilidades.

### Decisiones de diseño

El segmento de mercado escogido fue el de niños de 10 a 14 años, especialmente varones, a pesar de que las en los desarrollos del MIT no se había hecho distinción entre sexos. Este era también el segmento tradicional de Lego. La elección de este público determinó las decisiones de diseño y las diferencias entre el desarrollo del MIT, llamado Programmable Brick (Ladrillo o bloque programable) y el bloque RCX, diseñado y desarrollado de forma independiente por Lego a partir de las investigaciones realizadas conjuntamente con el MIT. El que se realizara un nuevo producto desde cero en lugar de emplear el diseño del MIT se justifica por los objetivos distintos de ambas organizaciones. El sistema del MIT estaba enfocado a la investigación del proceso de aprendizaje de los niños, lo que hacía que el sistema pudiera ser más caro de producir, pues no se fabricarían muchas unidades, y más frágil, pues siempre habría alguien para arreglarlo en un laboratorio lleno de ingenieros. En cambio, el bloque de Lego estaba destinado a la venta a preadolescentes a gran escala, así que debía ser más asequible y robusto.
Otras de las pautas de diseño fueron:
* El sistema debía ser sencillo para el nuevo usuario y a la vez debía permitir realizar diseños sofisticados para el iniciado.
* El juguete debía poderse emplear de muchas formas diferentes. Según Resnick, cada vez que al terminar un proyecto el niño consideraba que había “acabado” con el juguete se consideraba un fallo del diseño. Por otra parte, cada niño tiene intereses diferentes.
* Simplicidad. En las pruebas del MIT se descubrió que al hacer diseños más pequeños y limitados, conexiones para menos sensores y motores, que llamaron Cricket, los usuarios encontraban nuevas aplicaciones más creativas.
* Elección cuidadosa de las cajas negras: El niño tiene a su disposición motores, sensores y microcontroladores, pero no pueden modificarlos o rediseñarlos. El juego trataría sobre como combinarlos para hacer diseños, no sobre cómo diseñar estos componentes.
* Poner énfasis en el aprendizaje de la programación. Resnick había notado que, mientras que el número de ordenadores en las escuelas se había multiplicado en veinte años, a principios de los 80 se enseñaba Basic y Logo, mientras que a finales de los 90 se enseñaban menos rudimentos de la programación. En un principio se experimentó con Logo, pero los niños tardaban demasiado en aprenderlo. Entonces se desarrolló una versión gráfica, LogoBlocks, en la que las instrucciones estaban representadas por bloques y diagramas, que en cambio dificultaba la realización de software complejo. La decisión final del MIT fue implementar una versión híbrida: los programas podrían realizarse de forma gráfica o en código escrito. De esta forma el nuevo usuario podía empezar por la versión sencilla y pasar a la potente cuando necesitase hacer diseños más complejos. Sin embargo, Lego solo incorporaría en un principio a RCX la versión gráfica del entorno de desarrollo y en lugar de Logo desarrollaría un nuevo lenguaje de programación: RCX Code.
* El bloque debía tener un número suficiente de puertos de entrada/salida que pudieran conectarse con diferentes tipos de sensores: de temperatura, de amplitud del sonido o de luz.
* Desatender las sugerencias—hasta cierto punto—y observar en cambio en el laboratorio qué es lo que intentan hacer los niños con el juguete, pues apreciaron que de esta forma obtenían mejores ideas.
Lego ha sido uno de los mejores inventos

### Lanzamiento del producto

Este proyecto inicial se ramificaría en varias direcciones: el MIT 6.270 robotics competition kit, los Crickets del departamento de epistemología y aprendizaje del MIT y el bloque RCX de Lego. Posteriormente, uno de los desarrolladores del MIT involucrados lanzó al mercado su propio producto, fruto de la experiencia en esta investigación, llamado Handy Cricket.
La primera versión salió al mercado con un precio de $200 dólares. Incluía 717 componentes, entre ellos el bloque RCX. Tras su lanzamiento se vendieron 80.000 unidades en tres meses. Además, la comunidad de aficionados a la robótica, un público adulto, acogió con interés este nuevo producto. Este interés imprevisto del público adulto hizo que las ventas triplicaran las expectativas. Además, la creación de una comunidad de entusiastas que ampliaron las posibilidades del producto original, creando entornos de programación alternativos e incluso sistemas operativos para el RCX, como LegoOS y una máquina virtual Java, TinyVM, así como numerosas páginas web de intercambio de ideas.
Además del bloque RCX, existieron otros bloques programables, los cuales gradualmente se fueron desarrollando hasta lograr la versión definitiva de la versión NXT. A partir de 1998 se comercializó el inicio de la línea con el robot Cybermaster. A principios de 2004, debido a los malos resultados de Lego del año anterior, que registró unas pérdidas de 1 400 millones de coronas danesas (unos 188 millones de euros), cundió el rumor de que abandonaría la línea Mindstorms y volvería a su mercado tradicional. Sin embargo, en enero de 2006 Lego anunció la versión Mindstorms NXT, de última generación, que empezó a comercializar en junio de ese mismo año. En la segunda mitad de 2013 Lego comenzó a comercializar la tercera versión denominada Mindstorms EV3.

### Críticas

Algunas de las decisiones comerciales de Lego contradecían los principios del grupo de epistemología y aprendizaje. Miembros del grupo mostraron su desacuerdo sobre la decisión de incluir solamente modelos de robots orientados al combate en el kit comercial, e incluso de incluir un solo ejemplo de este tipo, pues contravenía su principio de dejar a los niños experimentar libremente con los bloques. Por otra parte, aunque el juego parte de la corriente construccionista, muchos profesores los empleaban con métodos de enseñanza esencialmente instructivistas, con lo que la difusión de la filosofía construccionista mediante este juguete ha sido menor de lo que en principio podría esperarse a la vista de las cifras de ventas. El grupo de epistemología y aprendizaje también ha recibido críticas cuestionando su valor académico, pues “casi nunca hacen nuevos descubrimientos tecnológicos, demuestran teorías científicas significativas o crean productos importantes”.

## Otros desarrollos
### CyberMaster

CyberMaster fue uno de los primeros desarrollos de Lego con un bloque de circuitos integrados con capacidades de programación. Su lanzamiento fue en el año 2000 solo en los mercados de Alemania, Australia, España e Inglaterra, en Estados Unidos solo llegó una copia que poseía la misma cubierta pero un cambio pequeño en el circuito interno. Este set venía acompañado con un control remoto, el cual se programaba y este enviaba las instrucciones al bloque, el cual producía los movimientos programados. Este bloque fue distribuido con capacidad de comunicación por radio, que fue abandonado a favor de los infrarrojos en el siguiente diseño RCX. Al ser uno de los primeros experimentos de Lego, este bloque era muy limitado para las capacidades:
* Solo permitía un programa en la memoria del control remoto si se utilizaba el software original.
* Permitía el control de varios CyberMaster mediante el hackeo de la misma radiofrecuencia.
* Los motores venían en el bloque sin poder desmontarse, aunque disponían de encoders.
* La comunicación entre el control y el computador no se puede hacer en forma simultánea.
* Poseía un solo espacio de memoria para el programa y podía ejecutar solo 5 instrucciones en forma simultánea si se utilizaba el software original.

### MicroScout y Scout

MicroScout fue un microbloque programable lanzado en el año 1999 que se vendía con capacidades de transmisión de instrucciones mediante un enlace de luz visible (en inglés, Visible light link), tenía un sensor de luz incorporado y una bocina integrada. Poseía varias funciones incluidas por defecto:
* Mover el motor hacia adelante
* Mover el motor en reversa
* Seguir o buscar una fuente de luz
* Control del motor por luz
* Alarma para alertar un cambio de estado
* Verificación de código de acceso

## Generaciones
### Primera generación: Bloque RCX

El bloque RCX es la parte central del Lego Mindstorms, ya que aquí se encuentra toda la parte lógica y electrónica que permite la mayoría de las acciones del robot, almacenándose hasta 5 programas que se pueden cargar en su memoria interna, y guardándose allí el firmware básico para el control de los distintos dispositivos que se pueden conectar al bloque.
El bloque RCX tiene tres versiones oficiales: 1.0, 1.5 y 2.0, las cuales presentan mejoras en el software sin verse afectado mayormente el hardware que se vende con el bloque, sin embargo, la parte electrónica de los bloques no es compatible, ya que las tres versiones poseen distintas regulaciones de voltaje, pero aun así no afecta el hardware que posee el bloque.

#### Microcontrolador

Su microcontrolador interno es Hitachi H8/3292, que funciona a 5 volts y una velocidad aproximada de 16 MHz, siendo esa su velocidad máxima para la serie de Hitachi H8/3000. Posee una memoria ROM de 16 Kb, una memoria RAM externa de 32 Kb y posee un decodificador Analógico Digital que permite transformar las distintas entradas de energía en bits. Su empaque original es de un circuito impreso, que carece de zócalos de conexión, y se encuentra soldada a la base del circuito impreso del bloque. Este microcontrolador puede procesar varias instrucciones por segundos, pero su mayor desventaja comparado con el Lego Mindstorms NXT es la baja capacidad de mantener hilos de procesos, es decir, no puede ejecutar dos instrucciones al mismo tiempo, y a pesar de que el programador o usuario compruebe que si puede, no es así, sino que la velocidad de proceso impide distinguir el retardo producido.

#### Entradas y salidas

Como medio de entradas posee tres conectores que permite capturar la información que proviene del los distintos sensores. Las entradas se conforma por un bloque de 2x2, que sus cabezas se encuentran rodeadas de un material conductor que permite la lectura del sensor. Las entradas se ubican en la parte superior de la pantalla de LCD, son de color gris y se distinguen por los números 1, 2 y 3.
Las salidas del bloque RCX son para energizar los motores que se pueden conectar al robot y así darle movimiento. El voltaje que provee es de 9 volts, haciendo que cada motor que se conecte al bloque pueda moverse acorde a las instrucciones del programa. Las salidas de energía se encuentran en la parte inferior de la pantalla de LCD, son de color negro y se distinguen por las letras A, B y C.

#### Pantalla LCD

La pantalla de LCD que trae el Lego Mindstorms permite visualizar tres zonas de datos:
* Superior, detección en las entradas de los sensores y el nivel de carga de las baterías.
* Central, zona alfanumérica que permite ver el contador, temporizador o valores registrados por un sensor.
* Inferior, indica el sentido de movimiento de los motores.
* Lateral izquierdo, muestra si hay conexión inalámbrica mediante el puerto infrarrojo
En su modo de operación, la pantalla de LCD posee un contador de ejecución de despliegue las veces y el tiempo que se ha ejecutado el programa, indica el número del programa que se está ejecutando y muestra la imagen de una persona que se encuentra de dos posibles formas, en estado de detención, la representación de la persona está detenida, y cuando se ejecuta un programa, ésta se encuentra en movimiento.
Además, si se selecciona un sensor, permite ver el valor registrado por el sensor, en una medida de RAW que se despliega sin importar el tipo de sensor que se encuentre conectado a la entrada.
Si el bloque no posee el firmware básico, no se muestra el contador de programa ni se ejecutan los programas 2, 3, 4 y 5, solo permitiendo que el primer programa muestre que funciona la salida de corriente y entrada de datos. Además, la persona se mantiene fija aunque se encuentre en ejecución el programa 1 del bloque.
Esta salida de LCD ayuda al programador en caso de que quiera hacer reemplazo del framework, ya que permite la salida de datos en pantalla, para generar una salida de estado de cualquier elemento interno del bloque.

#### Puerto infrarrojo y comunicación

En la parte delantera del bloque RCX, el Lego Mindstorms trae un puerto infrarrojo que le permite la comunicación con el computador para transferir el firmware y los programas. Funciona a una frecuencia de 37 kHz, que se asemeja a un control remoto de un televisor, transmitiendo datos a una velocidad aproximada de 2400 bps, lo que implica que cada bit se transmite a 417 us.
Una de las cualidades del puerto infrarrojo es la capacidad de conectarse a otro dispositivo que posea el puerto, como Palms, computadores portátiles y algunos modelos de teléfonos móviles, lo que permite realizar pequeñas plataformas de comunicaciones para lugares recónditos o muy pequeños.
La distancia de separación entre el RCX y el receptor es como máximo a 30 cm, funcionando a su máxima capacidad desde la base de la torre y sin objetos que interfieran la visual entre ambos instrumentos. Sin embargo, la distancia es menor debido a la contaminación lumínica que puede existir en el cuarto.

#### Alimentación eléctrica

La alimentación eléctrica del bloque es mediante 6 baterías AA de 1,5 volts, las cuales se conectan en la parte posterior del bloque. Las baterías se conectan en paralelo y proporcionan energía tanto al bloque como a los motores que se conectan al mismo bloque.
Una advertencia que se realiza en el manual de Lego Mindstorms es el reemplazo de las baterías, que ella alimenta a la pila que se encuentra dentro del bloque, permitiendo almacenar los distintos programas y el firmware básico. Si el reemplazo demora más de 1 minuto, la información almacenada se pierde. Otra advertencia que se realiza a los usuarios es que se evite utilizar baterías recargables debido a que entregan menor o mayor potencia el bloque, produciendo que el sistema eléctrico sea susceptible a fallos.
Se puede programar la desconexión de la alimentación eléctrica mediante el software incluido en el juego de Lego Mindstorms, donde se puede especificar el tiempo de apagado, desde 1 minuto hasta 99 minutos, e inclusive deshabilitar el apagado automático. Además, el mismo programa indica el nivel de carga que poseen las baterías del robot, mostrado por una barra de color verde cuando está cargado y ésta varía hasta rojo cuando se descarga completamente.
Cuando se descarga la batería del robot, este emite un sonido constante hasta que se presiona la tecla de apagado, indicando que las baterías se han agotado.

### Segunda generación: Bloque NXT

El bloque NXT es una versión mejorada a partir de Lego Mindstorms RCX, que generalmente se considera la predecesora y precursora de los bloques programables de Lego.
Debido a la comercialización de los bloque programables, Lego vendió la generación NXT en dos versiones: Retail Version y Education Base Set. Una ventaja de la versión Educacional es que se incluía las baterías recargables y el cargador, pero esta misma versión debía comprar el software según el tipo de licencia: Personal, Sala de clases, Sitio.
Además, Lego dispuso de varios kits para desarrolladores según las características de los programas que estuvieran desarrollando,
* Software Developer Kit (SDK), que incluía los controladores del puerto de USB, archivos ejecutables y referencia a los bytecodes.
* Hardware Developer Kit (HDK), incluía la documentación y esquemas para los sensores de NXT.
* Bluetooth Developer Kit (BDK), documentos de los protocolos usados para la comunicación Bluetooth.
Existen varias versiones Lego Mindstorm NXT : 1.0, 1.1, 2.0 y 2.1

#### Microcontrolador

El microcontrolador que posee es un ARM7 de 32 bits, que incluye 256 Kb de memoria Flash y 64 Kb de RAM externa, la cual a diferencia del bloque RCX, 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. Su presentación es similar al Hitachi H8 ya que se encuentra en el circuito impreso del bloque, junto a la memoria FLASH.

#### Entradas y salidas

En el bloque de NXT existen cuatro entradas para los sensores, pero los conectores son distintos de los del RCX, lo que impide la conexión de sus motores o sensores, sin embargo, el kit de NXT incluye el adaptador para que los sensores de RCX sean compatibles con NXT.
Las salidas de energía aún son tres localizadas en la parte posterior del bloque, haciendo que la conexión para los motores y partes móviles sean de más fácil acceso.

#### Comunicaciones

El bloque de NXT puede comunicarse con el computador mediante la interfaz de USB que posee, la cual ya viene en la versión 2.0. Además, para comunicarse con otros robots en las cercanías posee una interfaz Bluetooth que es compatible con al Clase II v 2.0. Esta conectividad con Bluetooth no tan solo permite conectarse con otros bloques, sino también con computadores, palms, teléfonos móviles, y otros aparatos con esta interfaz de comunicación.
Dentro de las posibilidades de conexión se encuentran
* Conectar hasta tres dispositivos distintos,
* Buscar y conectarse a otros dispositivos que posean Bluetooth,
* Recordar dispositivos con los cuales se ha conectado anteriormente para conectarse más rápidamente,
* Establecer el bloque NXT como visible o invisible para el resto de los dispositivos.

#### Firmware

El firmware del Lego Mindstorms consta de las instrucciones básicas que posee el bloque para hacer las distintas tareas que se le pueden programar en el bloque RCX. El firmware viene en el CD-ROM que se adjunta en el empaque original y debe ser cargado todas las veces que el robot se inicialice o se cambien las baterías y la memoria se borra.
Si no se carga el firmware, el robot queda en modo de arranque, lo cual hace que se pueda jugar con un programa que viene en forma nativa dentro del robot. Para cargar el firmware debe ejecutarse el programa adjunto y luego esperar cerca de 3 minutos para que se cargue completamente el firmware básico.
Las versiones más actuales de Lego Mindstorms RCX, como la versión 2.0, es compatible con las versiones anteriores del bloque, haciendo que los programas escritos en versiones más nuevas también puedan ser ejecutadas en las generaciones previas.

#### Torre de comunicación

Para transferir los programas incluidos o los programados por los usuarios, Lego Mindstorms cuenta con una torre que posee un rayo infrarrojo que se conecta al computador, que junto al software, se puede enviar el firmware y los programas. Esta torre se encuentra disponible en dos versiones:

##### Torre serial

La torre serial se conecta a un puerto COM del computador, transmitiendo las instrucciones hasta una distancia máxima de 15 cm., en condiciones normales, desde la base de la torre hasta el bloque. Debido a su tipo de conexión, requiere una batería AA alcalina de 1,5 volts, la cual se conecta en la parte posterior de la misma.
El software que controla la conexión de la torre serial se encuentra dentro del mismo software incluido en el juego de Lego Mindstorms y requiere un conector de 9 pines para ser aceptado.

##### Torre USB

La torre USB fue incluida en las versiones de Lego Mindstorms que poseían el RCX 2.0, la cual se conecta al puerto USB del computador. A diferencia de la torre serial, la torre USB posee alimentación desde el computador, por lo cual no requiere de baterías para su funcionamiento. La distancia máxima a toda la potencia es de 30 cm en condiciones de luminosidad normal.
El software de control no se incluye dentro del paquete de Lego Mindstorms, pero se puede configurar en el Panel de Control de Windows 98 para realizar las pruebas de alcance y ajustar la potencia.

#### Motores

| Motor | Velocidad normal (RPM) | Torque (kg/cm) | Velocidad estándar (RPM) |
| Estándar | 3240 | 1,760 | 40 |
| 9 voltios | 370 | 3.840 | 15 |
| Micro | 36 | 0,128 | 36 |
| Tabla correspondiente a las mediciones para los distintos motores desmontables de Lego Robotics ||||
Los motores de la serie Lego Robotics han sido de tres tipos, los cuales son independientes al bloque, lo que entrega movilidad al sistema dinámico según las necesidades de construcción.
En la tabla de medición, el motor estándar es más veloz que el de 9 volts, pero este último posee más fuerza para mover el robot, ya que pueden levantar cerca de 240 piezas de 8x8, pero es más lento y a la vez más preciso. El motor Micro es solo para funciones menores debido a su escaso torque y la mínima velocidad de rotación.
Los motores desmontables son alimentados mediante cables que poseen conductores eléctricos que transmiten la energía a los inductores. Como son motores paso a paso, el sentido de conexión no entrega la misma dirección de movimiento.
Los motores integrados al bloque son menos versátiles, pero no dependen de conexiones externas, lo cual ayuda visualmente al robot en su presentación.
El modelo NXT usa servo motores, los cuales permiten la detección de giros de la rueda, indicando los giros completos o medios giros, que es controlado por el software.

### Tercera generación: Bloque EV3

LEGO MINDSTORMS EV3 comenzó a comercializarse en 2013. La versión normal permite realizar cinco modelos de base. En el sitio web de acompañamiento hay robots adicionales. Hay además otros sitios webs donde se muestran las instrucciones para construir otros modelos y se venden también libros donde se muestran otros modelos adicionales así como guías para desarrollar sus propios modelos.
El bloque EV3 actúa como centro de control y fuente de potencia del robot. Tiene:
* 4 puertos de entrada rj12 modificada (para conectar los sensores al bloque EV3)
* 4 puertos de salida rj12 modificada (para conectar los motores al bloque EV3)
* Un puerto mini-USB (de entrada) para PC (para conectar el bloque EV3 a un ordenador -o computadora-)
* Un puerto de host USB (-de salida- para agregar un conector Wi-Fi y establecer conexiones en cadena)
* Un puerto para tarjetas Micro SD (para ampliar la memoria disponible en el bloque EV3)
* Un altavoz integrado
* Receptor de señales infrarrojas para recibir comandos
* Receptor Bluetooth y Wi-Fi.
Las conexiones rj12 modificada son cabezales de rj12 normales a excepción de que la pestaña no la tienen en el centro sino desviada hacia un lateral. Esta modificación está hecha para que los cables no sean compatibles con las entradas de teléfono, que funcionan a voltajes más altos que los de seguridad.
El conjunto se completa con
* 2 servomotores (paso a paso) grandes y un servomotor (paso a paso) pequeño
* Sensores de color, de contacto
* Mando a distancia por señales infrarrojas
* Guía de usuario
* Las piezas de fijación, de movimiento y flexibles especiales, las fijas compatibles con Lego Technic.

### Cuarta generación: Bloque EV4

Se trata de LEGO Mindstorms Robot Inventor con nuevas características. Lanzado en 2020.

## Piezas especiales

El Lego Mindstorms, a diferencia de la mayoría de los conjuntos de piezas que vende Lego, incorpora toda una serie de piezas especiales que permiten dar movimiento y flexibilidad a la estructura (robot) que se esté construyendo, algo esencial en un robot.
Existe una detallada clasificación que distingue entre piezas móviles, flexibles y de fijación.

### Piezas móviles

Las piezas móviles que dispone Lego Mindstorms se centran principalmente en la rotación de un bloque, para lograr por ejemplo que las ruedas se muevan en un movimiento circular con respecto al bloque completo. Estas piezas móviles se pueden clasificar en dos:
* Pieza de rotación, permite rotar un bloque de Lego con respecto a otro, siendo hueco en el centro del mismo, y con la patas de conexión; lo cual permite añadir más piezas en la parte superior del bloque de rotación. Este bloque se usa fundamentalmente en los robots de movimiento o donde se realiza una cinta de transporte de materiales, y se conecta a uno de los motores para que provea el giro del bloque
* Pieza de giro, a diferencia de la pieza de rotación, la pieza de giro permite girar un bloque en el espacio, permitiendo una simulación de ojos de un robot. Esta pieza no posee una utilidad real, pero sirve de adorno para el robot.

### Piezas flexibles

Las piezas flexibles permiten recrear una articulación de un sistema articulado, donde se requiere que el robot deba realizar un movimiento no rígido en forma específica, como el brazo robot o el brazo clasificador de piezas. Las piezas flexibles por lo general son tubos de plástico capaces de conectarse con dos bloques que no se encuentren separados a una distancia mayor de 4 cm

### Piezas de fijación

Las piezas de fijación, son aquellas que sirven para fijar los ejes de rotación donde se fijan las piezas de rotación, lo cual implica que son usadas en el centro de las ruedas que posee el Lego. Por lo general, son tubos de 0.5 mm de diámetro, que se puede poner en la punta de una barra que actúa como eje central de la rueda, evitando que la pieza se salga durante la ejecución de un programa.

## Ruedas

Las ruedas son uno de los principales componentes de Lego Mindstorms, y que le da un mayor dinamismo a la construcción de robots, ya que permiten que el bloque pueda moverse en un espacio real y así pueda interactuar con el medio que lo rodea.
Existen distintas tipos de ruedas, que van desde las que tienen llantas anchas, que permiten mayor estabilidad y velocidad, hasta las ruedas más pequeñas que permiten el movimiento del robot en zonas más pequeñas. Se incluye también cintas de oruga, como las que poseen los tanques, con lo cual el usuario puede crear objetos que se desplazan por zonas de superficie irregular, o también utilizarlas como una cinta transportadora de objetos.
Una de las connotaciones más destacadas para los fanáticos de la robótica son las mediciones de las características de cada tipo de rueda, y algunos sitios webs han realizado las pruebas para distintas superficies, el peso a desplazar, la velocidad o la cantidad de ruedas adecuadas para muchas situaciones.

## Metodología de desarrollo
### Construcción

La construcción del robot se basa en la unión de bloques de plástico, característicos de Lego, junto con piezas plegables y otras piezas que permiten la rotación de ruedas o piezas. El modelo se debe realizar alrededor del bloque programable, ya que este bloque provee la energía necesaria para el movimiento del robot creado y la secuencia de órdenes para las tareas. Además, se pueden incluir los sensores que se adjuntan en el kit, para que sean útiles en el desarrollo de las decisiones del robot.
Una de las principales estrategias de construcción se basa en determinar el tipo de robot y si el software proporcionado sirve para construir el robot. Una vez determinado esto, se puede comenzar a construir siempre en bloques de función, como por ejemplo, ensamblar las ruedas a un eje o los sensores en las bases que puedan ser útiles. Tras esto, comienza la fase de unión en torno al bloque, que es la fase más crítica, debido a que el sensor infrarrojo, en el bloque RCX, no debe ser tapado para que se pueda cargar el software. Una vez ensamblado el robot, se procede a cargar el programa y la ejecución de las instrucciones programadas, y a continuación se procede de manera similar a la programación de cualquier software, es decir a probar y corregir fallos.
Los fallos más comunes en la construcción se deben a la falta de movilidad de las piezas o que los sensores no detectan los valores correctos o simplemente no se mueve. Las estrategias de solución son variadas, pero a la larga, sugieren seguir el camino de rehacer el proceso de pensar y armar y luego ejecutar. Es por esto último, que Lego es un juego de robótica que desarrolla la lógica.

### Programación

La programación del Lego Mindstorms se realiza mediante el software que se adjunta en el paquete original, el cual incorpora el firmware del robot y un programa que emula un árbol de decisiones, para los cuales, el usuario debe programar las acciones a seguir por el robot. El software se encuentra dividido por cada tipo de robot que se puede construir, y que viene recomendado en el paquete original.
Una de las principales características de este software de programación, es su entorno visual, el cual emula la construcción por bloques, dando la posibilidad a cualquier aprendiz a acostumbrarse relativamente rápidamente a la programación de bloque.
Este lenguaje permite las instrucciones secuenciales, instrucciones de ciclos e instrucciones de decisiones, estas últimas, basadas en los datos reportados por los sensores que se pueden añadir al robot.

#### Lenguajes alternativos de programación utilizables con Lego Mindstorms

El bloque del Lego Mindstorms es un producto de hardware y software integrado, pero puede ser programado con varias interfaces. Esto se puede realizar utilizando las herramientas correctas para poder acceder al firmware básico de Lego.
Algunas personas han podido ingresar por medio de interfaces rudimentarias a obtener el código básico de la memoria ROM que posee el Lego y así poder tener acceso a programación mediante assembler para poder controlar por ellos mismos el bloque.
Algunos de los frameworks más conocidos son el BrickOS, LejOS y Not Quite C.

##### BrickOS (o LegOS)

BrickOS es una librería de instrucciones y programas que permiten al programador ingresar de forma directa a la BIOS del bloque y allí instalar un micro sistema operativo con su respectivo núcleo operativo y librerías necesarias para enlazar todos los recursos que dispone el bloque. Para ser instalado debe sobreescribir el área donde se encuentra el framework original, pero con este cambio, el bloque puede ser programado en C, C++ y assembler.
BrickOS está soportado en la mayoría de las distribuciones de Linux y en Windows (por CYGWIN), usando el compilador que trae integrado linux (gcc o gcc++), generando el mapa de bytecodes para controlar las acciones del bloque.
En un inicio, este conjunto de programas se llamaba LegOS, pero la empresa Lego solicitó un cambio de nombre debido a la semejanza que existía entre ambos nombres.

##### LejOS

LejOS a diferencia de BrickOS, no instala un sistema operativo en reemplazo del firmware del bloque RCX, sino que instala una máquina virtual de Java, lo cual permite el bloque sea programable en el lenguaje Java, por lo cual no dependen de un compilador o un sistema operativo para ser reemplazado. Sin embargo, la transparencia de procesos para el programador es más baja debido a la programación orientada a objetos que restringe LejOS, haciendo que el programa de BrickOS se más utilizado por la transparencia de procesos tanto internos como externos. Esto último repercute en que el programador, utilizando BrickOS, pierde la conciencia de los movimientos que se realiza en forma interna en el bloque, por lo que hace imposible añadir mejores capacidades de programación. Aun así, este programa es muy utilizado con los estudiantes de primer año para programación de máquinas.

##### Not Quite C

Not Quite C es el único conjunto de programas que no reemplaza el framework original del bloque, pero eso representa una desventaja, porqué debe coexistir junto al framework original, por lo tanto emular sus instrucciones, haciendo que el proceso sea más lento que por la metodología de reemplazar el framework.
Not Quite C está disponible para Mac OS y Windows, y utiliza como lenguaje de programación una versión propia de C. Además, es compatible con la mayoría de la línea de Mindstorms, lo cual lo hace el más extenso de todos los lenguajes alternativos, debido a sus capacidades de migrar entre plataformas de los bloques de RCX.

##### Physical Etoys

Physical Etoys permite la programación del bloque NXT mediante un entorno de programación visual. Aunque comparte el aspecto visual con el software provisto por Lego, la filosofía de programación de Physical Etoys es muy distinta.
Ofrece dos modos de programación:
* El modo "directo", en el cual los programas se ejecutan en la computadora del usuario y las órdenes se transmiten al bloque NXT inmediatamente a través de la comunicación por Bluetooth o USB.
* El modo "compilado", en el cual los programas se bajan al bloque NXT usando Not eXactly C (la versión de Not Quite C para NXT).
Cada modo de programación tiene sus ventajas y desventajas.
El modo "directo" permite modificar los programas y ver los cambios producidos de manera inmediata en el comportamiento del robot (sin necesidad de compilar), lo cual facilita mucho la programación, sobre todo al usuario inexperto. Asimismo, al proveer una comunicación ininterrumpida entre el robot y la computadora, el modo "directo" permite ver constantemente los valores de los sensores y utilizar el robot, por ejemplo, como un adquisidor de datos.
El modo "compilado", por su parte, elimina la latencia introducida por la comunicación con la computadora, lo cual lo hace preferible para el desarrollo de tareas autónomas, donde la velocidad de respuesta del robot debe ser óptima.

##### TurtleBots

TurtleBots ofrece un entorno de programación visual orientado a bloques. Ofrece solamente modo "directo" en el cual el programa se ejecuta en la computadora del usuario y los comandos se transmiten al NXT mediante Bluetooth o USB.

#### Problemas de la adaptación de otros lenguajes y sistemas operativos

Un problema generado por el cambio del framework a otro lenguaje es el retardo que pueda existir entre las instrucciones, debido a la emulación de las instrucciones que el conjunto de programas le entrega al bloque. Este retardo fue registrado por Dick Swan y tras algunas pruebas de rendimiento y emulación en software permitió descubrir que el retardo medio para la ejecución de cualquier instrucción, con o sin motor encendido es de 1,75 mseg.
La prueba que realizó fue realizar muchas tareas en la misma cantidad de tiempo, notando la relación lineal de las instrucciones ejecutadas, por lo cual, a mayor cantidad de instrucciones, mayor el tiempo de espera para ejecutar la instrucción.

## Sensores

| Voltaje | Raw | Sensor (Ohm) | Luz (lux) | Temp (°C) | Toque |
| 0.0 | 0 | 0 | - | - | 1 |
| 1.1 | 225 | 2816 | - | 70.0 | 1 |
| 1.6 | 322 | 4587 | 100 | 57.9 | 1 |
| 2.2 | 450 | 7840 | 82 | 41.9 | 1 |
| 2.8 | 565 | 12309 | 65 | 27.5 | 0 |
| 3.8 | 785 | 32845 | 34 | 0.0 | 0 |
| 4.6 | 945 | 119620 | 11 | -20.0 | 0 |
| 5.0 | 1023 | Inf | 0 | - | 0 |
| Tabla para las correspondientes constantes, la cual sirve para analizar los valores captados por los sensores ||||||

### Sensor de luz

El sensor de luz permite tomar una muestra de luz mediante un bloque modificado que un extremo trae un conductor eléctrico y por el otro una cámara oscura que capta las luces. Esta cámara es capaz de captar luces entre los rangos de 0,6 a 760 lux. Este valor lo considera como un porcentaje, el cual es procesado por el bloque lógico, obteniendo un porcentaje aproximado de luminosidad.
El bloque RCX calcula con la fórmula $Luz=145-RAW/7$ para determinar el porcentaje obtenido por la lectura de la luz, tomando una muestra cada 2,9 ms, siendo leído en 100 μs. el valor que se lee a partir del sensor.
Debido a que este sensor capta grados de luminosidad, no es capaz de distinguir colores, solo captando la existencia del blanco (claridad), negro (oscuridad) y los tonos de grises que corresponden a los distintos porcentajes de luz existentes en el medio.

### Sensor de temperatura

El sensor de temperatura permite leer el valor aproximado de la temperatura, mediante la interacción de un termistor en uno de los extremos, generando un campo magnético que permite la detección aproximada de la temperatura del bloque que lo contiene. El bloque original de Lego posee un termistor de 12.2 kohms a 25 °C con un coeficiente de corrección aproximado de un -3,7%/°C.
La fórmula $Temp=(785-RAW)/8$ puede determinar la temperatura detectada por el sensor.

### Sensor de contacto

El sensor de contacto permite detectar si el bloque que lo posee ha colisionado o no con algún objeto que se encuentre en su trayectoria inmediata. Al tocar una superficie, una pequeña cabeza externa se contrae, permitiendo que una pieza dentro del bloque cierre un circuito eléctrico comience a circular energía, provocando una variación de energía de 0 a 5 V.
En este caso, si la presión supera una medida estándar de 450, mostrado en la pantalla de LCD, se considera que el sensor está presionado, de otro modo, se considera que está sin presión.

### Sensor de giro

El sensor de giro permite conocer la posición del robot en cualquier instante. Para conocer la posición del robot, el sensor produce una variación de energía entre cuatro estados, los cuales son detectados cada 2,9 ms. y procesados por el bloque RCX durante 100 us, en los cuales pasa entre cuatro estados de energía:
2,0 volts → 4,5 volts → 1,3 volts → 3,3 volts (en sentido horario) 3,3 volts → 1,3 volts → 4,5 volts → 2,0 volts (en sentido antihorario)
Con estos estados se permite verificar cuantas variaciones de energía han sucedido desde la lectura. Cada voltaje representa un giro aproximado de 22,6° del sensor, por lo tanto existiendo cerca de 16 ciclos de voltaje para detectar un giro completo. El problema de esta lectura es a bajas velocidades, debido a que genera unas minúsculas variaciones de energía, debido a que los valores intermedios no son considerados como movimiento válido.

### Sensor ultrasónico

El sensor Ultrasónico solo se incluye en el empaque de Lego Mindstorms NXT, y su principal función detectar las distancias y el movimiento de un objeto que se interponga en el camino del robot, mediante el principio de la detección ultrasónica. Este sensor es capaz de detectar objetos que se encuentren desde 0 a 255 cm
Mediante el principio del eco, el sensor es capaz de recibir la información de los distintos objetos que se encuentren en el campo de detección. El sensor funciona mejor cuando las señales ultrasónicas que recibe, provienen de objetos que sean grandes, planos o de superficies duras. Los objetos pequeños, curvos o suaves, como pelotas, pueden ser muy difíciles de detectar. Si en el cuarto se encuentra más de un sensor ultrasónico, los dispositivos pueden interferir entre ellos, resultando en detecciones pobres.

## Libros

* The Unofficial Guide to LEGO® MINDSTORMSTM Robots, Jonathan B. Knudsen, ISBN 1-56592-692-7
* 150 PROYECTOS CON LEGO MINDSTORMS-TECNOLOGÍA-INSTRUMENTACIÓN-ROBÓTICA, Ernesto Martínez de Carvajal Hedrich, (2014), ISBN 978-84-616-8106-8
* 80 Proyectos de Robótica con LEGO MINDSTORMS EV3 App para tabletas, Ernesto Martínez de Carvajal Hedrich, (2017), ISBN 978-84-617-9383-9
* 90 Proyectos de Robótica con LEGO EV3 y Python, Ernesto Martínez de Carvajal Hedrich, (2018), ISBN 978-84-091-7037-1
* Robótica Educativa 90 Proyectos STEAM con LEGO SPIKE, Ernesto Martínez de Carvajal Hedrich, (2018), ISBN 978-84-091-8893-2