Многие датчики обеспечивают измерение значений как измерение напряжения. Плата может читать уровень напряжения и выполнять вычисления для преобразования полученных значений напряжения в необходимые единицы измерений.
В этой статье вы узнаете о процессе добавления поддержки такого датчика. Для этого мы собираемся создать новый патч-нода. Предполагается, что вы уже знаете как создавать патч-нода.
Начните с создания нового проекта или откройте проект, над которым вы работали, пока обучались как создать патч-нода.
Чтобы продемонстрировать этот процесс, давайте создадим новый нода для чтения популярного GP2Y0A02 (да, не очень элегантное название) инфракрасного дальномера от Sharp.
Наша цель — это нода, которая будет считать расстояние до препятствия в метрах. На самом деле, библиотека xod / common-hardware уже содержит нода, но, ради примера, давайте представим, что такого нода еще нет.
Сначала, прочитаем datasheet и поймем математику для преобразования значений напряжения в необходимые нам единицы измерения.
В нашем конкретном случае мы видим, что «Обратное значение расстояния» почти линейно зависит от «Выходного напряжения» в рабочем диапазоне датчика (от 20 до 150 сантиметров). Точки, выделенные красным цветом, находятся на сетке и поэтому удобны для построения пропорции. Наконец, наш план вычислений:
Итак, в XOD нам нужно прочитать аналоговые значения от датчика, выполнить математику, и мы получим желаемое значение расстояния в метрах. Во время тестирования используйте нода watch
для наблюдения за результатами и проверки правильности. Вот наш патч:
Привяжите значение PORT
у analog-sensor
к номеру разъема платы, к которому вы подключили датчик. Загрузите с включенным отладчиком, медленно перемещайте книгу или лист бумаги перед датчиком и наблюдайте изменение значения. Измерения выглядят реалистично? Круто! У нас есть «тело» для нашего нового узла.
Текущая программа работает, но имеет значение PORT
, жестко закодированное и содержит watch
нода — всё это не удобно к использованию. Давайте перейдем от черновика к полному решение.
Создайте новый патч и назовите его как gp2y0a02-range-meter
.
⟨cryptic-part-id⟩-⟨human-name⟩
.
Это упрощает дальнейший поиск и идентификацию нода на патче.
Как и раньше, вырезать / вставить все нода, кроме watch
из патчаmain
на gp2y0a02-range-meter
. Опять же, нам нужно несколько элементов для взаимодействия с нода. По крайней мере, со значением PORT
и результатом. Не забывай дать им разумные названия.
Вернитесь к main
. Перетащите нода gp2y0a02-range-meter
. Это наш измеритель диапазона, и он обеспечивает значения расстояния. Свяжите его выходной вывод сwatch
. Загрузите программу с помощью отладчика и проверьте показания watch
с фактическим расстоянием.
Кроме того, не каждая плата имеет 5 вольт, так как это верхний предел измерения. Некоторые используют 3,3 вольта; другие зависят от заряда аккумулятора. Это факт, не имеющий большого значения для нашего нода, поэтому мы дадим пользователю указать напряжение АЦП. Дополнительный input-number
сделает его настраиваемым.
Еще кое-что. Настоятельно рекомендуется также открыть вкладку частоты обновления (UPD
). Таким образом, пользователь нода может контролировать и считывать датчик. Используйте input-pulse
для этого.
Несмотря на то, что изменение настроек измерения напряжения до сих пор зависит от пользователя, мы хотим выставлять по умолчанию значение напряжения: 5 вольт. Значение будет использоваться до тех пор, пока пользователь не переопределит его. Чтобы привязать значение по умолчанию, выберите нода терминала и установите желаемое значение в инспекторе.
Аналогично, установите значение по умолчанию для терминала UPD
на “Continuously” (непрерывно).
Мы сделали полное решение для чтения конкретной модели датчика. В следующий раз когда вы захотите измерить растояние в метрах в вашем проекте, вам не потребуется вводить все матаматические функции для расчета значений.
Теперь вы сможете создавать аналогичные нода для десятков датчиков, разница только в математике. Обращайтесь в datasheet, чтобы сделать это.