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) большое спасибо!
Комментарии (2)
RSS свернуть / развернутьmap имеет тип long, поэтому значения выходного диапазона выбраны *10^6; входной диапазон 287 — 1,4V, 512 — 2.5V
AlexFisher
AlexFisher
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.