# LEGO Mindstorms

Lego Mindstorms è una linea di prodotti LEGO che combinano mattoncini programmabili con motori elettrici, sensori, mattoncini LEGO, pezzi di LEGO Technic (come ingranaggi, assi e parti pneumatiche) per costruire robot e altri sistemi automatici e/o interattivi. È utilizzato per molte cose nella tecnica

## Storia

Nel 1966 venne prodotto il primo motore a 4.5 V, alimentato a pile, munito di ruote, fornito come add-on per i set ferroviari; nel 1977 appare un add-on dedicato per la serie LEGO Technic, stavolta di forma cilindrica; i manuali di montaggio di alcuni modelli includevano anche una sezione a parte, che indicava come montarlo al loro interno; nel 1989 esordì il primo sistema programmabile via computer, costituito da un pannello di controllo, un cavo e una scheda da montare su PC. Il Technic Control Center, del 1995, forniva due motori a 9 V e una console autonoma (senza quindi la necessità di un PC) per pilotarli, in grado di memorizzare sequenze di comandi.
Il sistema LEGO Mindstorms vero e proprio, esordì nel 1998, e venne distribuito commercialmente come "RIS" (Robotic Invention System). Venne anche venduto e utilizzato come sistema educativo, originalmente attraverso una partnership con il MIT. La versione educativa si chiama LEGO Mindstorms for Schools (LEGO Mindstorms per le scuole) e venne venduto con un software di programmazione basato sulla GUI ROBOLAB.
L'RCX Originale dei Minstorms è stato distribuito nel 1998. Nel 2006 è stato immesso sul mercato un sistema di nuova generazione chiamato NXT, centrato su di un nuovo mattoncino programmabile. Il LEGO Mindstorms NXT è Open Source.
Il 4 gennaio 2013 è stato annunciato ufficialmente il LEGO Mindstorms EV3 e dal 1º agosto 2013 è stato messo in commercio.

## Caratteristiche

Può essere usato per costruire un modello di sistema integrato con parti elettromeccaniche controllate da computer. Praticamente tutti i tipi di sistemi integrati elettromeccanici esistenti, come gli elevatori o i robot industriali, possono essere modellati con i Mindstorms.
Esiste una comunità di professionisti e di amatori coinvolti nella condivisione di progetti, tecniche di programmazione e altre idee riguardanti LEGO Mindstorms.
La prima generazione di Lego Mindstorms era costruita intorno a un mattone programmabile conosciuto come RCX. L'RCX contiene un microcontroller Renesas H8/300 come CPU interna e viene programmato scaricando un programma (che può essere scritto in vari linguaggi di programmazione) da un PC o da un Macintosh sulla sua RAM attraverso una speciale interfaccia ad infrarossi. Quando l'utente avvia il programma, la creazione Mindstorm può funzionare in completa autonomia, in base alle istruzioni del programma. Inoltre, due o più creazioni possono comunicare tra loro attraverso la porta ad infrarossi e collaborare o gareggiare tra di loro. Oltre alla porta ad infrarossi, ci sono anche tre porte di ingresso per i sensori e tre porte di uscita per i motori (utilizzabili anche per luci ed altro). C'è anche uno schermo LCD che mostra lo stato della batteria, lo stato delle porte, il programma in esecuzione e altre informazioni.
La versione 1.0 di RCX dispone anche di uno spinotto per un alimentatore esterno che permette di far lavorare il mattoncino continuamente, eliminando i limiti imposti dalle batterie. Gli RCX con alimentatore esterno sono molto popolari per l'utilizzo su robot "stazionari" come bracci robotici o per controllare modelli di "LEGO Treni". In quest'ultimo caso, l'RCX ha bisogno di essere programmato con il software Digital Command Control (DCC) richiesto per le operazioni automatizzate riguardanti i treni.
LEGO ha prodotto anche un mattoncino denominato Scout, con due porte per i sensori, due per i motori, un sensore di luce integrato e senza interfaccia con il PC. Lo Scout può essere programmato, ma solitamente l'utente seleziona uno dei programmi integrati. Per programmare lo Scout, bisogna attivare il "power mode". Lo Scout può memorizzare un solo programma.

### Linguaggi di programmazione disponibili

