Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando
-- Tutorial de iniciación a Arduino --
Volver al índice del tutorial
___________________________
5B.- Mapear. Introducir datos por el Monitor Serie. Ajustar sensor de temperatura.
- Suponemos que tenemos un sensor de temperatura y que está desajustado.
- El sensor marca 2º y debería marcar 6º.
- El sensor marca 38º y debería marcar 42º
- Está desajustado. Fíjate que marca 4º de menos. Simplemente lo podemos correguir de esta manera.
float tempSensor;
float tempCorrecta;
tempCorrecta = tempSensor + 4;
- O bien más sencillo manteniendo una variable, no hace falta el tempCorrecta.
tempSensor = tempSensor + 4;
_______________________________________________________
- Map
- En vez de hacerlo así, vamos a utilizar la función map (mapear) de Arduino.
tempSensor = map(tempSensor, 2, 38, 6, 42);
- Es decir, cuando la temperatura que marca en Sensor sea 2, la convertirá en 6. Y cuando la temperatura que marca el Sensor sea 38, la convertirá en 42.
- Los valores entre uno y otro seguirá una linealidad.
- ¿Qué pasa si el Sensor obtiene una temperatura de 1 o bien una temperatura de 57?
- Se mantiene la linealidad, es decir no importa que el Sensor lea valores que estén fuera del margen que hemos puesto en el map (2, 38), puede leer cualquier valor y nos dará su valor correspondiente (En este ejemplo siempre dará un valor 4 superior).
______________________________________________
- Ecuación de la recta.
- ¿Recuerdas cuando estabas en clase de matemáticas y el profesor explicaba la ecuación de la recta, despejar valores,... y tu no entendías ni papa y decías que eso no valía para nada?
- Aquí vamos a utilizar la ecuación de la recta, vamos a recordarla.
- Continuamos con el ejemplo anterior del Sensor de temperatura. Debemos ajustarlo.
Esto es lo que marca el Sensor |
Esto es lo que debería dar |
2 |
6 |
38 |
42 |
- La conversión es muy fácil, solamente le debemos añadir 4, pero vamos a verlo con la ecuación de la recta.
|
- Ecuación de la recta.
- Despejamos la y |
- Con valores.
- Es decir.
y = x + 4
- Esto es lo que hace realmente la función map de Arduino. Le suministramos 4 valores y el valor que queremos convertir. Obtendremos el valor convertido.
temperatura = map(temperatura, 2, 38, 6, 42)
- Como escribí anteriormente, tanto en la ecuación de la recta como a la función map, a la temperatura podemos suministrarle valores mayores que los indicados como mínimo y máximo, es decir superiores o inferiores a 2 y 38.
- (Ver más información de la ecuación de la recta).
_____________________________________________________
- Prueba con Arduino.
- Cambia el valor de tempC y consulta el Serial Monitor.
Ajuste.ino |
float tempC;
void setup() {
Serial.begin(9600);
}
// tempC = tempC - 4;
void loop() {
tempC = 14;
tempC = map(tempC, 2, 38, 6, 42);
Serial.println(tempC);
} |
_____________________________________________________
- Introducir datos desde el Serial Monitor.
- En el ejemplo anterior para ver distintos valores, debemos cambiar tempC = 14; poner otros valores y volver a cargar el programa en Arduino.
- Vamos a introducir los valores desde el Serial Monitor.
- Para ello vamos a seguir este interesante tutorial:
https://startingelectronics.org/software/arduino/learn-to-program-course/19-serial-input/
- De todos los ejemplos de ese tutorial vamos a ver el de introducir varios números. Getting number.
- Lo adapto a nuestro ejemplo de estudio del map.
- Abrimos el Serial Monitor e introducimos un valor. Obtendremos su conversión según map.
- El Serial Monitor debe estar en 9600 y "Ambos NL & CR".
Ajuste2.ino |
// Adaptado por Juan A. Villalpando
// kio4.com
void setup() {
Serial.begin(9600);
Serial.println("Introduce el valor de la temperatura.");
} char rx_byte = 0;
String rx_str = "";
int result;
void loop() {
if (Serial.available() > 0) { // ¿Hay algún caracter?
rx_byte = Serial.read(); // Toma el caracter
rx_str += rx_byte;
if (rx_byte == '\n') {
result = map(rx_str.toInt(), 2, 38, 6, 42);
// Escribe
Serial.print("Valor inicial = ");
Serial.print(rx_str);
Serial.print("Valor convertido = ");
Serial.print(result);
Serial.println("");
Serial.println("Introduce el valor de la temperatura.");
rx_str = "";
}
}
} |
________________________________
|