Skip to main content

Mapeo

¿Qué es eso de "mapeo"?

En la jerga robótica, dicho pronto y mal pero para que se entienda, mapear significa hacer un cambio de escala

¿Cuándo se dan esas situaciones?

SITUACION A : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 y queremos que se copie en una salida digital PWM de Arduino que va de 0-255

SITUACION B : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 e interpretarlo en sus valores de voltios. Si suponemos que la placa se alimenta a 5V la variable de salida irá desde 0 a 5V

SITUACION C : Queremos leer el valor de un LDR, que tapándolo nos da 917 e iluminándolo al máximo es 1023, lo queremos copiar en una salida digital PWM, o sea que la salida va desde 0 a 255

Nota: El mínimo de 917 (puede ser otro número, es un valor experimental) es debido a que los LDR van montados en un divisor de tensión como el de la figura, y la resistencia de abajo, siempre se queda algo de tensión

2025-01-04 00_34_57-Recursos_electronica_Black_EchidnaBlack_0_ESQ.pdf at master · EchidnaShield_Recu.png

SITUACION D : Queremos según el valor de un joystick conectado a las entradas analógicas de un Arduino (esto pasa en Echidna) se representen en la pantalla de Scratch 2*220 por 2*180, es decir
  - Eje X : el potenciómetro (vamos a llamarlo potx) va de 0 a 1023 y la salida (ejex) va de -220 a 220
  - Eje Y : el potenciómetro (vamos a llamarlo poty) va de 0 a 1023 y la salida (ejey) va de -180 a 180

SITUACION E: Ídem pero no con el potenciómetro, sino con el acelerómetro (vamos a llamarlo acel) que va 250 a 500

SITUACION F : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 y queremos que se copie en una salida de un servo, por lo tanto lo que necesita es un ángulo que va de 0-180

¿Cómo se consigue mapear?
  • Si programas con código ArduinoIDE, tienes la instrucción map
  • Si no tienes map, por ejemplo, programas con bloques gráficos tipo Scratch, lo tienes que hacer a mano
    • ¿Cómo? Con la ecuación de una recta

Para entendernos :

  • será el valor de entrada que tiene unos valores límites X1 e X2
  • Y es la variable de salida que queremos y que tiene otros valores límites Ye Y2

Luego y tiene esta ecuación :

2025-01-08 20_03_40-Equation Editor for online mathematics - create, integrate and download.png

donde m es 

2025-01-08 20_05_18-Equation Editor for online mathematics - create, integrate and download.png

Gráficamente 

2025-01-08 20_07_29-ecuación de una recta - Buscar con Google.png

¿Me lo puedes hacer para cada situación anterior?

Si claro:

SITUACION A : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 y queremos que se copie en una salida digital PWM de Arduino que va de 0-255

  • Límites de las variables :
    • X de 0-1023
    • Y de 0-255
  • Con la instrucción map : Y = map( X, 0, 1023, 0, 255);
  • Sin la instrucción map Y = 025 * X  pues 255/1023 = 0.25 también podemos escribir Y = X/4

SITUACION B : Queremos leer un valor de entrada analógica en un Arduino, por lo tanto va de 0-1023 e interpretarlo en sus valores de voltios. Si suponemos que la placa se alimenta a 5V la variable de salida irá desde 0 a 5V

  • Límites de las variables :
    • X de 0-1023
    • Y de 0-5
  • Con la instrucción map : Y = map( X, 0, 1023, 0, 5);
  • Sin la instrucción map Y = 0.0048 * X  pues 5/1023 = 0.0048 o también podemos escribir Y = X/204 que queda mejor pues 1023/5=204 aprox.

SITUACION C : Queremos leer el valor de un LDR, que tapándolo nos da 917 e iluminándolo al máximo es 1023, lo queremos copiar en una salida digital PWM, o sea que la salida va desde 0 a 255

  • Límites de las variables :
    • X de 917-1023
    • Y de 0-255
  • Con la instrucción map : Y = map( X, 917, 1023, 0, 255);
  • Sin la instrucción map Y = 2.4 * X  pues 255/(1023-917) = 2.4

SITUACION D : Queremos según el valor de un joystick conectado a las entradas analógicas de un Arduino (esto pasa en Echidna) se representen en la pantalla de Scratch 2*220 por 2*180, es decir
  - Eje X : el potenciómetro (vamos a llamarlo potx) va de 0 a 1023 y la salida (ejex) va de -220 a 220
  - Eje Y : el potenciómetro (vamos a llamarlo poty) va de 0 a 1023 y la salida (ejey) va de -180 a 180

  • EJEX
    • Límites de las variables :
      • potx de 0-1023
      • ejex de -220 a +220
    • Con la instrucción map : ejex = map( potx, 0, 1023, -220, 220);
    • Sin la instrucción map ejex =-220 + 0.43*potx pues (220-(-220))/1023=0.43
  • EJEY
    • Límites de las variables :
      • poty de 0-1023
      • ejey de -180 a +180
    • Con la instrucción map : ejey = map( poty, 0, 1023, -180, 180);
    • Sin la instrucción map ejey =-180 + 0.35*poty pues (180-(-180))/1023=0.35

SITUACION E: Ídem pero no con el potenciómetro, sino con el acelerómetro (vamos a llamarlo acel) que va 250 a 500

  • EJEX
    • Límites de las variables :
      • acelerómetro acel de 250-500
      • ejex de -220 a +220
    • Con la instrucción map : ejex = map( acel, 250, 500, -220, 220);
    • Sin la instrucción map ejex =-220 + 1.76*(acel-250) pues (220-(-220))/(500-250)=1.76
  • EJEY
    • Límites de las variables :
      • acelerómetro acel de 250-500
      • ejey de -180 a +180
    • Con la instrucción map : ejey = map( acel, 250 500, -180, 180);
    • Sin la instrucción map ejey =-180 + 1.44*(acel-250) pues (180-(-180))/(500-250)=1.44