Оглавление:

Использование сенсорной платы Complex Arts для управления чистыми данными по Wi-Fi: 4 шага (с изображениями)
Использование сенсорной платы Complex Arts для управления чистыми данными по Wi-Fi: 4 шага (с изображениями)

Видео: Использование сенсорной платы Complex Arts для управления чистыми данными по Wi-Fi: 4 шага (с изображениями)

Видео: Использование сенсорной платы Complex Arts для управления чистыми данными по Wi-Fi: 4 шага (с изображениями)
Видео: Ты никогда не заработаешь на пикап-траке Почему? | Траковый бизнес в США | Работа в США | Кархолинг 2024, Ноябрь
Anonim
Использование сенсорной платы Complex Arts для управления чистыми данными через Wi-Fi
Использование сенсорной платы Complex Arts для управления чистыми данными через Wi-Fi
Использование платы датчиков Complex Arts для управления чистыми данными через Wi-Fi
Использование платы датчиков Complex Arts для управления чистыми данными через Wi-Fi

Вы когда-нибудь хотели поэкспериментировать с управлением жестами? Заставить вещи сдвинуться с места мановением руки? Управляйте музыкой поворотом запястья? Это руководство покажет вам, как это сделать!

Плата датчиков Complex Arts (complexarts.net) - это универсальный микроконтроллер на базе ESP32 WROOM. Он имеет все функции платформы ESP32, включая встроенный Wi-Fi и Bluetooth, а также 23 настраиваемых контакта GPIO. Плата датчика также оснащена BNO_085 IMU - процессором движения с 9 степенями свободы, который выполняет слияние встроенных датчиков и уравнения кватернионов, обеспечивая сверхточную ориентацию, вектор силы тяжести и данные о линейном ускорении. Плата датчика может быть запрограммирована с использованием Arduino, MicroPython или ESP-IDF, но в этом уроке мы будем программировать плату с помощью Arduino IDE. Важно отметить, что модули ESP32 изначально не программируются из Arduino IDE, но сделать это очень просто; здесь есть отличное руководство: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/, выполнение которого должно занять около 2 минут. Последний элемент настройки, который нам нужен, - это драйвер для микросхемы USB-to-UART на плате датчика, которую можно найти здесь: https://www.silabs.com/products/development-tools/software/usb-to -uart-мост-vcp-драйверы. Просто выберите свою ОС и установите, что займет еще около 2 минут. Как только это будет сделано, все готово!

[Этот урок не предполагает никакого знакомства ни с Arduino, ни с Pure Data, но не касается их установки. Arduino можно найти на aduino.cc. Чистые данные можно найти на puredata.info. На обоих сайтах есть простые инструкции по установке и настройке.]

Кроме того … концепции, описанные в этом руководстве, такие как настройка UDP-соединений, программирование ESP32 с помощью Arduino и создание базовых патчей Pure Data - это строительные блоки, которые можно применять для бесчисленных проектов, так что не опускайтесь здесь, когда вы получил эти концепции!

Запасы

1. Сенсорная панель Complex Arts

2. Arduino IDE

3. Чистые данные

Шаг 1. Изучение кода:

Изучение кода
Изучение кода
Изучение кода
Изучение кода

