Trabajamos con Lego Mindstorms EV3 de .NET. Conexión de dos o más Bloques EV3 Conexión mediante Wi-Fi

conexión USB

LEGO Mindstorms EV3 se puede conectar a una PC u otro EV3 mediante una conexión USB. La velocidad y estabilidad de la conexión en este caso son mejores que con cualquier otro método, incluido Bluetooth.

LEGO Mindstorms EV3 tiene dos puertos USB.

Comunicación entre LEGO EV3 y otros bloques LEGO EV3 en modo de conexión en cadena.

El modo de conexión en cadena se utiliza para conectar dos o más bloques LEGO EV3.

Este modo:

  • diseñado para conectar más de un LEGO Mindstorms EV3;
  • sirve para conectar más sensores, motores y otros dispositivos;
  • permite la comunicación entre varios LEGO Mindstorms EV3 (hasta 4), lo que nos proporciona hasta 16 puertos externos y la misma cantidad de puertos internos;
  • permite controlar toda la cadena desde el LEGO Mindstorms EV3 principal;
  • no puede funcionar cuando Wi-Fi o Bluetooth están activos.

Para habilitar el modo de conexión en cadena, vaya a la ventana de configuración del proyecto y marque la casilla.

Cuando se selecciona este modo, para cualquier motor podemos seleccionar el bloque EV3 que se utilizará y los sensores necesarios.

La tabla muestra opciones para usar bloques EV3:

Acción

motor mediano

motor grande

Direccion

Gestión independiente

Giroscópico

Infrarrojo

Ultrasónico

Rotación del motor

Temperaturas

Medidor de energía

Sonido

Conexión a través de Bluetooth

Bluetooth permite que LEGO Mindstorms EV3 se conecte a una PC, otros LEGO Mindstorms EV3, teléfonos inteligentes y otros dispositivos Bluetooth. El alcance de comunicación a través de Bluetooth es de hasta 25 m.

Puedes conectar hasta 7 bloques a un LEGO Mindstorms EV3. El Bloque Maestro EV3 le permite enviar y recibir mensajes a cada Esclavo EV3. Los Esclavos EV3 solo pueden enviar mensajes al Bloque Maestro EV3, no entre sí.

Secuencia de conexión EV3 vía Bluetooth

Para conectar dos o más bloques EV3 entre sí a través de Bluetooth, debe realizar los siguientes pasos:

1. Abrir una pestaña Ajustes.

2. Seleccione Bluetooth y presione el botón central.

3. Ponemos Caja visibilidad Bluetooth.

4. Compruebe que la señal de Bluetooth ("<") виден на верхней левой стороне.

5. Realice el procedimiento anterior para la cantidad requerida de Bloques EV3.

6. Vaya a la pestaña Conexión:

7. Haga clic en el botón Buscar:

8. Seleccione el EV3 al que desea conectarse (o al que desea conectarse) y presione el botón central.

9. Conectamos el primer y segundo bloque con la clave de acceso.

Si haces todo correctamente te aparecerá el icono " en la esquina superior izquierda<>", conecte otros bloques EV3 de la misma manera si hay más de dos.

Si apagas LEGO EV3, la conexión se perderá y tendrás que repetir todos los pasos.

Importante: cada bloque debe tener escrito su propio programa.

Programa de ejemplo:

Primer Bloque: Cuando se presiona el sensor táctil, el primer Bloque EV3 transmite el texto al segundo Bloque con un retraso de 3 segundos (Bloque Principal).

Programa de ejemplo para el bloque 2:

El segundo bloque espera recibir el texto del primer bloque y, una vez que lo recibe, mostrará una palabra (en nuestro ejemplo, la palabra "Hola") durante 10 segundos (el bloque esclavo).

Conéctate a través de Wi-Fi

Es posible una comunicación de mayor alcance conectando el dongle Wi-Fi al puerto USB del EV3.

Para usar Wi-Fi, debe instalar un módulo especial en el bloque EV3 usando un conector USB (adaptador Wi-Fi (adaptador inalámbrico Netgear N150 (WNA1100), o puede conectar un dongle Wi-Fi).

Seleccionar modo de pantalla

Selección de modo
Bloquear campo de texto
Entradas
Botón de vista previa

Seleccione el tipo de texto o gráficos que desea ver usando el selector de modo. Después de seleccionar el modo, puede seleccionar los valores de entrada. Las entradas disponibles variarán según el modo. Los modos y entradas se describen a continuación.

Puede hacer clic en el botón Vista previa para obtener una vista previa de lo que mostrará el bloque Pantalla en la pantalla EV3. Puede dejar la vista abierta mientras selecciona valores de entrada para el bloque.

Coordenadas de pantalla

Muchos de los modos de bloque de pantalla utilizan coordenadas X e Y para determinar la ubicación del elemento. Las coordenadas determinan la posición de los píxeles en la pantalla del Bloque EV3. La posición (0, 0) está en la esquina superior izquierda de la pantalla como se muestra en la imagen a continuación.

Dimensiones de pantalla: 178 píxeles de ancho y 128 píxeles de alto. El rango de valores de las coordenadas X va desde 0 en la pantalla a la izquierda hasta 177 a la derecha. El rango de valores de la coordenada Y va desde 0 en la parte superior hasta 127 en la parte inferior.

Consejos y trucos

Puede utilizar el botón Vista previa en la esquina superior izquierda del bloque Pantalla para ayudarle a encontrar las coordenadas correctas de la pantalla.

Texto - Píxeles

Texto: el modo Píxeles le permite mostrar texto en cualquier lugar de la pantalla del Bloque EV3.

Restablecer ventana

El modo Restablecer ventana devuelve la pantalla del Bloque EV3 a la pantalla de información estándar que se muestra mientras se ejecuta el programa. Esta pantalla muestra el nombre del programa y otra información de comentarios. Cuando ejecuta un programa en el Bloque EV3, esta pantalla aparece antes de que se ejecute el primer bloque de Pantalla del programa.

Garantizar la visibilidad de los elementos mostrados.

Cuando se completa el programa EV3, la pantalla del Bloque EV3 se borra y regresa a la pantalla del Menú del Bloque EV3. Se borrará cualquier texto o gráfico mostrado por el programa. Si, por ejemplo, su programa tiene un bloque "Pantalla" y nada más, la pantalla se borrará tan rápidamente inmediatamente después de finalizar el programa que no verá los resultados del bloque "Pantalla".

Si desea que la pantalla permanezca visible después de que se haya completado el programa, debe agregar un bloque al final del programa para evitar que finalice inmediatamente, como se muestra en los siguientes ejemplos.

Mostrando varios elementos

Si desea mostrar varios elementos gráficos o de texto en la pantalla al mismo tiempo, es importante no borrar la pantalla del Bloque EV3 entre elementos. Cada modo del bloque Pantalla tiene una entrada Borrar pantalla. Si Borrar pantalla es verdadero, se borrará toda la pantalla antes de que se muestre el elemento. Esto significa que para mostrar varios elementos, debe configurar Borrar pantalla en Falso para cada bloque de pantalla excepto el primero.

Mostrando números

Para mostrar un valor numérico en su programa, conecte un bus de datos a la entrada de texto del bloque de visualización de texto. El bus de datos numéricos se convertirá automáticamente a texto mediante la conversión del tipo de bus de datos (consulte la sección

La idea de sustituir el microordenador del diseñador por un Beaglebone u otro no es nueva. Pero con el lanzamiento de EV3, fue posible no solo obtener un análogo 100%, sino también aumentar el rendimiento de su Legorobot.

Vídeo de presentación del proyecto:

E VB es totalmente compatible con el sistema Lego Mindstorms Ev3 tanto a nivel de hardware como de software, 100% compatible con todos los sensores y motores de Lego. El bloque funciona igual que el bloque Lego Mindstorms EV3:

BeagleHueso Negro— computadora Linux de placa única. Es un competidor de Raspberry Pi. Tiene un potente procesador AM335x 720MHz ARM®, de gran tamaño número de entradas/salidas, las capacidades se pueden ampliar con placas adicionales.

Lego Mindstorms EV3 tiene un procesador ARM9 (TI Sitara AM180x) de 300 MHz, por lo que pasa a un procesador ARM Cortex-A8 (TI Sitara AM335x) de 1 GHz BeagleBone Black aumenta la productividad¡Además es posible conectar tarjetas de expansión adicionales!

¡Lo más importante es que Lego Mindstorms EV3 tiene una descripción abierta de todo el software y hardware!

Por ejemplo, se ha montado y demostrado el famoso robot que resuelve el cubo de Rubik. Solo que en lugar de EV3 instalaron el EVB desarrollado. Te invitamos a ver el vídeo:

Los autores del proyecto ya producen y venden EVB. Planean ampliar significativamente la producción a finales de abril de 2015. Además, han desarrollado y están produciendo varios sensores compatibles.

Tradicionalmente, los robots construidos sobre una plataforma Lego Mindstorms EV3, se programan utilizando el entorno gráfico LabVIEW. En este caso, los programas se ejecutan en el controlador EV3 y el robot funciona de forma autónoma. Aquí hablaré sobre una forma alternativa de controlar el robot: utilizando la plataforma .NET ejecutándose en una computadora.

Pero antes de entrar en programación, veamos algunos casos en los que esto podría resultar útil:

  • Requiere control remoto del robot desde una computadora portátil (por ejemplo, presionando botones)
  • Es necesario recopilar datos del controlador EV3 y procesarlos en un sistema externo (por ejemplo, para sistemas IoT)
  • Cualquier otra situación en la que desee escribir un algoritmo de control en .NET y ejecutarlo desde una computadora conectada al controlador EV3

API LEGO MINDSTORMS EV3 para .NET

El controlador EV3 se controla desde un sistema externo enviando comandos al puerto serie. El formato del comando en sí se describe en el Communication Developer Kit.

Pero implementar este protocolo manualmente es aburrido. Por lo tanto, puede utilizar el contenedor .NET ya preparado, que Brian Peek escribió cuidadosamente. El código fuente de esta biblioteca está alojado en Github y el paquete listo para usar se puede encontrar en Nuget.

Conexión a un controlador EV3

La clase Brick se utiliza para comunicarse con el controlador EV3. Al crear este objeto, debe pasar una implementación de la interfaz ICommunication al constructor, un objeto que describe cómo conectarse al controlador EV3. Se encuentran disponibles implementaciones de comunicación USB, comunicación Bluetooth y comunicación de red (conexión WiFi).

El método de conexión más popular es mediante Bluetooth. Echemos un vistazo más de cerca a este método de conexión.

Antes de que podamos conectarnos mediante programación al controlador a través de Bluetooth, el controlador debe estar conectado a la computadora usando la configuración del sistema operativo.

Una vez conectado el controlador, vaya a la configuración de Bluetooth y seleccione la pestaña Puertos COM. Encontramos nuestro controlador, necesitamos extrovertido puerto. Lo especificaremos al crear el objeto BluetoothCommunication.

El código para conectarse al controlador se verá así:

Conexión de tarea asíncrona pública (comunicación ICommunication) ( var comunicación = nueva comunicación Bluetooth ("COM9"); var ladrillo = _brick = nuevo ladrillo (comunicación); await _brick.ConnectAsync(); )

Opcionalmente, puede especificar un tiempo de espera de conexión al controlador:

Espera _brick.ConnectAsync(TimeSpan.FromSeconds(5));

La conexión al equipo vía USB o WiFi se realiza de la misma forma, con la excepción de que se utilizan los objetos UsbCommunication y NetworkCommunication.

Todas las demás acciones realizadas en el controlador se realizan a través del objeto Brick.

Hagamos girar los motores

Para ejecutar comandos en el controlador EV3, accedemos a la propiedad DirectCommand del objeto Brick. Primero, intentemos arrancar los motores.

Supongamos que nuestro motor está conectado al puerto A del controlador, luego hacer funcionar este motor al 50% de potencia se verá así:

Espere _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50);

Existen otros métodos para controlar el motor. Por ejemplo, puede girar un motor hasta un ángulo específico utilizando los métodos StepMotorAtPowerAsync() y StepMotorAtSpeedAsync(). Hay varios métodos disponibles, que son variaciones en los modos de encender los motores: por tiempo, velocidad, potencia, etc.

La parada forzada se realiza mediante el método StopMotorAsync():

Espera _brick.DirectCommand.StopMotorAsync(OutputPort.A, verdadero);

El segundo parámetro indica el uso del freno. Si lo configura en falso, el motor se detendrá por inercia.

Lectura de valores de sensores.

El controlador EV3 tiene cuatro puertos para conectar sensores. Además de esto, los motores también tienen codificadores incorporados, lo que permite su uso como sensores. Como resultado, tenemos 8 puertos desde los que se pueden leer los valores.

Se puede acceder a los puertos para leer valores a través de la propiedad Puertos del objeto Brick. Puertos es una colección de puertos disponibles en el controlador. Por lo tanto, para trabajar con un puerto específico, debe seleccionarlo. InputPort.One...InputPort.Four son los puertos de los sensores y InputPort.A...InputPort.D son los codificadores del motor.

Var puerto1 = _brick.Ports;

Los sensores del EV3 pueden funcionar en diferentes modos. Por ejemplo, el sensor de color EV3 se puede utilizar para medir la luz ambiental, medir la luz reflejada o detectar el color. Por lo tanto, para “decirle” al sensor exactamente cómo queremos usarlo, necesitamos configurar su modo:

Brick.Ports.SetMode(ColorMode.Reflective);

Ahora que el sensor está conectado y su modo de funcionamiento está configurado, puede leer sus datos. Puede obtener datos "sin procesar", valor procesado y valor porcentual.

Flotador si = _brick.Ports.SIValue; int raw = _brick.Ports.RawValue; porcentaje de bytes = _brick.Ports.PercentValue;

La propiedad SIValue devuelve los datos procesados. Todo depende de qué sensor se utilice y en qué modo. Por ejemplo, al medir la luz reflejada, obtendremos valores de 0 a 100 dependiendo de la intensidad de la luz reflejada (negro/blanco).

La propiedad RawValue devuelve el valor bruto obtenido del ADC. En ocasiones es más conveniente utilizarlo para su posterior procesamiento y uso. Por cierto, en el entorno de desarrollo EV3 también es posible obtener valores "sin procesar"; para ello es necesario utilizar el bloque del panel azul.

Si el sensor que está utilizando espera recibir valores en porcentajes, también puede utilizar la propiedad PercentValue.

Ejecutar comandos en lotes

Digamos que tenemos un carro robot con dos ruedas y queremos desplegarlo en su lugar. En este caso, las dos ruedas deben girar en sentido contrario. Si utilizamos DirectCommand y enviamos dos comandos de forma secuencial al controlador, puede pasar algún tiempo entre su ejecución:

Espere _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); espere _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

