чуть более подробно остановимся на функции квадрата, предложенной tom10 ...
мы предполагаем, что функция вашего устройства представляет собой квадратную кривую, т.е.
distance = A + B * reading + C * reading^2
Теперь нам нужно выяснить A, B и C, чтобы преобразовать ваши показания в расстояние, поэтому нам нужен своего рода регрессионный анализ. Квадратная кривая определяется ровно 3 точками, поэтому вы измеряете в 3 точках (r1..r3) и отмечаете расстояния (d1..d3)
Теперь у вас есть 3 уравнения с тремя неизвестными, которые вы можете решить любым способом, т.е.
A + r1 * B + r1^2 * C = d1
A + r2 * B + r2^2 * C = d2
A + r3 * B + r3^2 * C = d3
Вы решаете один раз для A, B и C, которые будут вашей «калибровочной кривой» и сможете рассчитать любое неизвестное расстояние, используя первую формулу выше. Конечно, если вы меняете аппаратное обеспечение, вам нужно будет перекалибровать ваше оборудование в пределах любых вариаций устройства.
Вы можете расширить этот механизм до кубической и даже более высокой кривой порядка, выполнив четвертое измерение и расширив все вышеприведенные уравнения переменной D, т.е.
A + rx*B + rx^2*C + rx^3*D + ....
и т.д.. но это не добавит много точности. Вы найдете, что коэффициент D для rx ^ 3 и далее будет очень мал.
Надеюсь, это поможет
Удачи
MikeD