Датчик расстояния для Arduino: ультразвуковой, инфракрасный или лазерный
Измерить расстояние без касания можно тремя способами: послать звук, послать инфракрасный свет или послать лазерный импульс. Каждый способ имеет свои слепые зоны, и выбор зависит от того, до чего именно вы меряете.
Общий принцип у всех один: излучатель что-то посылает, приёмник ловит отражение, а расстояние вычисляется по времени или по углу возврата.
Разборы конкретных моделей
Три способа измерить расстояние
Два цилиндра, похожие на глаза робота. Дальность от двух сантиметров до четырёх метров, цена копеечная. Отлично видит твёрдые ровные поверхности и почти не видит ткань, поролон и наклонные стены: звук уходит в сторону или гаснет. Угол обзора около пятнадцати градусов, то есть он меряет не точку, а конус.
Меряет не время, а угол, под которым вернулся отражённый луч. Работает от десяти до восьмидесяти сантиметров, узкий луч, реагирует быстрее ультразвука. Но зависимость выходного напряжения от расстояния нелинейна, и на ярком солнце датчик слепнет.
Считает время полёта лазерного импульса. Точность до миллиметров, дальность до двух метров, размер с ноготь, подключение по I2C. Не зависит от материала поверхности так сильно, как ультразвук. Стоит дороже остальных и не любит прозрачные и зеркальные препятствия.
Что учесть при выборе
Материал препятствия важнее характеристик. Ультразвук идеален для стены, картонной коробки, уровня воды в баке — и бесполезен для человека в пуховике. Лазер, наоборот, спокойно видит ткань, но пасует перед стеклом и зеркалом.
Второе — угол обзора. Ультразвуковой датчик меряет конус пятнадцати градусов и вернёт расстояние до ближайшего объекта в этом конусе, а не строго перед собой. Для робота, объезжающего препятствия, это плюс, для точного измерения уровня в узкой трубе — минус.
Третье — скорость. Ультразвуку нужно время, пока звук долетит и вернётся: на четырёх метрах это около двадцати пяти миллисекунд, то есть не больше сорока замеров в секунду. Лазер и инфракрасный датчик отвечают быстрее.