Paso 10: Paso 9: linealización de los resultados
Coloqué los resultados en una tabla y traza una gráfica de estos resultados. También se incluyen una línea de tendencia exponencial. Si recuerdas la gráfica mostró en un último paso, se puede ver es bastante similar, excel no permite el trazado de 1 / x gráficos!
Ahora, mirando las funciones matemáticas que puede hacer el Arduino nos limita un poco a cómo nos podemos alinear estos resultados. Por jugando con las funciones en excel voluntad nos ayudan a encontrar uno adecuado pero como se adapta a la línea de tendencia exponencial, encontré que sólo sería apropiado hacer la inversa de un exponente (un exponente es igual a e ^ x), el inverso es igual al logaritmo natural (conocido como ln) de x. El exponente inverso, los resultados serán mucho más lineales y el Arduino permite esta función. Si esta gráfica será capaz de aplicar una línea de tendencia lineal y tiene una muy aceptable R ^ valor 2.
Ahora que se han linealizado los resultados, es necesario invertir el gradiente. Actualmente, como se disminuye la distancia, aumenta la tensión. Esto no es una forma viable de medición como uno esperaría un valor para disminuir la tensión de aumento!
La forma más sencilla de hacerlo sería invertir los resultados del registro multiplicando por menos 1. Entonces la inversión del gradiente y el valor resultante se incrementará como aumentos de distancia!
La siguiente parte es la aplicación de una relación entre estos valores y la distancia. En primer lugar, desea que el valor a 0 distancia para ser cero. Para ello el registro de su más grande tensión encontrado experimentalmente y añadir esto a todos los valores.
Entonces obtendrá un resultado que el voltaje más pequeño da el valor más grande y la tensión más grande da un valor de 0.
Ahora tiene una función lineal que convierte el voltaje no lineal. Ahora tienes que hacer es asignar esto a la distancia equivalente, por ejemplo, el mayor valor que calcula debe ser igual a la distancia que mide (para ese valor, su confuso saber!). Para este paso final, todo lo que necesitas hacer es multiplicar por la distancia más grande medido dividido por el resultado normalizado y usted tendrá una función que te dará una lectura acertada de la distancia! Tenga en cuenta que si cambia cualquiera de los parámetros del circuito, o ajustar la temperatura, esto va a cambiar! Por lo tanto, por qué su sólo simple.
Esto hará mucho más sentido una vez que usted lea el código, honesto!
El nuevo código es:
int Readvalue; El valor inicialmente leer
int Printvalue; El valor impreso en la pantalla
Float Mathvalue; La variable utilizada para cualquier forma de las matemáticas
Float Normalize_constant = 0,47; Las variables que calcula a partir de los resultados de mi
Float Scale_constant = 3,34; Igual que arriba!
void setup() {}
Serial.Begin(9600); Empezar comunicación serial con la computadora a 9600bps
}
void loop() {}
Readvalue = analogRead (A0) + 1; Leer la entrada de Distanciómetro infrarrojo, añadir 1 para asegurarse de que la lectura nunca es igual a cero o usted conseguirá resultados extraños matemáticas!
Mathvalue = log(Readvalue) //Apply el registro del valor leído
Mathvalue = Mathvalue *-1 //Invert los valores de log
Mathvalue = Mathvalue + Normalize_constant //Normalize los resultados, mi normalizar constante era igual a LN(1.6) calculado de mis resultados. Tuyo puede variar!
Mathvalue = Mathvalue * Scale_constant //Multiply por la constante de escala para asegurar que la distancia medida es igual a los valores.
Serial.println(Mathvalue); Imprimir el valor final de matemáticas en el monitor serial
Delay(50); Retardo para 50ms para no llenar el buffer serial
}