Skip to content

Latest commit

 

History

History
130 lines (94 loc) · 8.87 KB

File metadata and controls

130 lines (94 loc) · 8.87 KB
title
Создание ноды-драйвера аналогового датчика

Создание ноды-драйвера аналогового датчика

Многие датчики обеспечивают измерение значений как измерение напряжения. Плата может читать уровень напряжения и выполнять вычисления для преобразования полученных значений напряжения в необходимые единицы измерений.

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

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

Задание

Чтобы продемонстрировать этот процесс, давайте создадим новый нода для чтения популярного GP2Y0A02 (да, не очень элегантное название) инфракрасного дальномера от Sharp.

GP2Y0A02 photo

Наша цель — это нода, которая будет считать расстояние до препятствия в метрах. На самом деле, библиотека xod / common-hardware уже содержит нода, но, ради примера, давайте представим, что такого нода еще нет.

Извлечение полезных данные с датчика

Сначала, прочитаем datasheet и поймем математику для преобразования значений напряжения в необходимые нам единицы измерения.

GP2Y02 curve

В нашем конкретном случае мы видим, что «Обратное значение расстояния» почти линейно зависит от «Выходного напряжения» в рабочем диапазоне датчика (от 20 до 150 сантиметров). Точки, выделенные красным цветом, находятся на сетке и поэтому удобны для построения пропорции. Наконец, наш план вычислений:

  • Преобразование значения аналогового входа в значение уровня напряжения
  • Создание карты соответствия значений напряжения и обратного расстояния: [1.25, 2.00] и [0.020, 0.033]
  • Измените расстояние
  • Преобразование сантиметров в метры
Note Хотя последнее преобразование и является необязательным, это хорошая практика. Работа в международной системе единиц СИ удаляет много неоднозначностей, упрощает замену узлов и данных для взаимообмена.

Итак, в XOD нам нужно прочитать аналоговые значения от датчика, выполнить математику, и мы получим желаемое значение расстояния в метрах. Во время тестирования используйте нода watch для наблюдения за результатами и проверки правильности. Вот наш патч:

Single patch implementation

Привяжите значение PORT у analog-sensor к номеру разъема платы, к которому вы подключили датчик. Загрузите с включенным отладчиком, медленно перемещайте книгу или лист бумаги перед датчиком и наблюдайте изменение значения. Измерения выглядят реалистично? Круто! У нас есть «тело» для нашего нового узла.

Объединение в узел

Текущая программа работает, но имеет значение PORT, жестко закодированное и содержит watch нода — всё это не удобно к использованию. Давайте перейдем от черновика к полному решение.

Создайте новый патч и назовите его как gp2y0a02-range-meter.

Примечание Мы рекомендуем следовать правилам именования ⟨cryptic-part-id⟩-⟨human-name⟩. Это упрощает дальнейший поиск и идентификацию нода на патче.

Как и раньше, вырезать / вставить все нода, кроме watch из патчаmain на gp2y0a02-range-meter. Опять же, нам нужно несколько элементов для взаимодействия с нода. По крайней мере, со значением PORT и результатом. Не забывай дать им разумные названия.

Range meter patch node

Вернитесь к main. Перетащите нода gp2y0a02-range-meter. Это наш измеритель диапазона, и он обеспечивает значения расстояния. Свяжите его выходной вывод сwatch. Загрузите программу с помощью отладчика и проверьте показания watch с фактическим расстоянием.

Watch

Расширение настроек

Кроме того, не каждая плата имеет 5 вольт, так как это верхний предел измерения. Некоторые используют 3,3 вольта; другие зависят от заряда аккумулятора. Это факт, не имеющий большого значения для нашего нода, поэтому мы дадим пользователю указать напряжение АЦП. Дополнительный input-number сделает его настраиваемым.

Еще кое-что. Настоятельно рекомендуется также открыть вкладку частоты обновления (UPD). Таким образом, пользователь нода может контролировать и считывать датчик. Используйте input-pulse для этого.

Expose AVcc and UPD

Значения по умолчанию

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

Аналогично, установите значение по умолчанию для терминала UPD на “Continuously” (непрерывно).

Результат

Expose AVcc and UPD

Мы сделали полное решение для чтения конкретной модели датчика. В следующий раз когда вы захотите измерить растояние в метрах в вашем проекте, вам не потребуется вводить все матаматические функции для расчета значений.

Теперь вы сможете создавать аналогичные нода для десятков датчиков, разница только в математике. Обращайтесь в datasheet, чтобы сделать это.