Forniti da LEGO (entrambi grafici):
* RCX Code, incluso nella versione commerciale, in vendita nei negozi di giocattoli;
* ROBOLAB, basato su LabVIEW (linguaggio usato nei laboratori di ricerca in ogni campo) e sviluppato dalla Tufts University.
Linguaggi di terze parti (tutti testuali tranne actor-lab):
* C and C++ sotto sistema operativo BrickOS (precedentemente LegOS)
* Java sotto sistema operativo leJOS o TinyVM
* Lego.NET
* MIT App Inventor
* NQC ("Not Quite C")
* OnScreen
* pbFORTH (estensione del Forth)
* PbrickDev
* PRO-BOT
* SqLego
* TclRCX
* Terrapin Logo
* Visual Basic
* XS (Un dialetto LISP simile a Scheme)
* actor-lab linguaggio grafico parallelo all'ufficiale
* C#
* Bricx

### Mindstorms SDK

Lego offre anche un kit per lo sviluppo di software (SDK) che permette di interagire con l'RCX attraverso qualsiasi linguaggio che supporta ActiveX. L'SDK ha il compito di ottenere i valori dei sensori, accendere e spegnere i motori, ottenere lo stato della batteria e fornire altre funzioni utili.

### Lego Mindstorms NXT

Il nuovo prodotto Mindstorms è il Mindstorms NXT, che è stato messo in commercio ad agosto 2006. Il kit comprende tre servomotori (molto più grandi di quelli contenuti nella "vecchia confezione"), un sensore tattile, un sensore luminoso, un nuovo sensore sonoro, un sensore di prossimità (a ultrasuoni) e un nuovo mattoncino intelligente NXT.
Il mattoncino intelligente NXT ha un processore a 32 bit Atmel AT91SAM7S256 (classe ARM7) a 48 MHz, con 256k flash memory e 64k RAM, un coprocessore 8 bit Atmel ATmega48 (classe AVR: è un RISC a 8 bit) a 8 MHz, con 4k flash e 512 byte RAM uno schermo LCD con una risoluzione di 60x100 pixel, una porta USB 2.0 e connettività Bluetooth. Il Mindstorms NXT possiede quattro porte di ingresso e tre di uscita, ma avendo delle connessioni digitali, sarà possibile aumentarne il numero con dei moduli esterni. I connettori non sono gli stessi dell'RCX e utilizzano porte simili ad un connettore RJ-11. Integrato nel mattoncino c'è un altoparlante da 8 kHz. Il mattoncino richiede 6 batterie di tipo AA (che potranno anche essere ricaricabili) oppure la Batteria al Litio della casa.
Il Lego Mindstorms NXT è venduto in due versioni: Retail e Education Base Set. La versione Retail è fornita col software di programmazione NXT-G. La versione educativa che è venduta con batteria al litio e caricabatterie, invece, non contiene software. Quest'ultimo è venduto separatamente, con tre licenze distinte (Personal, Classroom, Site).

### Specifiche dell'NXT

Le specifiche dell'NXT sono quindi le seguenti:
* processore a 32 bit Atmel AT91SAM7S256 (classe ARM7) a 55 MHz
* 256KB memoria flash
* 64KB RAM
* Interfaccia bluetooth v2.0+EDR (chipset CSR BlueCore 4 version 2, clockato a 26 MHz, con propri buffer RAM e firmware stack Bluelab 3.2) velocità teorica massima 0,46 Mbit/s (per trasferire il software o per controllare il robot da remoto)
* Display LCD bianco e nero da 100×64 pixel (ogni pixel è circa 0,4×0,4mm);
* Può essere programmato su PC o Mac
* speaker mono 8 bit fino a 16 kHz;
* tastiera con quattro tasti in gomma.
* Gli utenti possono creare nuovi software con LabVIEW di National Instruments
* Porta USB 2.0
* Connettività Bluetooth per trasferire il software o per controllare il robot da remoto
* Interfaccia per permettere lo sviluppo di periferiche da parte di terze parti.

### Parti

* 519 pezzi LEGO Technic
* Tre motoriduttori, con sensore di rotazione integrato
* Sensore di distanza ad ultrasuoni
* Sensore audio (microfono), per la misura dell’intensità sonora
* Sensore di luce ambientale o riflessa, capace di rilevare l’intensità di luce incidente sul sensore, utilizzabile in combinazione con una fonte di luce (inclusa nel sensore) per misurare l’intensità di luce riflessa da una superficie
* Sensore di contatto (tasto)

### Lego Mindstorms EV3

Nel 2013, è stato rilasciato dalla LEGO il nuovo set EV3, la cui sigla EV sta per Evolution, poiché era l'evoluzione del LEGO Mindstorm NXT.