Cuprins:

Utilizarea plăcii senzorului complex Arts pentru a controla datele pure prin WiFi: 4 pași (cu imagini)
Utilizarea plăcii senzorului complex Arts pentru a controla datele pure prin WiFi: 4 pași (cu imagini)

Video: Utilizarea plăcii senzorului complex Arts pentru a controla datele pure prin WiFi: 4 pași (cu imagini)

Video: Utilizarea plăcii senzorului complex Arts pentru a controla datele pure prin WiFi: 4 pași (cu imagini)
Video: CuriosITy 58 - 150 de laptop-uri, Dacia Bigster, MBUX, Trump din nou, Probleme Tesla, Cyberpunk 2077 2024, Noiembrie
Anonim
Utilizarea plăcii senzorului complex Arts pentru a controla datele pure prin WiFi
Utilizarea plăcii senzorului complex Arts pentru a controla datele pure prin WiFi
Folosirea plăcii senzorului complex Arts pentru a controla datele pure prin WiFi
Folosirea plăcii senzorului complex Arts pentru a controla datele pure prin WiFi

Ai dorit vreodată să experimentezi controlul gestual? Faceți lucrurile să se miște cu o mișcare a mâinii? Controlați muzica cu o răsucire a încheieturii mâinii? Acest instructable vă va arăta cum!

Placa senzorului Complex Arts (complexarts.net) este un microcontroler versatil bazat pe ESP32 WROOM. Are toate caracteristicile platformei ESP32, inclusiv WiFi și Bluetooth încorporate și 23 de pini GPIO configurabili. Placa senzorului are, de asemenea, BNO_085 IMU - un procesor de mișcare 9 DOF care efectuează fuziunea senzorilor și ecuații de cuaternion, oferind orientare super precisă, vector de gravitație și date de accelerație liniară. Placa senzorului poate fi programată folosind Arduino, MicroPython sau ESP-IDF, dar pentru această lecție vom programa placa cu Arduino IDE. Este important să rețineți că modulele ESP32 nu sunt programabile în mod nativ din Arduino IDE, dar a face posibil acest lucru este foarte simplu; există un tutorial minunat aici: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ care ar trebui să dureze aproximativ 2 minute pentru a finaliza. Ultima configurație de care avem nevoie este driverul pentru cipul USB-la-UART de pe placa senzorului, care poate fi găsit aici: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-drivers. Alegeți sistemul de operare și instalați-l, care ar trebui să dureze încă 2 minute. Odată ce ați terminat, suntem bine să plecăm!

[Această lecție nu presupune nicio familiaritate cu Arduino sau Pure Data, însă nu va acoperi instalarea acestora. Arduino poate fi găsit la aduino.cc. Pure Data poate fi găsit la puredata.info. Ambele site-uri au instrucțiuni ușor de urmat pentru instalare și configurare.]

De asemenea … conceptele acoperite în acest tutorial, cum ar fi configurarea conexiunilor UDP, programarea ESP32 cu Arduino și construirea de bază a patch-urilor Pure Data - sunt blocuri care pot fi aplicate pentru nenumărate proiecte, așa că nu vă aplecați aici după ce ați terminat am dat jos aceste concepte!

Provizii

1. Placă senzoră pentru arte complexe

2. Arduino IDE

3. Date pure

Pasul 1: examinarea codului:

Examinarea codului
Examinarea codului
Examinarea codului
Examinarea codului

