Инфракрасные дальномеры SHARP. Измеряем расстояние.


Наконец-то мы добрались до обратных связей робота. Здесь все четко, нужно как можно более точнее измерить расстояние от точек крепления датчика на роботе до объектов вокруг.

Ну, можно было бы заказать в DARPA датчики с цифровым выходом и погрешностью 0.1%, заплатив круглую сумму, но мы живем в России и возможности ограничены как и ресурсы.  Этот датчик доступен в этой стране, а также с ним легко работать в плане съема данных и фильтрации.

Обо всех особенностях и о том, как линеаризовать выходную характеристику более чем подробно написано здесь.

Я же отмечу следующее. Мой проект написан для платформы Arduino и содержит в себе класс Sharp. Вы скажете, причем тут Arduino, но мой ответ прост: если вы хотите использовать это в своем автономном проекте, то у вас должно быть достаточно умений, чтобы портировать это к себе в проект. Чтобы использовать новую библиотеку у себя, распакуйте содержимое архива к себе в папку Arduino/libraries.

Затем запускаете скетч. Можете для примера набрать следующую программу

#include
#include
#include
static VSharp Sensor1(14,GP2D120);  
 
int main ()
{
 
  int a=Sensor1.GetDistanceIR();
 
  return 0;
}

Как видите конструктор класса требует 2 параметра:
- порт, на котором дальномер
- тип дальномера.

На данный момент поддерживаются 4 дальномера. Их название нужно вводить полностью при объявлении из следующего списка: GP2D120, GP2D12, GP2Y0A02YK0F, GP2Y0A21YK0F. На выходе вы получаете число - расстояние в миллиметрах до объекта.

Примечание: испольуется 2 фильтра:
- нелинейный медианный фильтр шириной 5
- быстрый фильтр Гаусса

Медианный фильтр обеспечивает отсечение всплесков и провалов сигнала, фильтр Гаусса сглаживает сигнал.

На практике проверено, такой тандем дает удовлетворительный результат, этот способ фильтрации использовался нами при создании робота TurboT.

По моим сугубым оценкам я бы не стал пользоваться модулем GP2D12 - он тут явный аутсайдер по стабильности выходного сигнала.

Стоит отметить, что тут в вопросе точности играет напряжение питания АЦП. Естественно для более лучшего результата рекомендую питать АЦП отдельным источником калиброванного напряжения.
Скачать

Библиотека Sharp для Arduino

Документация:

GP2D120

GP2D12

GP2Y0A21YK0F

GP2Y0A02YK0F

3 Comments

  1. mbaabm:

    А есть где-то точное описанеи всего функционала библиотеки?

  2. Delphi:

    Для этой либы оно не нужно. Вы создаете объект и у него только один метод - вернуть расстояние (GetDistanceIR). При создании объекта указываете его тип. Поддерживаются 4 типа, их полное название перечислено в статье.

  3. bvzrobot:

    А как физически его подключить к плате Мега 2560?
    И как упросить его выдавать сигнал при повышении уровня от заданного в пин Х,
    а при понижении- в пин Х1?
    Какова точность датчика?
    По чём ориентируется датчик для случая волнистой поверхности (волны, к примеру- 5 см и
    высотой 1мм, ну или иные значения)

Leave a Reply

You must be logged in to post a comment.