Innholdsfortegnelse:

Bruke Complex Arts Sensor Board for å kontrollere rene data over WiFi: 4 trinn (med bilder)
Bruke Complex Arts Sensor Board for å kontrollere rene data over WiFi: 4 trinn (med bilder)

Video: Bruke Complex Arts Sensor Board for å kontrollere rene data over WiFi: 4 trinn (med bilder)

Video: Bruke Complex Arts Sensor Board for å kontrollere rene data over WiFi: 4 trinn (med bilder)
Video: Возведение перегородок санузла из блоков. Все этапы. #4 2024, November
Anonim
Bruke Complex Arts Sensor Board for å kontrollere rene data over WiFi
Bruke Complex Arts Sensor Board for å kontrollere rene data over WiFi
Bruk av Complex Arts Sensor Board for å kontrollere rene data over WiFi
Bruk av Complex Arts Sensor Board for å kontrollere rene data over WiFi

Har du noen gang ønsket å eksperimentere med gestikal kontroll? Få ting til å bevege seg med en håndbølge? Kontroller musikk med en vri på håndleddet? Denne instruksen vil vise deg hvordan!

Complex Arts Sensor Board (complexarts.net) er en allsidig mikrokontroller basert på ESP32 WROOM. Den har alle funksjonene på ESP32-plattformen, inkludert innebygd WiFi og Bluetooth, og 23 konfigurerbare GPIO-pinner. Sensorbordet har også BNO_085 IMU - en 9 DOF bevegelsesprosessor som utfører innebygde sensorfusjons- og kvarternionligninger, som gir super presis orientering, tyngdekraftvektor og lineære akselerasjonsdata. Sensorbrettet kan programmeres ved hjelp av Arduino, MicroPython eller ESP-IDF, men for denne leksjonen skal vi programmere brettet med Arduino IDE. Det er viktig å merke seg at ESP32 -modulene ikke er programmerbare fra Arduino IDE, men det er veldig enkelt å gjøre det mulig. Det er en flott opplæring her: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ som bør ta omtrent 2 minutter å fullføre. Det siste oppsettet vi trenger er driveren for USB-til-UART-brikken på sensorbrettet, som du finner her: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-drivere. Bare velg operativsystemet og installer, noe som bør ta omtrent 2 minutter til. Når det er gjort, er vi i gang!

[Denne leksjonen forutsetter ingen kjennskap til verken Arduino eller Pure Data, men den dekker ikke installasjonen av dem. Arduino finner du på aduino.cc. Pure Data finnes på puredata.info. Begge nettstedene har enkle å følge instruksjoner for installasjon og oppsett.]

Også … konseptene som er dekket i denne opplæringen, for eksempel å sette opp UDP -tilkoblinger, programmere ESP32 med Arduino og grunnleggende Pure Data -patchbygging - er byggeklosser som kan brukes på utallige prosjekter, så ikke bøy deg her når du har fikk disse konseptene ned!

Rekvisita

1. Complex Arts Sensor Board

2. Arduino IDE

3. Ren data

Trinn 1: Undersøkelse av koden:

Undersøkelse av koden
Undersøkelse av koden
Undersøkelse av koden
Undersøkelse av koden

Først skal vi se på Arduino -koden. (Kilden er tilgjengelig på https://github.com/ComplexArts/SensorBoardArduino. Det anbefales at du følger med koden mens vi går.) Vi trenger noen biblioteker, hvorav det ene ikke er et kjernearduino -bibliotek, så du må kanskje installeres. Dette prosjektet er avhengig av SparkFun_BNO080_Arduino_Library.h -filen, så hvis du ikke har det, må du gå til Sketch -> Include Library -> Manage Libraries. Skriv inn “bno080”, og biblioteket ovenfor vises. Trykk på installer.

De tre andre bibliotekene som brukes, bør leveres med Arduino som standard. Først vil vi bruke SPI -biblioteket til å kommunisere med BNO. Det er også mulig å bruke UART mellom ESP32 og BNO, men siden SparkFun allerede har et bibliotek som bruker SPI, holder vi oss til det. (Takk, SparkFun!) Inkludert SPI.h -filen lar oss velge hvilke pins og porter vi vil bruke til SPI -kommunikasjonen.

WiFi -biblioteket inneholder funksjonene som lar oss komme til et trådløst nettverk. WiFiUDP inneholder funksjonene som lar oss sende og motta data over det nettverket. De to neste linjene får oss til nettverket - skriv inn nettverksnavnet og passordet ditt. De to linjene etter det angir nettverksadressen og porten vi sender dataene våre til. I dette tilfellet vil vi bare kringkaste, noe som betyr at vi sender det til alle på nettverket vårt som lytter. Portnummeret avgjør hvem som lytter, som vi får se om litt.

Disse to neste linjene oppretter medlemmer for sine respektive klasser, slik at vi enkelt kan få tilgang til funksjonene deres senere.

Deretter tilordner vi de riktige pinnene til ESP til de respektive pinnene på BNO.

Nå setter vi opp SPI -klassemedlemmet, og setter også SPI -porthastigheten.

Til slutt kommer vi til oppsettfunksjonen. Her starter vi en seriell port slik at vi kan overvåke utgangen vår på den måten hvis vi vil. Så begynner vi WiFi. Legg merke til at programmet venter på en WiFi -tilkobling før du fortsetter. Når WiFi er tilkoblet, starter vi UDP -tilkoblingen, deretter skriver vi ut nettverksnavnet og IP -adressen vår til den serielle skjermen. Etter det starter vi SPI -porten og ser etter kommunikasjon mellom ESP og BNO. Til slutt kaller vi funksjonen "enableRotationVector (50);" ettersom vi bare vil bruke rotasjonsvektor for denne leksjonen.

Trinn 2: Resten av koden…

Resten av koden…
Resten av koden…

Før vi går til hovedløkken (), har vi en funksjon som kalles "mapFloat."

Dette er en egendefinert funksjon som vi har lagt til for å kartlegge eller skalere verdier til andre verdier. Den innebygde kartfunksjonen i Arduino tillater bare heltallskartlegging, men alle våre opprinnelige verdier fra BNO vil være mellom -1 og 1, så vi må manuelt skalere dem til verdiene vi virkelig ønsker. Ingen bekymringer, men - her er den enkle funksjonen for å gjøre nettopp det:

Nå kommer vi til hovedløkken (). Det første du vil legge merke til er en annen blokkeringsfunksjon, som den som får programmet til å vente på en nettverkstilkobling. Denne stopper til det er data fra BNO. Når vi begynner å motta disse dataene, tildeler vi de innkommende kvarternjonsverdiene til variabler med flytende punkt og skriver ut dataene til den serielle skjermen.

Nå må vi kartlegge disse verdiene.

[Et ord om UDP-kommunikasjon: data overføres over UDP i 8-biters pakker, eller verdier fra 0-255. Alt over 255 blir presset til neste pakke, og legger til verdien. Derfor må vi sørge for at det ikke er verdier over 255.]

Som nevnt tidligere har vi innkommende verdier i området -1 -1. Dette gir oss ikke mye å jobbe med, siden alt under 0 blir avskåret (eller vises som 0) og vi ikke kan gjøre tonn med verdier mellom 0 -1. Vi må først deklarere en ny variabel for å beholde vår kartlagte verdi, så tar vi den første variabelen og kartlegger den fra -1 -1 til 0 -255, og tildeler resultatet til den nye variabelen vår Nx.

Nå som vi har kartlagte data, kan vi sette sammen pakken vår. For å gjøre det, må vi deklarere en buffer for pakkedataene, og gi dem en størrelse på [50] for å sikre at alle dataene passer. Vi begynner deretter pakken med adressen og porten vi spesifiserte ovenfor, skriver bufferen og 3 verdier til pakken og avslutter deretter pakken.

Til slutt skriver vi ut våre kartlagte koordinater til den serielle skjermen. Nå er Arduino -koden ferdig! Flash koden til sensorkortet og sjekk den serielle skjermen for å kontrollere at alt fungerer som forventet. Du bør se kvaternionverdiene så vel som de tilordnede verdiene.

Trinn 3: Koble til rene data …

Koble til med rene data …
Koble til med rene data …

Nå for Pure Data! Åpne Pure Data og start en ny oppdatering (ctrl n). Lappen som vi skal lage er veldig enkel, og har bare syv objekter. Det første vi skal lage er [netreceive] -objektet. Dette er brød og smør i vår patch, som håndterer all UDP -kommunikasjon. Legg merke til at det er tre argumenter for [netreceive] -objektet; -u angir UDP, -b spesifiserer binær, og 7401 er selvfølgelig porten vi lytter til. Du kan også sende "listen 7401" -meldingen til [netreceive] for å angi porten din.

Når vi har data som kommer inn, må vi pakke den ut. Hvis vi kobler et [print] -objekt til [netrecieve], kan vi se at dataene i utgangspunktet kommer til oss som en strøm av tall, men vi vil analysere disse tallene og bruke hvert enkelt til noe annet. For eksempel kan det være lurt å bruke X-akserotasjon for å kontrollere tonehøyden til en oscillator, og Y-aksen for volum, eller en rekke andre muligheter. For å gjøre det, går datastrømmen gjennom et [pakke ut] -objekt som har tre flyter (f f f) er dets argumenter.

Nå som du er så langt, er verden din østers! Du har en trådløs kontroller som du kan bruke til å manipulere alt du vil ha i Pure Data -universet. Men stopp der! I tillegg til Rotation Vector, prøv akselerometeret eller magnetometeret. Prøv å bruke spesialfunksjonene til BNO, for eksempel "dobbelttrykk" eller "rist". Alt som trengs er å grave litt i brukerhåndbøkene (eller den neste Instructable …).

Trinn 4:

Det vi har gjort ovenfor er å sette opp kommunikasjon mellom Sensor Board og Pure Data. Hvis du vil begynne å ha mer moro, kan du koble datautgangene dine til noen oscillatorer! Spill med volumkontroll! Kanskje kontrollere noen forsinkelsestider eller reverb! verden er din østers!

Anbefalt: