Датчик измерения расстояния SHARP-GP2Y0A710K0F - рассчёт расстояния


SHARP-GP2Y0A710K0F — это ИК-датчик измерения расстояния с большим диапазоном определения:
от 100 до 550 см
и работающий по принципу триангуляции.
Подробнее про датчик можно прочитать в заметке — Датчик измерения расстояния SHARP-GP2Y0A710K0F
— там рассмотрены характеристики датчика и написан скетч, считывающий напряжение выдаваемое сенсором с аналогового входа контроллера Arduino/CraftDuino.
Теперь же, рассмотрим пересчёт напряжения датчика в расстояние до объекта.

Обратите внимание, что датчик заработает только при подключении всех пинов его разъёма:

1 и 5 пины разъёма должны подключаться к «земле» (GND),
2 и 3 пины подключаются к Vcc (5V),
4 пин подключается к аналоговому входу контроллера Arduino/CraftDuino.

Разъём представляет собой хитрую вилку с шагом 1.5мм и доволно трудно доставаем, поэтому пришлось разломать наиболее похожий разъём на отдельные пины и повтыкать их отдельно, изолировав термоусадкой.




Если воспользоваться фотоаппаратом, то будет видно свечение ИК-диода


Остаётся пересчитать напряжение, выдаваемой датчиком, в расстояние до объекта.
Для этого, воспользуемся документацией на датчик, а именно — графиком, на котором изображена линейная зависимость напряжения от обратного значения расстояния (1/см).

Видим линейную зависимость, а значит — нам просто нужно узнать параметры этой линии и использовать их для пересчёта напряжения в расстояние до объекта.

Уравнение прямой:
y = k*x + b
, где
k — угловой коэффициент прямой (k = tg(phi), где phi — угол между прямой и осью OX)
b — точка пересечения прямой и оси OY (при x=0)


Уравнение прямой по двум точкам (x1, y1) и (x2, y2):

 y - y1     x - x1
------- = --------
y2 - y1    x2 - x1

k = (y2-y1)/(x2-x1)


из этой формулы и двух значений, определённых по графику линейной зависимости напряжения от обратного значения расстояния:
1) (0.002 , 1.4)
2) (0.010 , 2.5)

находим коэффициенты прямой:
k = 137.5
b = 1.125

Т.о., можем переписать скетч для контроллера Arduino/CraftDuino чтобы напряжение сразу пересчитывалось в расстояние до объекта (в сантиметрах):
//
// SHARP IR sensor test distance calculation (cm)
//
// http://robocraft.ru
//

int IRpin = 0;                                    // analog pin for reading the IR sensor

// linear coefficients to calculate the distance
#define SHARP_GP2Y0A710K0F_K 137.5
#define SHARP_GP2Y0A710K0F_B 1.125

float get_distance_from_volts(float volts)
{
  return SHARP_GP2Y0A710K0F_K/(volts - SHARP_GP2Y0A710K0F_B);
}

void setup() {
  
  Serial.begin(9600);                             // start the serial port
}

void loop() {
  
  // 5v/1024 = 0.0048828125
  
  float volts = analogRead(IRpin)*0.0048828125;   // value from sensor * (5/1024) - if running 3.3.volts then change 5 to 3.3
  float dist_cm = get_distance_from_volts(volts);
  Serial.println(dist_cm);                       // print the distance
  delay(100);                                     // arbitary wait time.
}


Используя этот скетч можно определить, что сенсор выдаёт адекватное расстояние где-то от 60 сантиметров и обладает довольно узкой диаграммой направленности.

Сенсор SHARP предоставлен компанией Farnell, за что ей (и лично Ryan Gibson) большое спасибо!


Ссылки:
http://ru.wikipedia.org/wiki/Прямая

По теме:
Датчик измерения расстояния SHARP-GP2Y0A710K0F
Программирование Arduino — аналоговый ввод/вывод
Датчик измерения расстояния SHARP-GP2Y0A02YK0F
  • +1
  • 14 февраля 2012, 14:55
  • admin

Комментарии (2)

RSS свернуть / развернуть
+
0
А почему бы не использовать map?
float dist_sm=1000000L/map(analogRead(IRpin),287,512,2000L,10000L)

map имеет тип long, поэтому значения выходного диапазона выбраны *10^6; входной диапазон 287 — 1,4V, 512 — 2.5V
avatar

AlexFisher

  • 30 марта 2012, 11:03
+
0
Не нашел, как отредактировать свой коментарий, поэтому пишу новый. Операция деления должна выполняться в режиме float, поэтому нужно исправить:
float dist_sm=1000000.0/map(analogRead(IRpin),287,512,2000L,10000L)
avatar

AlexFisher

  • 30 марта 2012, 11:09

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.