Сначала посмотрим на код Arduino. (Исходный код доступен по адресу https://github.com/ComplexArts/SensorBoardArduino. Рекомендуется, чтобы вы следили за кодом по мере продвижения.) Нам нужны некоторые библиотеки, одна из которых не является базовой библиотекой Arduino, поэтому вы может потребоваться его установка. Этот проект основан на файле SparkFun_BNO080_Arduino_Library.h, поэтому, если у вас его нет, вам нужно перейти в Sketch -> Включить библиотеку -> Управление библиотеками. Введите «bno080», и появится вышеупомянутая библиотека. Нажмите установить.

Остальные три библиотеки, которые используются, по умолчанию должны поставляться с Arduino. Во-первых, мы будем использовать библиотеку SPI для связи с BNO. Также можно использовать UART между ESP32 и BNO, но поскольку SparkFun уже имеет библиотеку, использующую SPI, мы будем придерживаться этого. (Спасибо, SparkFun!) Включение файла SPI.h позволит нам выбрать, какие контакты и порты мы хотим использовать для связи SPI.

Библиотека WiFi содержит функции, которые позволяют нам подключиться к беспроводной сети. WiFiUDP содержит функции, которые позволяют нам отправлять и получать данные по этой сети. Следующие две строки вводят нас в сеть - введите имя сети и пароль. Две строки после этого указывают сетевой адрес и порт, на который мы отправляем наши данные. В этом случае мы будем просто транслировать, то есть отправлять его всем в нашей сети, кто его слушает. Номер порта определяет, кто слушает, как мы скоро увидим.

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

Затем мы назначаем соответствующие контакты ESP соответствующим контактам на BNO.

Теперь мы настраиваем член класса SPI, а также устанавливаем скорость порта SPI.

Наконец, мы переходим к функции настройки. Здесь мы запустим последовательный порт, чтобы мы могли контролировать наш вывод таким образом, если захотим. Затем начинаем WiFi. Обратите внимание, что программа ожидает подключения к Wi-Fi, прежде чем продолжить. После подключения Wi-Fi мы начинаем UDP-соединение, затем выводим наше сетевое имя и наш IP-адрес на монитор последовательного порта. После этого мы запускаем порт SPI и проверяем связь между ESP и BNO. Наконец, мы вызываем функцию enableRotationVector (50); поскольку в этом уроке мы будем использовать только вектор вращения.

Шаг 2: Остальная часть кода…

Остальная часть Кодекса…
Остальная часть Кодекса…

Прежде чем мы перейдем к основному циклу (), у нас есть функция под названием «mapFloat».

Это настраиваемая функция, которую мы добавили для сопоставления или масштабирования значений с другими значениями. Встроенная функция карты в Arduino допускает только целочисленное сопоставление, но все наши начальные значения из BNO будут между -1 и 1, поэтому нам придется вручную масштабировать их до значений, которые нам действительно нужны. Но не беспокойтесь - вот простая функция для этого:

Теперь мы подошли к основному циклу (). Первое, что вы заметите, - это еще одна функция блокировки, например та, которая заставляет программу ждать подключения к сети. Это останавливается, пока не появятся данные от BNO. Когда мы начинаем получать эти данные, мы присваиваем входящие значения кватерниона переменным с плавающей запятой и распечатываем эти данные на последовательном мониторе.

Теперь нам нужно сопоставить эти значения.

[Несколько слов о связи UDP: данные передаются по UDP 8-битными пакетами или значениями от 0 до 255. Все, что больше 255, будет помещено в следующий пакет, увеличивая его значение. Следовательно, нам нужно убедиться, что нет значений больше 255.]

Как упоминалось ранее, у нас есть входящие значения в диапазоне от -1 до 1. Это не дает нам много работы, поскольку все, что ниже 0, будет обрезано (или отображаться как 0), и мы не сможем этого сделать. тонна со значениями от 0 до 1. Сначала мы должны объявить новую переменную для хранения нашего отображаемого значения, затем мы берем эту начальную переменную и сопоставляем ее от -1-1 до 0-255, присваивая результат нашей новой переменной с именем Nx.

Теперь, когда у нас есть сопоставленные данные, мы можем собрать наш пакет. Для этого мы должны объявить буфер для пакетных данных, задав ему размер [50], чтобы убедиться, что все данные уместятся. Затем мы начинаем пакет с адресом и портом, которые мы указали выше, записываем наш буфер и 3 значения в пакет to, затем завершаем пакет.

Наконец, мы печатаем наши сопоставленные координаты на последовательном мониторе. Теперь код Arduino готов! Запишите код на плату датчика и проверьте монитор последовательного порта, чтобы убедиться, что все работает должным образом. Вы должны увидеть значения кватернионов, а также сопоставленные значения.

Шаг 3. Подключение к Pure Data…

Подключение к Pure Data…
Подключение к Pure Data…

Теперь о чистых данных! Откройте Pure Data и запустите новый патч (ctrl n). Патч, который мы создадим, очень прост и состоит всего из семи объектов. Сначала мы создадим объект [netreceive]. Это основа нашего патча, обрабатывающего всю UDP-связь. Обратите внимание, что у объекта [netreceive] есть три аргумента; -u указывает UDP, -b указывает двоичный, а 7401, конечно же, порт, который мы слушаем. Вы также можете отправить сообщение «listen 7401» в [netreceive], чтобы указать свой порт.

Как только у нас появятся данные, нам нужно их распаковать. Если мы подключим объект [print] к [netrecieve], мы увидим, что данные изначально приходят к нам в виде потока чисел, но мы хотим проанализировать эти числа и использовать каждое для чего-то другого. Например, вы можете захотеть использовать вращение оси X для управления высотой тона осциллятора, а ось Y - для объема, или любое количество других возможностей. Для этого поток данных проходит через объект [unpack], который имеет три числа с плавающей запятой (f f f) в качестве своих аргументов.

Теперь, когда вы так далеко, мир - ваша устрица! У вас есть беспроводной контроллер, который вы можете использовать для управления чем угодно во вселенной Pure Data. Но остановись на этом! Помимо вектора вращения, попробуйте акселерометр или магнитометр. Попробуйте использовать специальные функции BNO, такие как «двойное нажатие» или «встряхивание». Все, что нужно, - это немного покопаться в руководствах пользователя (или в следующем руководстве…).

Шаг 4:

То, что мы сделали выше, - это установили связь между Sensor Board и Pure Data. Если вы хотите получить больше удовольствия, подключите свои выходные данные к каким-нибудь осцилляторам! Играйте с регулятором громкости! Может быть, контролировать время задержки или реверберацию! мир это твоя жемчужина!

Рекомендуемые: