Innehållsförteckning:

Använda Complex Arts Sensor Board för att styra rena data över WiFi: 4 steg (med bilder)
Använda Complex Arts Sensor Board för att styra rena data över WiFi: 4 steg (med bilder)

Video: Använda Complex Arts Sensor Board för att styra rena data över WiFi: 4 steg (med bilder)

Video: Använda Complex Arts Sensor Board för att styra rena data över WiFi: 4 steg (med bilder)
Video: TVÅÖGAD KAMERA FÖRRASKAD EFTER UPPDATERING!!! 2024, November
Anonim
Använda Complex Arts Sensor Board för att styra rena data över WiFi
Använda Complex Arts Sensor Board för att styra rena data över WiFi
Använda Complex Arts Sensor Board för att styra rena data över WiFi
Använda Complex Arts Sensor Board för att styra rena data över WiFi

Har du någonsin velat experimentera med gestkontroll? Få saker att röra sig med en våg av handen? Styr musiken med en vridning av handleden? Denna instruktionsbok visar dig hur!

Complex Arts Sensor Board (complexarts.net) är en mångsidig mikrokontroller baserad på ESP32 WROOM. Den har alla funktioner på ESP32-plattformen, inklusive inbyggd WiFi och Bluetooth, och 23 konfigurerbara GPIO-stift. Sensorkortet har också BNO_085 IMU - en 9 DOF rörelseprocessor som utför inbyggda sensorfusions- och kvaternionekvationer, vilket ger superprecis orientering, tyngdkraftsvektor och linjär accelerationsdata. Sensorkortet kan programmeras med Arduino, MicroPython eller ESP-IDF, men för den här lektionen kommer vi att programmera kortet med Arduino IDE. Det är viktigt att notera att ESP32 -modulerna inte är programmerbara från Arduino IDE, men att göra det möjligt är mycket enkelt; det finns en bra handledning här: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ som bör ta cirka 2 minuter att slutföra. Den sista installationen vi behöver är drivrutinen för USB-till-UART-chipet på sensorkortet, som finns här: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-drivrutiner. Välj bara ditt operativsystem och installera, vilket bör ta cirka 2 minuter till. När det är klart är vi igång!

[Den här lektionen förutsätter ingen bekantskap med vare sig Arduino eller Pure Data, men den täcker inte deras installation. Arduino finns på aduino.cc. Ren data finns på puredata.info. Båda platserna har enkla instruktioner för installation och installation.]

Också … begreppen som täcks i den här självstudien, som att konfigurera UDP -anslutningar, programmera ESP32 med Arduino och grundläggande Pure Data -lappbyggnad - är byggstenar som kan användas för otaliga projekt, så lägg dig inte här när du väl har fick ner dessa koncept!

Tillbehör

1. Complex Arts Sensor Board

2. Arduino IDE

3. Ren data

Steg 1: Undersök koden:

Undersöker koden
Undersöker koden
Undersöker koden
Undersöker koden

