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:
- Guardo en valor lo que marca el potenciómetro.
- 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º).
- 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);
}
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:
Publicar un comentario