GP2D12 дистанционный сенсор

Я всегда думал, что датчик расстояния будет хорошим дополнением для роботов Mindstorms, но сверхзвуковые были большими и маломощными. И с тех пор я нашел только Robot Electronics, и Ultrasonic Range Finder это единственное что можно было использовать. Я придумал простой способ с использованием инфракрасного датчика , который я использовал в моем радарном автомобиле, обнаруживает препятствие, но не даёт точного расстояния до него. Решение пришло от Андреас Питера (благодарю его за то, что он показал мне эти устройства!), благодаря этому появилась возможность использовать GP2D02 для RCX.
Эти маленькие и довольно недорогие инфракрасные устройства в состоянии измерить расстояние от 10 и до 80 см с хорошей точностью и хорошей устойчивостью к разным препятствиям в виде отраженного и окружающего света. Для большего количества информации, прочитайте спецификацию GP2D12, Acroname, и статью Demystifying the Sharp IR Detector
Но интерфейс датчика Андреаса имеет несколько недостатков. GP2D02, который он смог найти, имеет другой тип кодировки, плохо подходящий для аналога RCX, поэтому требуется довольно сложный проект и большие затраты энергии.
Поэтому я решил пробовать соединить аналоговую продукцию- датчик GP2D12, используя самый простой вариант - и рассматривать только тот сигнал, который поступал от датчика. Это было хорошее решение, так как GP2D12 использовал 35 мА под напряжением 5 В, в то время как датчик RCX ограничен приблизительно 14 мА! Cмотрите график сопротивления напряжения датчика.

Но тут же появилась идея, которая помогла решить проблему с распределением энергии в том, что конденсатор GP2D12 не функционировал. Конечно, есть и недостатки у этого способа: увеличено время конвекции. GP2D12 требует 500 мс , в то время как нужно 300мс.
Первые проекты, которые я создал, были довольно сложные, с таймерами и усилителем.

Работа прибора
Фаза заряжения:
В течение 250 мс, датчик включён, нагрузки от C1 идут через D1 до ДАТЧИКА + напряжения. Регулятор снижения напряжения даёт постоянное значение- 5V. Q1 блокируется D2 (D2 поддерживает основу к напряжению выше или равной его напряжению эмитента), поэтому GP2D12 не включен. Q3 тоже не проводит ток , предотвращая текущий поток тока через D3, R5,Q2 .. Поэтому сильный ток отклоняется от C1, заканчивается на R1 (меньше чем 2 мА), и в конце этой фазы C1 полностью заряжается.
Фаза меры:
В течение следующих 50 мс, датчик формируется датчик контакта. ДАТЧИК + теперь только дает до 5В через 10KОм (внутри RCX), это недостаточно, чтобы блокировать Q1. Q1 и Q3 тогда становятся проводниками , и GP2D12 включен. Q2, установленный как последователь элемента, буфера продукции GP2D12 и ее величина доступена для RCX через D3 и R5.
Типовой код, для датчика:
SetSensor(SENSOR_1,SENSOR_LIGHT); Wait(25);
SetSensor(SENSOR_1,SENSOR_TOUCH);
Wait(5);
SetSensorMode(SENSOR_1,SENSOR_MODE_RAW);
distance=SENSOR_1;
SetSensor(SENSOR_1,SENSOR_LIGHT); //Enable C1 charge as soon as possible
Составляющий выбор:
D1 предотвращает поломку датчика, в случае если ток пойдёт не в ту сторону. Я не использовал полный ректификатор моста, используемый в датчике Lego, который позволяет датчикам работать, когда количество необходимых диодов уменьшается на 3 - 8!. Я считал, что тот, кто способен строить этот датчик также в состоянии соединить их верно... Для тех, кто хочет , вот - диаграмма с полным ректификатором моста.
Я использовал силу тока в 1 Ампер. Диод Shottky 1N5819 для D1, не дорогой и легко доступный. У него маленькое сопротивление, поэтому потери напряжения не велики - меньше чем 0.1V. Это позволяет заряжать C1 на полную. C1 хранит энергию, которая будет использоваться в течение фазы, и он должен обеспечить 5В в конце этой стадии. Принимая типичные статистики для GP2D12 (I=35mA, преобразование времени=50ms) и начальное напряжение в 7.5В поперек C1, его значение - C = I* dT / dV = 35 * 50 / (7.5-5) = 700 µF. Минимальное значение- с 1000 µF...
U1 – снижается до 5В регулятор в случае TO92. Я использовал микрочип TC55RP5000, но другие регуляторы, возможно, тоже будут работать, например STMicroelectronics L4931-50. Стандартные регуляторы, типа 78L05 не будут работать, потому что они требуют, чтобы напряжение было выше, чем 7V. Будьте осторожны с некоторыми низковольтовыми регуляторами типа LM2931, которые требуют больше чем 25 мА, когда включено напряжение 1V. С текущим ограничением RCX, потребляет всю энергию. (С этим у меня были проблемы...)
Q1 пускает ток в другую сторону от GP2D12. В 35 мА токе, я первоначально использовал plain-vanillaBC548. Мой датчик начал работать с этим, но странно себя повёл. Осмотрев питание GP2D12 я тогда обнаружил, что напряжение упало на 2В!Я тогда смотрел на потребление GP2D12 и обнаружил, что это пульсация (220mA пульс, 1/8-ой из времени, совмещённый с 8mA постоянного тока. Смотрите показатели осциллографа здесь). В таком токе BC548 имеет низкую производительность, и так как я не мог понизить резистор в цепи базы R1 (главная утечка в течение конденсаторной нагрузки), я использовал высоко эффективный транзистор ZTX718, который имеет высокое сопротивление при высоком напряжении. (Другие подобные устройства тоже подходят!).
C2 стабилизирует U1 и помогает поглощать скачки тока. Старая версия ESR была бы лучше.
Главные спецификации компонентов (.pdf документы):
|
GP2D12
(старая документация, 900 КБ) |
|
|
|
|
|
Где купить GP2D12?
GP2D12 может быть куплен в Acroname номер запчасти: R48-IR12 или в Конрада номер запчасти: 0185309
Захваты экрана осциллографа:

Смотрите их здесь.
Сборку датчика видно тут:
 |
 |
 |
 |
Модуль интерфейса - основываются на 1" квадратном прото-чипе |
Вид сверху |
Вид сверху с идентификацией компонентов |
Вид снизу. C1 отмечен. Плата усилена, отдельная была бы хрупкой |
 |
 |
 |
 |
Все помещается в три LEGO кубика 4x2 |
Причём впритык |
Полный модуль. Фиксации GP2D12 был уменьшен, чтобы соответствовать кирпичной ширине Lego |
Собран! |
Прототип:
|
 |
 |
|
|
Более уродливая модель... |
... установлен на испытательном транспортном средстве |
|
Применение: движение вдоль стены.
Смотрите это здесь !
Испытательные программы.

Испытательные программы (требует программного обеспечения RCX 2.0 которые можно скачать здесь),
testGP2D12.nqc позволяет GP2D12 видеть на дисплее RCX приблизительные значения .
measure.nqc он позволяет видеть на дисплее RCX дистанцию в сантиметрах . Измеренное расстояние- пропорционально к инверсии расстояния с некоторой погрешностью (см. выше старой документации GP2D12), Вы можете посмотреть здесь в листе документа Excel, я обычно считал, что уравнение, преобразовывающее расстояние оценивают сантиметрами.
 |
 |
Расстояние от датчика |
Линеаризовавшая кривая: 1000 / (расстояние 2) против датчика читают
+ лучше всего пригодная линия |
|