Make: it Robotics Starter Kit - Comprensión de Bitwise Math: 3 pasos

Make: it Robotics Starter Kit - Comprensión de Bitwise Math: 3 pasos

Tabla de contenido:

Anonim

Esta publicación del blog es una continuación de mis retoques con el kit de robótica Make: it. Con suerte, puedo transmitir parte de la información que he aprendido para que sea más fácil para otros ponerse al día con el trabajo con el kit de robótica.

Después de construir la línea siguiente robot, el manual tenía un enlace para descargar el software para el robot. Intenté navegar hasta el enlace y no estaba disponible:

Este es un problema común cuando los fabricantes están escribiendo documentos, los enlaces parecen cambiar y las revisiones a menudo se pierden entre sí. No es un problema Radio Shack fue lo suficientemente bueno como para proporcionar un enlace a los archivos de descarga en su sitio web: http: //blog.radioshack.com/2014/05/radioshack-mak …

No publicaré el código fuente completo aquí, ya que puede descargarlo y seguirlo. El código fuente contiene la biblioteca e incluye archivos para el kit de robótica principal, los kits Project 1 y Project 2 y el kit de sensores. Hay archivos individuales de Arduino Sketch para cada robot proporcionado en los kits.

Todos los bocetos dependen del archivo MakeItRobotics.cpp y del archivo MakeItRobotics.h. Si necesita ayuda para comprender cuáles son estos archivos, busque el archivo.cpp y.h incluyen el archivo.cpp. Si necesita más ayuda, envíeme un correo electrónico en este sitio. Desde que construí la línea que sigue al robot, esta publicación del blog tratará la línea que sigue al código, que se llama linefollow.ino.

Este archivo es un archivo de texto que lee el IDE de Arduino o que cualquier entorno de desarrollo puede leer. El archivo linefollow.ino está documentado y debe proporcionar una comprensión básica de lo que está sucediendo con el programa. Pero sí encontré un error tipográfico que podría causar cierta confusión. También intentaré proporcionar información adicional para aquellas personas que son bastante nuevas en robótica, Arduino y programación en general.

Para más información visita mi blog:

joepitz.wordpress.com/

Suministros:

Paso 1: Arduino Sketch

El archivo linefollow.ino es más o menos un archivo estándar de Arduino Sketch, al principio del archivo hay una sección principal de comentarios, una sección de declaración / inclusión, una función setup () y una función loop ().

La sección de declaración / inclusión incluye archivos de encabezado, que incluyen definiciones y recursos que el boceto utilizará durante la ejecución del programa.

Los objetos y variables globales también se pueden declarar e inicializar en esta ubicación. Por ejemplo, en el boceto de linefollow.ino se crea el objeto line_following (o en el lenguaje de programación, esto se llama instanciado)

Todo en la función setup () se ejecuta una vez cuando Arduino se enciende por primera vez. La función setup () es donde coloca el código de inicio que inicializa las cosas que su programa de bucle necesita para la ejecución del programa. Por ejemplo, el Arduino necesita hablar con el controlador del motor del robot / tarjeta del sensor utilizando el puerto serie.

Así que la función setup () llama al método Serial.begin (10420) para configurar el puerto serie para que Arduino pueda tomar con la placa del controlador del motor. La función loop () es donde tiene lugar toda la acción en el programa. La función loop () realiza un bucle o se repite una y otra vez sin detenerse hasta que se elimina la alimentación del Arduino. Es por esto que la función se llama loop ().

Paso 2: Parsing ReadOptical () Método

Como dije, hay algunos errores tipográficos en los comentarios del código en linefollow.ino. Cada vez que el programa llama a la siguiente función: sensor_in = line_following.read_optical ();

Los comentarios para este método read_optical () leen lo siguiente:

Devoluciones

0 × 000 óptico1 negro

0x0ff optical1 blanco

0 × 100 óptico1 blanco

0x1ff optical1 negro

0x2XX no está listo; no uses este valor

En realidad debe ser el siguiente

Devoluciones

0 × 000 óptico1 negro

0xff optical1 blanco

0 × 100 óptico2 blanco

0x1ff optical2 negro

0x2XX no está listo; No use este valor (cualquiera de los sensores puede devolver este valor)

En realidad 0x0ff debería ser 0xff

Consulte la entrada del blog Software Parte 3

Verá en los párrafos siguientes la importancia de estos errores tipográficos. (Tiene que ver con la lectura de todos los demás sensores) En la línea que sigue al robot hay dos sensores ópticos, cada vez que la función loop () ejecuta el bosquejo linefollow.ino llama a un método para ver si uno de los sensores está viendo claro u oscuro.

En un microcontrolador, como el Arduino, un segundo es mucho tiempo. La función loop () puede ejecutarse muchos miles de veces por segundo. El tiempo que tarda cada bucle depende de la cantidad de instrucciones del programa. Algunas instrucciones tardan más en ejecutarse que otras instrucciones.

El tiempo de ejecución de la instrucción (de qué funciones y métodos se componen) se mide en ciclos de reloj de la CPU. El Arduino funciona de forma predeterminada a 16 MHz o 16 millones de ciclos de reloj por segundo. El boceto de linefollow.ino realiza una lógica bastante simple.

Después de configurar algunas variables, el bucle () llama a una función para ver si un sensor es claro u oscuro. Dependiendo de la respuesta, se ejecuta una lógica sofisticada para reducir la respuesta a un valor de 0, 1, 2 o 3. Estos valores luego se usan para decirle a los motores que avancen, giren a la izquierda o a la derecha.

Cada 15 milisegundos se le indica al programa de bucle que cambie y lea el otro sensor. Entonces, tiene un programa que hace un bucle leyendo primero un sensor, convierte la respuesta a 0, 1, 2 o 3, le dice a los motores qué hacer y luego lee el otro sensor, convierte la respuesta a 0, 1, 2 o 3 y Entonces dile a los motores qué hacer. En muchos casos, dependiendo de los valores de las variables action1 y action2, se omiten las instrucciones para controlar los motores. Consulte una publicación posterior en el blog.

Estas operaciones se realizan de nuevo a miles de veces por segundo. El resto de este blog y sus blogs posteriores le enseñarán lo que está sucediendo con la lógica sofisticada que lee el sensor y convierte la respuesta a 0, 1, 2 o 3. El siguiente segmento de código es el código de fantasía que convierte el sensor. lecturas a un valor de 0, 1, 2 o 3. Este código incluye algunas instrucciones de programa que pueden ser bastante confusas para los programadores de controlador de newmicro.

Consulte otra entrada de blog que escribí llamada "Tutorial - Bit Banging and Boolean Math without the Math". Este tutorial va de la mano con la comprensión del siguiente segmento de código:

if ((sensor_in & 0xf00) == 0)

sensorValue1 = sensor_in & 0xff;

else if ((sensor_in & 0xf00) >> 8 == 1)

sensorValue2 = sensor_in & 0xff;

if (sensorValue1 == 0x00) action1 = action1 & 0xfe;

if (sensorValue1 == 0xFF) action1 = action1 | 0x01;

if (sensorValue2 == 0x00) action1 = action1 | 0x02;

if (sensorValue2 == 0xFF) action1 = action1 & 0xfd;

Este segmento de código usa tres operadores especiales (instrucciones que operan en valores dados) El código usa los siguientes operadores binarios: & Operador Bitwise Y, | Operador Bitwise O y el operador >> Bitwise Right Shift.

(Lea el tutorial)

joepitz.wordpress.com/

Paso 3: Python al Rescate

Para hacer esto más fácil para que no tenga que convertir esto a mano, escribí un programa Python que hace todas las matemáticas por usted y le muestra lo que está ocurriendo a nivel binario, por lo que todo lo que tiene que hacer es mirar los resultados.

Instala Python en tu computadora, es gratis. Lee el tutorial, se explica todo sobre cómo comenzar con Python. He hecho todo el trabajo por ti.

En el siguiente tutorial capturaremos algunos datos del sensor del robot y los analizaremos con nuestro programa readOptical.py Python