Först ska vi titta på Arduino -koden. (Källan är tillgänglig på https://github.com/ComplexArts/SensorBoardArduino. Det rekommenderas att du följer med koden när vi går.) Vi behöver några bibliotek, varav ett inte är ett kärn -Arduino -bibliotek, så du kan behöva installera det. Detta projekt bygger på filen SparkFun_BNO080_Arduino_Library.h, så om du inte har det måste du gå till Sketch -> Inkludera bibliotek -> Hantera bibliotek. Skriv in "bno080" så visas biblioteket ovan. Tryck på installera.

De andra tre biblioteken som används bör levereras med Arduino som standard. Först kommer vi att använda SPI -biblioteket för att kommunicera med BNO. Det är också möjligt att använda UART mellan ESP32 och BNO, men eftersom SparkFun redan har ett bibliotek som använder SPI kommer vi att hålla fast vid det. (Tack, SparkFun!) Med SPI.h -filen kan vi välja vilka pins och portar vi vill använda för SPI -kommunikationen.

WiFi -biblioteket innehåller de funktioner som gör att vi kan komma åt ett trådlöst nätverk. WiFiUDP innehåller de funktioner som gör att vi kan skicka och ta emot data över det nätverket. De två följande raderna får oss till nätverket - ange ditt nätverksnamn och lösenord. De två raderna efter det anger nätverksadressen och porten som vi skickar våra data till. I det här fallet kommer vi bara att sända, vilket innebär att vi skickar det till alla i vårt nätverk som lyssnar. Portnumret avgör vem som lyssnar, som vi får se om lite.

Dessa två följande rader skapar medlemmar för sina respektive klasser så att vi enkelt kan komma åt deras funktioner senare.

Därefter tilldelar vi de korrekta stiften på ESP till sina respektive stift på BNO.

Nu ställer vi in SPI -klassmedlemmen och ställer också in SPI -portens hastighet.

Slutligen kommer vi till installationsfunktionen. Här startar vi en seriell port så att vi kan övervaka vår produktion på det sättet om vi vill. Sedan börjar vi WiFi. Lägg märke till att programmet väntar på en WiFi -anslutning innan det fortsätter. När WiFi är anslutet börjar vi UDP -anslutningen, skriver sedan ut vårt nätverksnamn och vår IP -adress till den seriella bildskärmen. Därefter startar vi SPI -porten och söker efter kommunikation mellan ESP och BNO. Slutligen kallar vi funktionen "enableRotationVector (50);" eftersom vi bara kommer att använda rotationsvektor för den här lektionen.

Steg 2: Resten av koden…

Resten av koden…
Resten av koden…

Innan vi går till huvudslingan () har vi en funktion som kallas "mapFloat."

Detta är en anpassad funktion som vi har lagt till för att mappa eller skala värden till andra värden. Den inbyggda kartfunktionen i Arduino tillåter bara heltalskartläggning, men alla våra initiala värden från BNO kommer att ligga mellan -1 och 1, så vi måste skala dem manuellt till de värden vi verkligen vill ha. Oroa dig dock inte - här är den enkla funktionen att göra just det:

Nu kommer vi till huvudslingan (). Det första du kommer att märka är en annan blockeringsfunktion, till exempel den som får programmet att vänta på en nätverksanslutning. Den här stannar tills det finns data från BNO. När vi börjar ta emot dessa data tilldelar vi de inkommande kvaternionsvärdena till variabler med flytande punkter och skriver ut dessa data till den seriella bildskärmen.

Nu måste vi kartlägga dessa värden.

[Ett ord om UDP-kommunikation: data överförs över UDP i 8-bitars paket, eller värden från 0-255. Allt över 255 flyttas till nästa paket, vilket ökar värdet. Därför måste vi se till att det inte finns några värden över 255.]

Som nämnts tidigare har vi inkommande värden i intervallet -1 -1. Detta ger oss inte mycket att jobba med, eftersom allt under 0 kommer att avbrytas (eller visas som 0) och vi inte kan göra ton med värden mellan 0 -1. Vi måste först deklarera en ny variabel för att hålla vårt mappade värde, sedan tar vi den initiala variabeln och mappar den från -1 -1 till 0 -255 och tilldelar resultatet till vår nya variabel som heter Nx.

Nu när vi har våra mappade data kan vi sätta ihop vårt paket. För att göra det måste vi deklarera en buffert för paketdata, vilket ger den en storlek på [50] för att se till att alla data passar. Vi börjar sedan paketet med adressen och porten som vi angav ovan, skriver vår buffert och tre värden till paketet och avslutar sedan paketet.

Slutligen skriver vi ut våra mappade koordinater till den seriella bildskärmen. Nu är Arduino -koden klar! Flasha koden till sensorkortet och kontrollera den seriella bildskärmen för att se till att allt fungerar som förväntat. Du bör se såväl kvaternionsvärden som mappade värden.

Steg 3: Ansluta till ren data …

Ansluter med ren data …
Ansluter med ren data …

Nu för Pure Data! Öppna Pure Data och starta en ny patch (ctrl n). Patchen som vi kommer att skapa är mycket enkel, med bara sju objekt. Det första vi ska skapa är [netreceive] -objektet. Detta är brödet och smöret i vår patch, som hanterar all UDP -kommunikation. Lägg märke till att det finns tre argument för [netreceive] -objektet; -u anger UDP, -b anger binär och 7401 är naturligtvis porten som vi lyssnar på. Du kan också skicka meddelandet”lyssna 7401” till [netreceive] för att ange din port.

När vi har fått in data måste vi packa upp den. Om vi ansluter ett [print] -objekt till [netrecieve] kan vi se att data från början kommer till oss som en ström av siffror, men vi vill analysera dessa siffror och använda var och en för något annat. Till exempel kan du använda X-axelrotation för att styra tonhöjden för en oscillator och Y-axeln för volym eller ett antal andra möjligheter. För att göra det går dataströmmen genom ett [packa upp] -objekt som har tre flottörer (f f f) är dess argument.

Nu när du är så långt är världen din ostron! Du har en trådlös handkontroll som du kan använda för att manipulera allt du vill i Pure Data -universum. Men sluta där! Förutom Rotation Vector, prova accelerometern eller magnetometern. Försök att använda BNO: s specialfunktioner, till exempel "dubbelknackning" eller "skaka". Allt som krävs är att gräva lite i användarmanualerna (eller nästa instruerbara …).

Steg 4:

Det vi har gjort ovan är att konfigurera kommunikation mellan sensorkortet och Pure Data. Om du vill börja ha mer kul, koppla in dina datautgångar till några oscillatorer! Spela med volymkontroll! Kanske kontrollera några fördröjningstider eller reverb! världen är din ostron!

Rekommenderad: