Aplicación de la función map()

Controlar la posición del eje de un servomotor con un potenciómetro

En ocasiones, los valores que obtenemos de una lectura de un pin analógico, como un sensor, pueden estar fuera de una escala determinada, y tenemos que convertirlos a otro rango para poder usarlos.

El valor de salida que podemos darle al servomotor es de 0 a 180, que se traduce en la posición del eje, pero los datos que leemos del sensor pueden llegar a 1024. Por esto debemos mapear el resultado, es decir , dejarlo en unos valores de entre 0 y  180.

La función “map” del programa asigna un valor máximo y un valor mínimo a un rango dado.

El valor máximo suele estar en 1024, pero el mínimo en nuestro caso será 0. Por eso en el código se especifican las siguientes valores:

valorPotenciometro = analogRead(potenciometro);
posicion = map(valor, 0, 1023, 0, 180);

valor = map(valor que recibo, de Mínimo, de Máximo, a Mínimo, a Máximo)

Descripción

Re-asigna un número de una gama de valores a otra.

Parámetros


valor que recibo: el número a mapear   valorPotenciometro=(analogRead(potenciometro)
deMínimo: el límite inferior del rango actual del valor  (0)
deMáximo: el límite superior del rango actual del valor (1023)
aMínimo: el límite inferior del rango resultado del valor (0)
aMáximo: el límite superior del rango resultado del valor (180)

Valor retornado por la función

El valor mapeado. (posicion)

La función map () usa números enteros por lo que no va a generar decimales, cuando las operaciones matemáticas podrían indicar que debería hacerlo. Los decimales remanentes se truncan, y no son redondeados o promediados.

Nota: No restringe los valores dentro del rango, ya que los valores fuera de la gama a veces se entiende que son útiles. La función constrain () se puede usar antes o después de esta función, si se desean límites de los intervalos.

El código correspondiente al void loop(), se corresponderá con las siguientes acciones:
  1. Guardo en valor lo que marca el potenciómetro.
  2. Mapeo el valor que su rango original es de 0-1023 a 0-180 que es lo que me interesa para controlar la posición del eje del sermovotor (0-180º).
  3. Posicionar el servomotor.

// sketch para controlar la posición del eje de un servomotor

#include

// Incluimos la librería para poder controlar el servo

int valorPotenciometro=0;
int posicion=0;
// Declaramos la variable para controlar el servo
Servo servoMotor;

void setup() {
  // Iniciamos el monitor serie para mostrar el resultado
  Serial.begin(9600);

  // Iniciamos el servo para que empiece a trabajar con el pin 9
  servoMotor.attach(9);
}

void loop() {
 valorPotenciometro=analogRead(0); //Leemos el valor del potenciometro
    posicion = map(valorPotenciometro, 0, 1023, 0, 180);
    servoMotor.write(posicion);
   
}
 






Ejemplo 2 Control del brillo de un diodo led

#define pinLed 5
int valorPotenciometro=0;
int brillo=0;

void setup() {
 pinMode(pinLed, OUTPUT);

}

void loop() {
valorPotenciometro=analogRead(0); //Leemos el valor del potenciometro
    brillo = map(valorPotenciometro, 0, 1023, 0, 255);
 
  analogWrite(pinLed,brillo);
}
 






No hay comentarios: