Дальномер — различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) (→Ультразвуковые) |
||
Строка 15: | Строка 15: | ||
| Потребляемый ток || 15 mA (максимум) | | Потребляемый ток || 15 mA (максимум) | ||
|- | |- | ||
− | | Рабочая частота || | + | | Рабочая частота || 40kHZ |
|- | |- | ||
| Выходной сигнал || 0-5V | | Выходной сигнал || 0-5V | ||
Строка 139: | Строка 139: | ||
Где distance - это и есть измеренное расстояние. | Где distance - это и есть измеренное расстояние. | ||
− | |||
=Инфракрасные= | =Инфракрасные= |
Текущая версия на 14:45, 2 сентября 2014
Подключение различных типов дальномеров к Виртурилке.
Содержание |
Ультразвуковые
На примере дальномера 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 - это и есть измеренное расстояние.
Инфракрасные
Нет под рукой, так что проверить не могу.