Mai întâi, ne vom uita la codul Arduino. (Sursa este disponibilă la https://github.com/ComplexArts/SensorBoardArduino. Este recomandat să urmați codul pe măsură ce mergem.) Avem nevoie de niște biblioteci, dintre care una nu este o bibliotecă Arduino de bază, deci poate fi necesar să-l instalați. Acest proiect se bazează pe fișierul SparkFun_BNO080_Arduino_Library.h, deci dacă nu aveți acest lucru, va trebui să accesați Sketch -> Include Library -> Manage Libraries. Tastați „bno080” și va apărea biblioteca menționată mai sus. Apăsați instalare.

Celelalte trei biblioteci utilizate ar trebui să vină în mod implicit cu Arduino. În primul rând, vom folosi biblioteca SPI pentru a comunica cu BNO. De asemenea, este posibil să utilizați UART între ESP32 și BNO, dar din moment ce SparkFun are deja o bibliotecă care utilizează SPI, vom rămâne cu asta. (Mulțumesc, SparkFun!) Includerea fișierului SPI.h ne va permite să selectăm ce pini și porturi dorim să folosim pentru comunicarea SPI.

Biblioteca WiFi conține funcțiile care ne permit să accesăm o rețea fără fir. WiFiUDP conține funcțiile care ne permit să trimitem și să primim date prin acea rețea. Următoarele două linii ne aduc în rețea - introduceți numele și parola rețelei. Cele două linii după aceea specifică adresa de rețea și portul către care trimitem datele noastre. În acest caz, vom transmite doar, ceea ce înseamnă că îl vom trimite oricui din rețeaua noastră care ascultă. Numărul portului determină cine ascultă, așa cum vom vedea în scurt timp.

Aceste două rânduri următoare creează membri pentru clasele lor respective, astfel încât să le putem accesa cu ușurință funcțiile ulterior.

Apoi, atribuim pinii corespunzători ai ESP pinilor lor respectivi de pe BNO.

Acum configurăm membrul clasei SPI, setând și viteza portului SPI.

În cele din urmă ajungem la funcția de configurare. Aici vom începe un port serial, astfel încât să putem monitoriza rezultatele noastre în acest fel, dacă dorim. Apoi începem WiFi. Observați că programul așteaptă o conexiune WiFi înainte de a continua. Odată ce WiFi este conectat, începem conexiunea UDP, apoi imprimăm numele rețelei și adresa IP pe monitorul serial. După aceea pornim portul SPI și verificăm dacă există comunicare între ESP și BNO. În sfârșit, numim funcția „enableRotationVector (50);” deoarece vom folosi doar vectorul de rotație pentru această lecție.

Pasul 2: Restul Codului …

Restul Codului …
Restul Codului …

Înainte de a merge la bucla principală (), avem o funcție numită „mapFloat”.

Aceasta este o funcție personalizată pe care am adăugat-o pentru a mapa, sau a scala, valorile la alte valori. Funcția de hartă încorporată în Arduino permite doar maparea întregi, dar toate valorile noastre inițiale de la BNO vor fi cuprinse între -1 și 1, deci va trebui să le scalăm manual la valorile pe care ni le dorim cu adevărat. Nu vă faceți griji, totuși - iată funcția simplă de a face exact acest lucru:

Acum ajungem la bucla principală (). Primul lucru pe care îl veți observa este o altă funcție de blocare, cum ar fi cea care face programul să aștepte o conexiune la rețea. Acesta se oprește până când există date de la BNO. Când începem să primim acele date, atribuim valorile de cuaternion primite variabilelor în virgulă mobilă și le imprimăm pe monitorul serial.

Acum trebuie să mapăm aceste valori.

[Un cuvânt despre comunicarea UDP: datele sunt transferate prin UDP în pachete de 8 biți sau valori de la 0 la 255. Orice peste 255 va fi împins la următorul pachet, adăugând valoarea acestuia. Prin urmare, trebuie să ne asigurăm că nu există valori peste 255.]

Așa cum am menționat anterior, avem valori de intrare în intervalul -1 - 1. Acest lucru nu ne oferă foarte multe lucruri, deoarece orice sub 0 va fi întrerupt (sau va apărea ca 0) și nu putem face o tonă cu valori cuprinse între 0 - 1. Mai întâi trebuie să declarăm o nouă variabilă pentru a păstra valoarea noastră mapată, apoi luăm acea variabilă inițială și o mapăm de la -1 - 1 la 0 - 255, atribuind rezultatul noii noastre variabile numite Nx.

Acum că avem datele noastre cartografiate, ne putem pune pachetul împreună. Pentru a face acest lucru, trebuie să declarăm un tampon pentru datele pachetului, oferindu-i o dimensiune de [50] pentru a ne asigura că toate datele se vor potrivi. Apoi începem pachetul cu adresa și portul pe care le-am specificat mai sus, scriem tamponul nostru și 3 valori în pachet, apoi încheiem pachetul.

În cele din urmă, imprimăm coordonatele noastre mapate pe monitorul serial. Acum, codul Arduino este terminat! Introduceți codul pe placa senzorului și verificați monitorul serial pentru a vă asigura că totul funcționează conform așteptărilor. Ar trebui să vedeți valorile cuaternionului, precum și valorile mapate.

Pasul 3: Conectarea cu date pure …

Conectarea cu date pure …
Conectarea cu date pure …

Acum pentru Pure Data! Deschideți Pure Data și începeți un nou patch (ctrl n). Patch-ul pe care îl vom crea este foarte simplu, având doar șapte obiecte. Primul pe care îl vom crea este obiectul [netreceive]. Aceasta este pâinea și untul patch-ului nostru, gestionând toate comunicările UDP. Observați că există trei argumente pentru obiectul [netreceive]; -u specifică UDP, -b specifică binar, iar 7401 este, desigur, portul pe care ascultăm. De asemenea, puteți trimite mesajul „ascultați 7401” către [netreceive] pentru a specifica portul.

Odată ce primim date, trebuie să le despachetăm. Dacă conectăm un obiect [print] la [netrecieve], putem vedea că datele ne vin inițial ca un flux de numere, dar vrem să analizăm aceste numere și să le folosim pentru ceva diferit. De exemplu, poate doriți să utilizați rotația axei X pentru a controla pasul unui oscilator și axa Y pentru volum sau orice alt număr de alte posibilități. Pentru a face acest lucru, fluxul de date trece printr-un obiect [despacheta] care are trei flotări (f f f) este argumentul său.

Acum, că ești atât de departe, lumea este strida ta! Aveți un controler wireless pe care îl puteți folosi pentru a manipula orice doriți în universul Pure Data. Dar oprește-te aici! În afară de Rotation Vector, încercați accelerometrul sau magnetometrul. Încercați să utilizați funcții speciale ale BNO, cum ar fi „atingere dublă” sau „agitare”. Tot ce trebuie este să introduceți puțin manualele de utilizare (sau următorul instructabil …).

Pasul 4:

Ceea ce am făcut mai sus este configurarea comunicării între placa senzorului și Pure Data. Dacă doriți să începeți să vă distrați mai mult, conectați ieșirile de date la unele oscilatoare! Joacă cu controlul volumului! Poate controlați niște timpi de întârziere sau reverb! lumea este stridia ta!

Recomandat: