Registro de datos con un cerebro VEX y sensores usando Python

Introducción

En este artículo, analizaremos cómo crear un proyecto de registro de datos que indique al robot VEX que recopile datos con el VEX Brain y los guarde en un archivo CSV en la tarjeta SD para su análisis.

El registro de datos es una herramienta poderosa que podemos utilizar para ayudar en la investigación científica, realizar nuestros propios experimentos y resolver problemas específicos. Hay varias tareas divertidas y emocionantes que podemos realizar con el robot VEX mediante el registro de datos. Los siguientes son algunos ejemplos:

  • Recopilación de datos con el sensor de distancia para calcular la velocidad del robot.
  • Conducir el robot por el aula y recopilar datos con el sensor óptico para observar cambios de luz en varios lugares.
  • Llevar al robot a una aventura y registrar datos de coordenadas GPS para crear un mapa.

Habilidades de codificación necesarias para desarrollar un proyecto de registro de datos

  • Utilice varios comandos para recopilar datos con VEX Brain/Sensors y agregarlos a una estructura de datos.
  • Escriba los datos en un archivo de valores separados por comas (CSV) en la tarjeta SD.

Hardware necesario para el registro de datos:

  • Un cerebro VEX (IQ, V5, EXP)
  • Una tarjeta SD
  • Un Sensor o múltiples Sensores (Opcional, según los datos requeridos)

Obtener datos del sensor

Podemos programar el Robot VEX (IQ, V5, EXP) para capturar los datos de los siguientes sensores:

  • Sensor inercial
  • Sensor de distancia
  • Sensor óptico
  • Sensor de visión
  • Sensor de rotación (V5, EXP)
  • Sensor GPS (V5)

Nota: el VEX IQ (segunda generación) Brain y el VEX EXP Brain tienen un sensor inercial incorporado. Podemos recopilar los datos del sensor inercial con estos cerebros VEX.

En este artículo, desarrollaremos un proyecto de registro de datos que recopila los datos de aceleración con el VEX IQ Brain (segunda generación) y los almacena en una tarjeta SD. 

Primero, necesitamos escribir un programa corto para obtener lecturas del temporizador y el sensor inercial integrados en el VEX IQ Brain (segunda generación).

  • Al comienzo de este programa, necesitaremos importar los módulos de Python para controlar VEX IQ Brain (segunda generación) y obtener los datos del mismo. Por lo tanto, comience agregando estas instrucciones al proyecto.

    imagen5.png

  • A continuación, agregue el código para declarar una variable numOfDataEntries para almacenar el número de entradas de datos para registrar, declare una variable polling_delay_msec para almacenar el valor del intervalo de tiempo para leer datos y cree una variable de cadena vacía data_buffer para almacenar los datos leídos del sensor.

    imagen9.png

  • Como usaremos el valor actual del temporizador para agregar la marca de tiempo a los datos, debemos restablecer el valor del temporizador a 0 segundos antes de comenzar a recopilar datos.

    imagen13.png

  • Antes de usar la instrucción que recupera los datos del VEX IQ Brain (segundo) y registra los datos en el búfer, primero debemos comprenderla.
    La siguiente instrucción agrega el valor del temporizador actual a la variable data_buffer en un formato específico.

    imagen14.png

    Analicemos la cadena de formato “%1.3f”

    • “%”: Introduce el especificador de conversión.
    • “1”: Indica el número mínimo de dígitos que estarán presentes en la cadena.
    • “.3”: Especifica el número de decimales que se incluirán en el número formateado.
    • “f”: Indica que el valor a formatear es un número de punto flotante.

    Por lo tanto, podemos usar la cadena de formato "%1.3f" para formatear un número de punto flotante con un ancho mínimo de 1 dígito y una precisión de 3 decimales.

  • Ahora, podemos leer el temporizador y el valor de aceleración del sensor inercial integrado en el VEX IQ Brain (segunda generación) y luego agregar los datos a la variable data_buffer en el formato especificado.

    imagen7.png

    Nota: “\n” es el carácter de Nueva Línea. Indica que la línea termina aquí y el comienzo de una nueva línea.

  • Luego, para registrar una cierta cantidad de entradas de datos en la variable data_buffer , podemos usar un bucle for para ejecutar repetidamente las instrucciones que recuperan los datos y agregar los datos a la variable data_buffer durante varias iteraciones. Nuestra estrategia es utilizar el valor de la variable numOfDataEntries para determinar el número de iteraciones.

    imagen12.png

  • Hasta ahora, nuestro programa registra datos lo más rápido posible. Sin embargo, queremos registrar datos en intervalos de tiempo específicos. Por lo tanto, podemos usar una función wait() en el bucle for para pausar el programa y agregar el intervalo de tiempo específico entre dos lecturas. Usamos el valor de la variable polling_delay_msec para determinar el valor del intervalo de tiempo.

    imagen8.png

¡Felicidades! Hemos terminado el programa para obtener lecturas (los datos de aceleración) del sensor inercial integrado en el VEX Brain. A continuación, exploraremos cómo escribir los datos en un archivo CSV en la tarjeta SD.

imagen1.png




Conexión de la tarjeta SD al VEX Brain

Antes de escribir los datos en un archivo en una tarjeta SD, primero inserte la tarjeta SD en la ranura para tarjetas SD del VEX Brain.

imagen2.png

Nota: Formatee la tarjeta SD en FAT32 para escribir datos. Recomendamos utilizar tarjetas SD de 32 GB o menos.

Para garantizar que la escritura de datos en un archivo en la tarjeta SD se pueda realizar en las condiciones adecuadas, necesitaremos agregar código para verificar si la tarjeta SD está insertada correctamente en el VEX IQ Brain (segunda generación).

  • Utilice la función Brain.sdcard.is_inserted() para comprobar si la tarjeta SD está insertada. Si la tarjeta SD no está insertada, muestre el mensaje correspondiente en la pantalla VEX IQ Brain y mantenga presionado el programa.

    image17.png


    Nota: la función Brain.sdcard.is_inserted() devuelve True si se inserta una tarjeta SD en el Brain.

Escribir los datos en un archivo CSV en la tarjeta SD

Hasta ahora, nuestro programa puede recopilar datos con VEX IQ Brain (segunda generación). Para completar el proyecto de registro de datos, necesitamos escribir los datos en un archivo de valores separados por comas (CSV) en la tarjeta SD para exámenes y análisis futuros.

  • Al escribir diferentes tipos de datos en un archivo CSV, queremos saber qué tipo de datos contiene cada columna. Para hacer esto, podemos agregar el texto del encabezado CSV a la variable data_buffer antes de registrar datos.
    Por lo tanto, agregue el código para declarar una variable csvHeaderText para almacenar el texto del encabezado CSV para especificar los nombres de las columnas para el archivo CSV y declare una variable sd_file_name para contener el nombre del archivo CSV para escribir en el Tarjeta SD.

    imagen10.png

Nota: Asegúrese de que los encabezados estén en el mismo orden que los datos almacenados en la variable data_buffer.

  • A continuación, agregue el texto del encabezado CSV a la cadena data_buffer antes del for loop para la recopilación de datos.

    imagen15.png

  • Antes de escribir datos en un archivo en la tarjeta SD, primero comprendamos cómo usar la función Brain.sdcard.savefile().

    imagen4.png


    Esta instrucción escribe los datos almacenados en la variable data_buffer en un archivo CSV con nombre en la tarjeta SD.
    Desglosémoslo:
    • Brain.sdcard.savefile(): la función guarda una matriz de bytes en un archivo con nombre en la tarjeta SD. La función devuelve el número de bytes escritos en el archivo.

    • sd_file_name: el primer parámetro de la función. Indica el nombre del archivo a escribir. En este proyecto, el nombre del archivo se almacena en la variable sd_file_name.

    • bytearray(datat_buffer,'utf-8'): el segundo parámetro de la función. Representa el conjunto de bytes que se escribirá en el archivo.

        • bytearray(): el método crea un bytearray mutable. En esta instrucción, lo usamos para convertir una cadena en una matriz de bytes especificando la codificación.
        • data_buffer: el primer parámetro del método. Indica la fuente que se convertirá en una matriz de bytes. En este proyecto, la fuente son los datos almacenados en la variable data_buffer. 
        • 'utf-8': el segundo parámetro del método. Indica la codificación especificada utilizada para codificar la cadena. La codificación es 'utf-8' en esta instrucción. 
  • Después del for loop para la recopilación de datos, use la función Brain.sdcard.savefile() para escribir los datos almacenados en la variable data_buffer en el archivo CSV de la tarjeta SD. Además, agregue el código para verificar el valor de retorno de la función Brain.sdcard.savefile() para verificar si los datos se han escrito en el archivo correctamente y mostrar el mensaje correspondiente en la pantalla VEX IQ Brain para obtener información real. retroalimentación de tiempo.

    image6.png


    Nota: La función Brain.sdcard.savefile() devuelve el número de bytes escritos en el archivo. En este proyecto, lo usamos para escribir los datos recopilados en un archivo CSV, por lo que la cantidad de bytes escritos en el archivo debe ser mayor que cero. En otras palabras, si la función Brain.sdcard.savefile() devuelve 0, podemos concluir que los datos no se han escrito correctamente en el archivo. En caso contrario, los datos han sido escritos en el archivo.

¡Felicidades! Hemos desarrollado un proyecto de registro de datos que recopila los datos de aceleración con VEX IQ Brain (segunda generación) y los almacena en un archivo CSV en la tarjeta SD. A continuación, exploraremos cómo abrir el archivo CSV para el análisis de datos. 

imagen16.png

Abrir el archivo CSV para análisis de datos

Una vez que los datos se han escrito en el archivo CSV de la tarjeta SD, podemos usar una aplicación de hoja de cálculo para abrir el archivo para leer y analizar los datos. 

Nota: Dos de las aplicaciones de hojas de cálculo más comunes son Google Sheets y Microsoft Excel. En este artículo, usaremos Google Sheets (basado en la web) para abrir el archivo CSV en la tarjeta SD. El proceso de uso de otras aplicaciones es similar.

  • Retire la tarjeta SD de la ranura para tarjetas SD del VEX IQ Brain. Si el ordenador tiene una ranura para tarjetas Micro SD incorporada, podremos insertar la tarjeta SD directamente en esa ranura. De lo contrario, inserte la tarjeta SD en un adaptador de tarjeta SD y luego conecte el adaptador a la computadora. 
  • Inicie sesión en nuestra cuenta de Google y abra Google Sheets. Crea una nueva hoja de cálculo.
  • En la hoja de cálculo, abra el menú “Archivo” , seleccione “Importar” -> “Cargar” -> “Explorar” y luego elija el archivo CSV en la computadora. Después de cargar el archivo CSV, haga clic en el botón “Importar datos”. Después de importar los datos, haga clic en "Abrir ahora" para ver los datos recopilados en el archivo CSV.

    imagen11.png

  • (Opcional) Una forma sencilla de analizar los datos es dibujar un gráfico y luego buscar las tendencias en los datos. En la hoja de cálculo, abra el menú "Insertar " y seleccione "Gráfico " para dibujar un gráfico utilizando los datos del archivo CSV. El siguiente gráfico es el resultado de los datos de aceleración recopilados con el VEX IQ Brain (2.ª generación).

    image3.png


    Nota: Podemos usar el Editor de gráficos para seleccionar un tipo de gráfico diferente o editar el gráfico según nuestras necesidades.

Hasta este punto, hemos finalizado el proyecto de registro de datos que recopila datos con el VEX IQ Brain (segunda generación) y los guarda en un archivo CSV en la tarjeta SD. Además, hemos aprendido a leer el archivo CSV en la tarjeta SD usando Google Sheets e incluso a crear un gráfico para su posterior análisis. ¿Qué sigue? Intentemos planificar experimentos más interesantes utilizando el robot VEX para el registro de datos, para observar cómo los factores ambientales cambiantes afectan varios tipos de datos y obtener una comprensión más profunda del mundo que nos rodea.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: