Пришел мне шикарный датчик XL-MaxSonar MB1260. Диаграмма то что надо, широкая и огромная. Для своих целей работаю с ним точно так же как и с HC-SR04, только временные интервалы опроса зашиты уже в самом датчике. Он отрабатывает свой цикл за 99мс. Для симуляции в протеусе на ногу триггер подсоединил генератор импульсов и симуляцию провожу как с обычным HC-SR04.
Из минусов - это описано в мануале, датчик нормально не видит ближе 20-25см, у меня 22см, а потом он начинает чудить, ловить отраженные отголоски и при расстоянии в 5 см может показать 50см. Лечится установкой звукового препятствия позади датчика. Но для моих целей, я решил меньше 35см вообще игнорировать.
Мой алгоритм работает так - при ресете меряю расстояние до ближайшей стены, потому как датчик стену видит и за 10м, отступаю пол лаптя и принимаю это за максимум. Считаю коэффициент пропорциональности =1024/максимальное время. Если что то появляется ближе, то измеряю длительность и расчитываю скважность ШИМ. ШИМ=1024-(Время реальное*Коэффициент пропорциональности)
Измерения времени пишу в кольцевой массив 5-10 измерений суммирую и вычисляю среднее значение. В принципе все работает. На небольшом расстоянии 1,5 м до максимума (на работе) ШИМ меняется не прилично ступенчато, глаз видит скачки света. Дома пробовал, 3,5м до максимума (диван падла перекрывает обзор) - на много лучше.
Но моя формула работает на времени от 0 до Максимального времени и вылазят всякие магические числа....потому что надо отступить от слепой зоны и теряется пропорциональность.
Мне нужно улучшить формулу. Привожу график того, что я хочу.
На графике две кривые. Синяя это я так понимаю не сложно сделать, а я хочу как красная, что бы на максимальном удалении яркость нарастала не быстро.
Но что то как то не соображу как вывести эти формулы.
Архив прилагаю, но мне надо сначала стратегически определиться с главным вопросом.