Чувства роботов: ИК-датчик расстояния Sharp GP2Y0A21YK

  • Цена: $6.38 (покупал за $5.42)

Роботам, как и смерть всем человекам очень нужны органы чувств, чтобы ориентироваться в пространстве. Инфракрасный дальномер Sharp GP2Y0A21YK очень подходит на эту роль, если вам требуется избегать столкновения с препятствиями или знать, где примерно это самое препятствие находится.

Кстати, возможно, у вас дома уже есть один из роботов, где используются похожие датчики. Это практически все вменяемые китайские роботы-пылесосы и, полагаю, многие модели Roomba. И, вероятно, многие другие.

А если уж этим сенсорам нашлось место в более-менее серьезной технике, то и мы найдем им применение, правда?



Чтобы не кривить душой, скажу сразу: я заказывал эти датчики не просто поиграться. Наоборот, с самого начала знал, что они мне пригодятся, чтобы сделать интерактивную лампу, которая меняет интенсивность свечения в зависимости от положения ладони над ней.

Конечно, реальность внесла свои коррективы и в итогеЕвлампия (так зовут лампу) получилась гораздо интереснее базовой концепции. Иными словами, у нее теперь пять режимов: ночник, светильник с регулировкой яркости, термометр, «северное сияние» с ручной регулировкой и автоматическое северное сияние.



А кроме того — пара сервисных функций: включение и выключение фонового и верхнего освещения в комнате.

Вот как это работает:



Ну а теперь самое время подробнее рассказать о датчике, благодаря которому все и случилось.



Как я говорил в самом начале, Sharp GP2Y0A21YK — это инфракрасный дальномер. А значит, он оснащен ИК-излучателем и ИК-приемником: первый служит источником луча, отражение которого ловит второй. При этом ИК-лучи датчика для человеческого глаза невидимы (хотя можно различить красное мерцание, если посмотреть в датчик) и при такой интенсивности безвредны.

На домашних животных они так же не оказывают никакого влияния.

Согласно даташиту характеристики такие:

  • Напряжение питания: 5В
  • Максимальный потребляемый ток: 40 мА (типичный — 30 мА)
  • Диапазон работы: 10 см — 80 см

Что касается конкурентов, то по сравнению с ультразвуковыми сенсорами, например, сверхпопулярным HC-SR04, у этого датчика есть и достоинства, и недостатки. К достоинствам можно отнести все то, что сказано выше, т.е. нейтральность и безвредность.

А недостатки — меньший радиус действия (у HC-SR04 порядка 4 м) и зависимость от внешних помех, в том числе — некоторых типов освещения. Я, к примеру, встречал упоминания, что солнечный свет может влиять на показания датчика.



Датчик поставляется в спартанском комплекте, т.е. сам датчик и кабель с разъемом для подключения к датчику. На другой стороне — просто залуженные провода, что не очень удобно для использования с Arduino Uno, но вполне подходит для контроллеров без распаянных разъемов. Так как я планировал использовать датчик с Arduino Pro Mini, это был вполне подходящий вариант — провода просто запаял в макетную плату.



Провода различаются по цвету: желтый — сигнал, черный — земля, красный — плюс питания (+5В).

Выход датчика аналоговый (хотя в даташите почему-то написано — цифровой). То есть, напряжение на нем пропорционально расстоянию до препятствия. Вместе с тем, как и в случае с ультразвуком, для датчика есть разница между разными типами препятствий.



В связи с этим в даташите Sharp приводит данные при использовании в качестве отражателей эталонных карточек Kodak с коэффициентом отражения 90%. Судя по нему, на 20 см датчик выдает 1.3В.

Давайте сравним с моими экспериментальными данными:



Напоминаю, что аналоговый вход Arduino работает в диапазоне 0В — 5В и имеет 1024 ступеней, отсюда расчет: (5/1024)*(показания датчика). Так что если учесть то, что все своими (дрожащими) руками, то показания вполне вписываются в характеристики датчика. И заодно видно, что черная поверхность вносит свои коррективы.

. так он светит


Вместе с тем, как заметил внимательный читатель, есть и специфика. Суть в том, что когда препятствие находится ближе нижней границы радиуса действия (10 см), датчик начинает считать, что препятствие, наоборот, удаляется (когда накрыл рукой показания зафиксировались на 345).

Примерно так это выглядит:



В связи с этим рекомендация: в целевом устройстве датчик должен быть установлен так, чтобы препятствие физически не могло оказаться ближе нижней границы радиуса действия.

Отсюда вывод: хотя для многих целей даташит вполне адекватен, иногда имеет смысл провести эксперименты, чтобы потом не было мучительно больно. И это особенно актуально, если датчик несколько заглублен (или закрыт ИК-прозрачным материалом), а значит, может получать отражения от стенок или других элементов корпуса.

Например, я столкнулся с тем, что Евлампия, будучи установленной на штатном месте после успешно проведенных «настольных» тестов, стала сходить с ума. Сначала я думал, что виноваты помехи по питанию и даже поставил параллельно питанию датчика пару конденсаторов (10 мкФ и 0.1 мкФ), подтянул аналоговый вход Arduino к нулю через резистор 10 кОм и даже купил сетевой фильтр-розетку.

Но когда это не помогло, то снова вернулся на стол, где покрутил датчик в разные стороны и увидел, что по факту даже если расстояние до ближайшего препятствия больше 80 см, показания датчика заметно меняются. Так что если ваши подопечные будут неадекватны — проверяйте фактические показания в реальных условиях.

Вот, например, элементарный скетч, который, во-первых, с интервалом в полсекунды выводит показания датчика, а, во-вторых, зажигает светодиод Arduino, если показания попадают в диапазон от 100 до 200:



// Желтый - A0, Черный - земля, Красный - +5В

unsigned int l;

void setup() {
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(13, OUTPUT);
  l = 0;
  
}

void loop() {
 
l = analogRead(A0);
 Serial.println(l);
 delay(1000);
 
 if (l > 100 && l < 200) {
   digitalWrite(13, HIGH);
 } else {
   digitalWrite(13, LOW);
 }
   
}



Если подводить итог, то датчик, хотя и немного капризен, очень прост в использовании и относительно дешев.

Использовать его можно в роботах, а также для контроля пересечения дверных проемов, в каких-нибудь интерактивных устройствах, управляемых жестами и в чем-то, что еще подскажет фантазия.
Планирую купить +34 Добавить в избранное +38 +67
+
avatar
  • kirich
  • 14 декабря 2014, 23:52
+5
За обзор спасибо.
У нас такие датчики на нашем роботе трудятся.
Правда не скажу, что довольны ими.
Покупали в оффлайне, по 10 баксов примерно.

(не могу отделаться от чувства дежавю, такое впечатление, что я этот обзор на хабре видел)
У меня по такому принципу подсветка на кухне включается, правда не с такими датчиками.
Чувствую точно обзор пилить придется :)))
+
avatar
  • spc
  • 15 декабря 2014, 00:05
0
Вот я тоже не могу сказать, что доволен. Специфичные все же датчики.
+
avatar
  • kirich
  • 15 декабря 2014, 00:07
+1
Поговорил с программистом, вспомнил, что у них за глюк.
Один и плюс и минус, это очень узкая точка.
Но второй точно минус, они слепнут даже от отраженного солнца, даже через окно.
В итоге заменили на УЗ.

Надо датчик из моего обзора на солнце попробовать, только проблема солнце найти.
На 35 Ватт галогенную лампу, светящую в упор, никак не реагирует.
Зная, что пульты ТВ так же нормально работают на солнце, думаю и там будет нормально, но надо пробовать.
+
avatar
  • qwerty2
  • 15 декабря 2014, 15:45
0
Однако ик светодиод, ик фототранзистор и пара резисторов в офлайне обойдется максимум в 50 евроцентов. Очень уж дорогая девайсина.
А сам проект конечно прикольный.
+
avatar
  • spc
  • 15 декабря 2014, 16:36
0
Возможно, но сначала надо найти офлайн с такими ценами (у меня по пути только Чип-и-Дип). А потом у меня не хватит ума это обрабатывать, поскольку для защиты от помех потребуется модуляция и неизбежная за ней демодуляция. Насколько я понимаю процесс.
+
avatar
  • Jet
  • 15 декабря 2014, 15:47
0
Это не дежавю, про евлампию тоже с утра прочёл на хабре)
+
avatar
+1
Лампа классная. Но мне бы быстро надоела. Быстрее аналоговым выключателем включить — выключить.
+
avatar
  • spc
  • 15 декабря 2014, 00:05
+1
Это было 50/50 развлечение и бытовой прибор. На самом деле актуальны ночник, чтобы быстро посмотреть, чем там коты шуршат и тотальное выключение света.

Остальное — когда как.
+
avatar
  • Kartus
  • 15 декабря 2014, 11:11
+1
Лучший ночник для шуршащих котов — тапок, прицельно заброшенный в направлении шуршания)))
+
avatar
  • spc
  • 15 декабря 2014, 12:04
0
Это само собой. Но тапок не сильно помогает, если есть подозрение, что кто-то собрался выплюнуть шерсть.
+
avatar
  • di_ba
  • 14 декабря 2014, 23:53
0
круто!
+
avatar
  • ABATAPA
  • 15 декабря 2014, 00:49
0
Для обнаружения присутствия людей хороши RF-датчики:
mySKU.me/blog/china-stores/23362.html
+
avatar
  • Antares
  • 15 декабря 2014, 01:03
+1
Еще один плюс — возможность работы через защитное стекло, ультразвук в таких условиях отражается и hc-sr04 к воде не приспособишь.
+
avatar
  • Eugen65
  • 15 декабря 2014, 05:37
0
В случае вашей лампы гораздо удобнее выглядел бы пульт. Одно нажатие и нужный режим включен. А всё то, что замедляет включение — скорее понты, чем нужная вещь.
+
avatar
  • spc
  • 15 декабря 2014, 12:07
0
Вероятно, но я хотел именно так. Да, и если задуматься, с пультом вообще никакого подвига, там программа простая, как две горошины.
+
avatar
0
комрады, сорри за офф, но хочу спросить:
никто не пробовал запихнуть подобные датчики и ардуинку в какого-нибудь «тупого» робота пылесоса типа K6L и ему подобным, с целью его поумнения. а то уж больно примитивно он двигается, хотя пылесосит паркет замечательно.
+
avatar
  • diman27
  • 22 декабря 2014, 17:54
0
Добрый вечер. Немного не по теме. А в вашем проекте вместо pro mini подойдет arduino nano?
+
avatar
  • spc
  • 22 декабря 2014, 23:13
0
Добрый! Насколько могу судить, противопоказаний нет — чипы одинаковые, диапазон возможных питающих напряжений похож. Только будьте аккуратны с питанием. Если я правильно понял, у nano для нестабилизированного источника предназначен пин 30.