Съдържание:

Използване на сложна сензорна дъска за изкуство за контрол на чисти данни през WiFi: 4 стъпки (със снимки)
Използване на сложна сензорна дъска за изкуство за контрол на чисти данни през WiFi: 4 стъпки (със снимки)

Видео: Използване на сложна сензорна дъска за изкуство за контрол на чисти данни през WiFi: 4 стъпки (със снимки)

Видео: Използване на сложна сензорна дъска за изкуство за контрол на чисти данни през WiFi: 4 стъпки (със снимки)
Видео: Настя и сборник весёлых историй 2024, Ноември
Anonim
Използване на сложна сензорна дъска за изкуство за контрол на чисти данни през WiFi
Използване на сложна сензорна дъска за изкуство за контрол на чисти данни през WiFi
Използване на сложна сензорна дъска за изкуство за контрол на чисти данни през WiFi
Използване на сложна сензорна дъска за изкуство за контрол на чисти данни през WiFi

Искали ли сте някога да експериментирате с жестов контрол? Накарайте нещата да се движат с махване на ръка? Контролирате музиката с завъртане на китката си? Тази инструкция ще ви покаже как!

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

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

Също така … концепциите, обхванати в този урок, като например настройване на UDP връзки, програмиране на ESP32 с Arduino и основно изграждане на кръпка за чисти данни - са градивни елементи, които могат да бъдат приложени за безброй проекти, така че не се навеждайте тук, след като сте свалих тези концепции!

Консумативи

1. Сложна сензорна дъска за изкуства

2. Arduino IDE

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

Стъпка 1: Разглеждане на кода:

Разглеждане на кодекса
Разглеждане на кодекса
Разглеждане на кодекса
Разглеждане на кодекса

Първо, ще разгледаме кода на Arduino. (Източникът е достъпен на https://github.com/ComplexArts/SensorBoardArduino. Препоръчително е да следвате заедно с кода, докато вървим.) Нуждаем се от някои библиотеки, една от които не е основна библиотека на Arduino, така че може да се наложи да го инсталирате. Този проект разчита на файла SparkFun_BNO080_Arduino_Library.h, така че ако нямате такъв, ще трябва да отидете на Sketch -> Include Library -> Manage Libraries. Въведете „bno080“и горепосочената библиотека ще се появи. Натиснете install.

Другите три библиотеки, които се използват, трябва да идват с Arduino по подразбиране. Първо, ние ще използваме SPI библиотеката за комуникация с BNO. Възможно е също да използвате UART между ESP32 и BNO, но тъй като SparkFun вече има библиотека, която използва SPI, ще се придържаме към това. (Благодаря, SparkFun!) Включването на файла SPI.h ще ни позволи да изберем кои пинове и портове искаме да използваме за SPI комуникация.

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

Следващите два реда създават членове за съответните им класове, така че по -късно можем лесно да получим достъп до техните функции.

След това присвояваме правилните щифтове на ESP на съответните им щифтове на BNO.

Сега настройваме члена на класа SPI, също така задаваме скоростта на порта SPI.

Накрая стигаме до функцията за настройка. Тук ще стартираме сериен порт, за да можем да наблюдаваме изхода си по този начин, ако искаме. След това започваме WiFi. Обърнете внимание, че програмата изчаква WiFi връзка, преди да продължи. След като WiFi е свързан, започваме 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 to packet, след което приключваме пакета.

И накрая, ние отпечатваме нашите картографирани координати на серийния монитор. Сега кодът на Arduino е готов! Прехвърлете кода към сензорната платка и проверете серийния монитор, за да се уверите, че всичко работи според очакванията. Трябва да видите стойностите на кватерниона, както и нанесените стойности.

Стъпка 3: Свързване с чисти данни …

Свързване с чисти данни…
Свързване с чисти данни…

Сега за Pure Data! Отворете Pure Data и стартирайте нов пластир (ctrl n). Кръпката, която ще създадем, е много проста, има само седем обекта. Първото, което ще създадем, е [netreceive] обектът. Това е хлябът и маслото на нашия пластир, който обработва цялата UDP комуникация. Забележете, че има три аргумента за [netreceive] обекта; -u посочва UDP, -b определя двоичен, а 7401 е разбира се портът, на който слушаме. Можете също да изпратите съобщението „listen 7401“до [netreceive], за да посочите вашия порт.

След като получим данни, трябва да ги разопаковаме. Ако свържем [печат] обект с [netrecieve], можем да видим, че данните първоначално идват при нас като поток от числа, но искаме да анализираме тези числа и да използваме всеки един за нещо различно. Например, може да искате да използвате въртене по оста X, за да контролирате височината на осцилатора, и оста Y за обем, или произволен брой други възможности. За да направите това, потокът от данни преминава през [разопаковайте] обект, който има три поплавка (f f f) са неговите аргументи.

Сега, когато сте толкова далеч, светът е вашата стрида! Имате безжичен контролер, който можете да използвате, за да манипулирате всичко, което искате във вселената Pure Data. Но спрете дотук! Освен Rotation Vector, опитайте акселерометъра или магнитометъра. Опитайте да използвате специални функции на BNO, като например „двойно докосване“или „разклащане“. Всичко, което е необходимо, е да се поразровите малко в ръководствата за потребителя (или следващите инструкции …).

Стъпка 4:

Това, което направихме по -горе, е да създадем комуникация между сензорната платка и чистите данни. Ако искате да започнете да се забавлявате повече, свържете вашите изходи за данни към някои осцилатори! Играйте с контрол на силата на звука! Може би да контролирате някои времена на забавяне или реверберация! светът е твоята стрида!

Препоръчано: