Mapear datos es una de las aplicaciones matemáticas más utilizadas en la programación de arduino.

Matemáticamente es una interpolación lineal.

Imaginemos una entrada proporcionada por un sensor analógico. Cualquier sensor que proporcione una tensión variable en un pin analógico de entrada, va a hacer que tengamos para nuestros programas un número que va de 0 a 1023.

A veces (casi siempre) va a interesar, cuando tengamos unos números entre 0 y 1023, cambiar el rango de variación. Por ejemplo, entre 0 y 180 (para el control de ángulo de un servo).

A esta transformación se la denomina mapear.

¿ En qué consiste mapear datos?

En el caso indicado, la transformación es muy sencilla:

nuevoValor = \frac{valorSensor}{1023}\cdot180

Con esta simple fórmula, nuevoValor será un número entre 0 y 180. 

Si estamos programando código, la instrucción sería tan sencilla como:

nuevoValor = valorSensor/1023*180;

En visualino, mediante bloques, sería también muy fácil:

mapear datos

Mapeo de datos en visualino

La ecuación de la recta

¿Qué ocurre cuando tenemos que mapear de 0-1023 a -170 y 170?. La ecuación no es tan sencilla.

Me vais a permitir rizar un poco el rizo. Voy a hacer la interpolación calculando la ecuación de una recta. Encontraré la relación que transforma los datos del potenciómetro (entre 0 y 1023) en números de -170 a 170.

Es decir, si la variable independiente es el valor del potenciómetro (x, entre 0 y 1023), la variable dependiente (y) variará entre -170 y 170. Haremos una función y=f(x) donde x es un número entre 0 y 1023 e y es un número entre -170 y 170. La funcion f(x) será la recta azul de la gráfica:mapear datosInterpolación lineal

Tenemos la ecuación de una recta que pasa por el punto (0,-170) y el punto (1023, 170). La ecuación de cualquier recta es de la forma y = m x +b, donde m es la pendiente de la recta.

La pendiente de la recta vale (170- -170)/(1023-0) = 340/1023

El valor b lo obtenemos de -170 = m • 0 + b, es decir, b = -170

Con lo que la ecuación de la recta queda:

y = \frac{340}{1023}\cdot x-170

Ejemplo: si situamos el potenciómetro en un voltaje de manera que x = 825, el valor de la y será:

y = \frac{340}{1023}\cdot825 - 170 = 104,2

Una vez más, con visualino:

mapear datos

Interpolación lineal con visualino

¿Dónde podemos aplicarlo?

Con scratch para arduino es posible la utilización de una placa de arduino para interaccionar con la pantalla del ordenador y elaborar juegos o aplicaciones.

Si queremos programar un «pong», será necesario mover  los rectángulos arriba y abajo según el valor de dos potenciómetros. Necesitamos tener en cuenta el valor de la coordenada «y» (la vertical) de nuestra pantalla y relacionarla con el valor obtenido del potenciómetro. Así queda la programación del rectángulo izquierdo para hacer un pong:

mapear datos

Programación del «pong» en scratch for arduino (S4A)

Se puede observar que la ecuación introducida es la que hemos deducido previamente. Más adelante hablaremos un poco más de Scratch for arduino.

(fotografía de portada: pixabay.com)