Дальномер

Материал из virt2real wiki
Перейти к: навигация, поиск

Подключение различных типов дальномеров к Виртурилке.


Содержание

Ультразвуковые

На примере дальномера DYP-ME007 v2.

DYP-ME007 v2

ТТХ:

Питание 5V(DC)
Потребляемый ток 15 mA (максимум)
Рабочая частота 40kHZ
Выходной сигнал 0-5V
Угол расхождения 15 градусов (максимум)
Дистанция обнаружения 2cm - 500cm
Точность до 0.3 см.
Входной сигнал импульсы длительностью 10us (уровень TTL)
Выходной сигнал TTL PWL



Подключение

На плате дальномера есть пять пинов. Четыре из них (кроме Out) необходимо подключить к Виртурилке


контакты дальномера назначение контакты Виртурилки
Vcc питание CON21 PWR_VIN (или другой где есть 5 Вольт)
Trig задающий импульс любой пин с PWM (например, CON44 - GPIO91 / PWM1)
Echo полученный импульс (отражённый сигнал) любой пин с GPIO1-GPIO7 (например, CON54 - GPIO3)
Out - NC (не подключаем)
GND земля CON86 (или любой другой где есть земля)


Принцип действия

  • Подать задающий импуль длительностью не меньше 10 микросекунд на контакт Trig
  • При этом дальномер сразу сформирует и отправит ультразвуковой сигнал частотой 40 кГц и длительностью 8 периодов
  • Сразу после этого приёмник начнёт слушать эфир
  • При фиксировании отражённого сигнала контакт Echo будет установлен в состояние LOW на длительность, пропорциональную времени получения сигнала


Таким образом, для того чтобы узнать расстояние до препятствия, от которого был отражён сигнал, необходимо периодически устанавливать пин Echo в состояние HIGH и засекать (через прерывание) длительность импульса на пине Trig. Полученное значение длительности импульса (value) необходимо перевести в сантиметры

distance = value / 58;

Делитель подбирается экспериментально, для этого дальномера рекомендуют именно 58 использовать.


Пример опроса дальномера

Для этого необходимо использовать утилиту управления драйвером прерываний gpio-event

Добавляем GPIO3 в список мониторинга прерываний (на оба типа изменения сигнала и с нулевым debounce)

gpio-event 3:b:0

Устанавливаем GPIO3 в режим Input

echo "set gpio 3 input" > /dev/v2r_gpio


Устанавливаем CON44 в режим PWM

echo "set con 44 pwm1" > /dev/v2r_pins

Запускам PWM1, чтоб генерировал импульсы на пине CON44. Необходимо чтобы длительность импульса была не меньше 10 мкс. А периодичность импульсов должна быть не меньше определённой (тут надо бы высчитать точное значение), чтобы новый импульс не отправлялся пока не пришёл ответ от первого (или не прошёл таймаут), иначе не будет работать дальше метра-двух.

echo "set pwm 1 100 400000" > /dev/v2r_pins

Вообще, импульсы Trig можно формировать не через PWM а просто установкой и сбросом пина Trig

Например,

echo 1 > /proc/v2r_pins/44 && echo 0 > /proc/v2r_pins/44

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


Теперь, когда у нас всё подготовлено, можно запустить мониторинг прерываний

cat /dev/gpio-event

Если всё правильно подключено и выполнены вышеуказанные команды, увидим что-то вроде

3 R 1395121569.032897
3 F 1395121569.098455
3 R 1395121569.207885
3 F 1395121569.273463

Это означает что пин GPIO3 дёргается, в соответствии с сигналом Echo.


Для измерения длительности импульсов и пересчёта их в расстояние можно воспользоваться тестовой программкой usrange.

Исходники gpio-event и usrange

Установить эти программки можно из репозитория

opkg-cl update
opkg-cl install gpio-event


Запустив её (никакие параметры не нужны), увидим в консоли

[root@virt2real ~]# usrange
reading events:
gpio 3: distance: 273
gpio 3: distance: 272
gpio 3: distance: 273
gpio 3: distance: 19
gpio 3: distance: 17
gpio 3: distance: 17
gpio 3: distance: 17
gpio 3: distance: 280
gpio 3: distance: 273

Где distance - это и есть измеренное расстояние.

Инфракрасные

Нет под рукой, так что проверить не могу.