Эта статья про инфракрасный дальномер GP2Y0A710K0F с рабочей дальностью от 100 до 550 см. Дальномер аналоговый. Для считывания его данных можно использоваться вольтметр. Умножая вольты на специальную величину, можно получить измеряемое расстояние. Для подключения GP2Y0A710K0F к Raspberry pi понадобится АЦП. Я использовал АЦП ADS1115.
Характеристики дальномера GP2Y0A710K0F
- Напряжение: 5в (+/- 0.5)
- Дистанция: 100-550см
- Ток потребления: 0,03А (на практике 0.021А)
- Размер : 58×17.6×22.5 мм
- Цена: $13 на aliexpress
Принцип действия
Для определения расстояния GP2Y0A710K0F использует принцип триангуляции. При измерении, инфракрасный свет образует треугольник. Дальномер состоит из двух линз. Первая линза — это источник инфракрасного света. В ней стоит специальный светодиод. Он испускает тонкий луч под прямым углом. Вторая линза — это приемник. Свет отражается от препятствия и улавливается чувствительной поверхностью приемника. Главная задача приемника — определить угол, под которым вернулся луч инфракрасного света.

На фото видна линза, из которой выходит инфракрасный свет. Вторая линза — приемник.
Дальномер находит дистанцию по формуле для прямоугольного треугольника D = A * tg(α). Мы знаем нижний катет A (расстояние между линзами дальномера) и примыкающий к нему угол α. Эти расчеты происходят внутри дальномера. Наружу мы получаем напряжение, которое зависит от измеряемой дистанции.
В даташите этого дальномера есть график зависимости дистанции от выходного напряжения. Он почти линейный.
Зная параметры этой линии вычисляем формулу перевода вольт в сантиметры
Дистанция = 137.5 /(Напряжение — 1.125)
На фото выше дальномер лежал у меня на столе и измерял расстояние от стола до потолка. Вольтметр показывал 1.9в. Переводим вольты в сантиметре по формуле выше 137.5 /(1.9 — 1.125) = 177.4см. Данные аналоговых датчиков можно считывать вольтметром. Это удобно для отладки.
Подключение дальномера GP2Y0A710K0F к Raspberry pi
Для подключения дальномера к Raspberry pi необходим АЦП (что-то вроде вольтметра). Я буду использовать ADS1115. О нем я уже писал в этой статье. GP2Y0A710K0F имеет 5 пинов. Если положить дальномер маркировкой вверх, то контакты нумеруются с конца.
5 GND (-5в)
4 Vout (выходной сигнал)
3 Vcc (+5в)
2 Vcc (+5в)
1 GND (-5в)
Важно подключить все контакта питания. Так как у приемника и передатчика питание разделено.
Вот примерная схема подключения. На картинке ниже использован вариант с внешним источником питания. Дальномер также можно подключить и выходу 5в в Raspberry, но не желательно. Диаграмму можно скачать тут GP2Y0A710K0F-ADS1115-RaspberryPi.fzz.zip
Для стабилизации показаний дальномера рекомендуют впаять конденсатор емкость от 10μF между плюсом и минусом источника питания дальномера (для обоих контактов). Емкость конденсатора подбирается опытным путем.
Запускать пример я буду на платформе Johnny-five на javascript. Немного расширим пример из статьи про подключение ADS1115. Добавим функцию перевода напряжения в сантиметры. Чтобы код заработал, на вашей плате должен быть установлен Node.js и 2 библиотеки.
npm i raspi-io johnny-five
const Raspi = require('raspi-io'); const five = require('johnny-five'); const board = new five.Board({ io: new Raspi() }); const pga = 6114; //берем из таблицы board.on('ready', function() { const virtual = new five.Board.Virtual(new five.Expander({ controller: 'ADS1115' })); // virtual.io.REGISTER.PIN[0]= 0b11000001; // первый байт конфига virtual.io.REGISTER.PIN_DATA = 0b10100011; // второй байт конфига const sensor = new five.Sensor({ pin: 0, board: virtual, freq: 250 }); sensor.on('data', function() { const volts = this.value * pga / 32768; console.log(getDistanceFromVoltage(volts / 1000), 'sm'); }); }); function getDistanceFromVoltage(volts) { return 137.5 / (volts - 1.125); //только для GP2Y0A710K0F }
Выбор дальномера для марсохода
Всего у меня три дальномера:
- инфракрасный GP2Y0A710K0F (100-500см)
- ультразвуковой HC-SR04 (2-400см)
- лазерный VL53L0X ( до 200см)
Дальномер GP2Y0A710K0F я выбрал из-за его дальности 100-500см. Это довольно хороший бюджетный прибор. Однако не могу сказать, что он очень точный на расстояниях больше 300см. Выходной сигнал очень зашумлен. Без фильтра Калмана с его значениями работать сложно.
Вот так этот дальномер выглядит на марсоходе.
В ночном режиме виден пучок инфракрасного света в центре экрана. Эту точку видно только на камере без инфракрасного фильтра.
Вцелом дальномер GP2Y0A710K0F неплохой. Его главные достоинства, это простота в использовании и сравнительно небольшая цена. К минусам я бы отнес большую зашумленность выходного сигнала на измерениях больше 300см.