En este ejemplo, enviamos un comando para girar el motor A a una velocidad de 50, luego de enviar este comando exitosamente, repetimos lo mismo con el motor conectado al puerto B. El problema es que el envío de comandos no ocurre instantáneamente, por lo que los motores puede comenzar a girar en diferentes momentos: mientras se transmite el comando para el puerto B, el motor A ya comenzará a girar.

Si es fundamental para nosotros hacer girar los motores al mismo tiempo, podemos enviar comandos al controlador en un "paquete". En este caso, deberías utilizar la propiedad BatchCommand en lugar de DirectCommand:

Brick.BatchCommand.TurnMotorAtPower(OutputPort.A, 50); _brick.BatchCommand.TurnMotorAtPower(OutputPort.B, -50); espere _brick.BatchCommand.SendCommandAsync();

Ahora se preparan dos comandos a la vez, después de lo cual se envían al controlador en un paquete. El controlador, habiendo recibido estos comandos, comenzará a girar los motores simultáneamente.

Qué más puedes hacer

Además de girar motores y leer los valores de los sensores, puede realizar otras acciones en el controlador EV3. No entraré en detalles sobre cada uno de ellos, solo enumeraré una lista de lo que se puede hacer:

  • CleanUIAsync(), DrawTextAsync(), DrawLineAsync(), etc. - manipulación de la pantalla integrada del controlador EV3
  • PlayToneAsync() y PlaySoundAsync(): utilice el altavoz integrado para reproducir sonidos
  • WriteFileAsync(), CopyFileAsync(), DeleteFileAsync() (de SystemCommand): trabajar con archivos

Conclusión

El uso de .NET para controlar los robots Mindstorms EV3 demuestra bien cómo tecnologías de “mundos diferentes” pueden trabajar juntas. Como resultado de investigar la API de EV3 para .NET, se creó una pequeña aplicación que permite controlar el robot EV3 desde una computadora. Desafortunadamente, existen aplicaciones similares para NXT, pero EV3 las pasó por alto. Al mismo tiempo, son útiles en competiciones de robots controlados, como el fútbol de robots.

La aplicación se puede descargar e instalar desde este enlace: