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

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

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

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

Задание #

Чтобы продемонстрировать этот процесс, давайте создадим новый нода для чтения популярного 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, чтобы сделать это.

Found a typo or mistake? Want to improve the text? Edit this page on GitHub and open a pull request. If you have a complex proposal or you want to discuss the content, feel free to start a new thread on XOD forum.