Sommario:

Utilizzo della scheda sensore Complex Arts per controllare i dati puri tramite WiFi: 4 passaggi (con immagini)
Utilizzo della scheda sensore Complex Arts per controllare i dati puri tramite WiFi: 4 passaggi (con immagini)

Video: Utilizzo della scheda sensore Complex Arts per controllare i dati puri tramite WiFi: 4 passaggi (con immagini)

Video: Utilizzo della scheda sensore Complex Arts per controllare i dati puri tramite WiFi: 4 passaggi (con immagini)
Video: Corso Home Assistant: gli strumenti per sviluppatori, creiamo entità template 2024, Luglio
Anonim
Utilizzo della scheda sensore Complex Arts per controllare i dati puri tramite WiFi
Utilizzo della scheda sensore Complex Arts per controllare i dati puri tramite WiFi
Utilizzo della scheda sensore Complex Arts per controllare i dati puri tramite WiFi
Utilizzo della scheda sensore Complex Arts per controllare i dati puri tramite WiFi

Hai mai desiderato sperimentare il controllo gestuale? Far muovere le cose con un gesto della mano? Controllare la musica con una rotazione del polso? Questo Instructable ti mostrerà come!

La Complex Arts Sensor Board (complexarts.net) è un versatile microcontrollore basato su ESP32 WROOM. Ha tutte le funzionalità della piattaforma ESP32, inclusi WiFi e Bluetooth integrati e 23 pin GPIO configurabili. La Sensor Board include anche l'IMU BNO_085, un processore di movimento a 9 DOF che esegue la fusione del sensore integrato e le equazioni dei quaternioni, fornendo dati di orientamento, vettore di gravità e accelerazione lineare estremamente precisi. La Sensor Board può essere programmata usando Arduino, MicroPython o ESP-IDF, ma per questa lezione programmeremo la scheda con l'IDE Arduino. È importante notare che i moduli ESP32 non sono programmabili nativamente dall'IDE di Arduino, ma renderlo possibile è molto semplice; c'è un ottimo tutorial qui: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ che dovrebbe richiedere circa 2 minuti per essere completato. L'ultima parte della configurazione di cui abbiamo bisogno è il driver per il chip USB-to-UART sulla Sensor Board, che può essere trovato qui: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-drivers. Scegli il tuo sistema operativo e installalo, che dovrebbe richiedere circa 2 minuti in più. Fatto ciò, siamo a posto!

[Questa lezione non presuppone alcuna familiarità con Arduino o Pure Data, tuttavia non coprirà la loro installazione. Arduino può essere trovato su aduino.cc. Pure Data può essere trovato su puredata.info. Entrambi i siti hanno istruzioni facili da seguire per l'installazione e la configurazione.]

Inoltre… i concetti trattati in questo tutorial, come l'impostazione di connessioni UDP, la programmazione di ESP32 con Arduino e la creazione di patch Pure Data di base, sono elementi costitutivi che possono essere applicati per innumerevoli progetti, quindi non abbassarti qui una volta che hai buttati giù questi concetti!

Forniture

1. Scheda sensore per arti complesse

2. Arduino IDE

3. Dati puri

Passaggio 1: esame del codice:

Esame del codice
Esame del codice
Esame del codice
Esame del codice

Per prima cosa, esamineremo il codice Arduino. (La fonte è disponibile su https://github.com/ComplexArts/SensorBoardArduino. Si consiglia di seguire il codice mentre procediamo.) Abbiamo bisogno di alcune librerie, una delle quali non è una libreria Arduino di base, quindi tu potrebbe essere necessario installarlo. Questo progetto si basa sul file SparkFun_BNO080_Arduino_Library.h, quindi se non lo hai, dovrai andare su Schizzo -> Includi libreria -> Gestisci librerie. Digitare “bno080” e apparirà la suddetta libreria. Premi Installa.

Le altre tre librerie utilizzate dovrebbero essere fornite con Arduino per impostazione predefinita. Innanzitutto, utilizzeremo la libreria SPI per comunicare con il BNO. È anche possibile utilizzare UART tra ESP32 e BNO, ma poiché SparkFun ha già una libreria che utilizza SPI, continueremo a farlo. (Grazie, SparkFun!) L'inclusione del file SPI.h ci consentirà di selezionare quali pin e porte vogliamo utilizzare per la comunicazione SPI.

La libreria WiFi contiene le funzioni che ci consentono di accedere a una rete wireless. WiFiUDP contiene le funzioni che ci consentono di inviare e ricevere dati su quella rete. Le prossime due righe ci portano sulla rete: inserisci il nome e la password della tua rete. Le due righe successive specificano l'indirizzo di rete e la porta a cui stiamo inviando i nostri dati. In questo caso, trasmetteremo semplicemente, il che significa inviarlo a chiunque sulla nostra rete stia ascoltando. Il numero di porta determina chi sta ascoltando, come vedremo tra poco.

Queste due righe successive creano membri per le rispettive classi in modo che possiamo accedere facilmente alle loro funzioni in seguito.

Successivamente, assegniamo i pin corretti dell'ESP ai rispettivi pin sul BNO.

Ora impostiamo il membro della classe SPI, impostando anche la velocità della porta SPI.

Infine arriviamo alla funzione di configurazione. Qui, avvieremo una porta seriale in modo da poter monitorare il nostro output in questo modo, se lo desideriamo. Quindi iniziamo il WiFi. Notare che il programma attende una connessione WiFi prima di procedere. Una volta connesso il WiFi, iniziamo la connessione UDP, quindi stampiamo il nostro nome di rete e il nostro indirizzo IP sul monitor seriale. Successivamente avviamo la porta SPI e controlliamo la comunicazione tra ESP e BNO. Infine, chiamiamo la funzione "enableRotationVector(50);" poiché utilizzeremo solo il vettore di rotazione per questa lezione.

Passaggio 2: il resto del codice…

Il resto del codice…
Il resto del codice…

Prima di andare al ciclo principale(), abbiamo una funzione chiamata "mapFloat".

Questa è una funzione personalizzata che abbiamo aggiunto per mappare o ridimensionare i valori su altri valori. La funzione di mappa integrata in Arduino consente solo la mappatura di interi, ma tutti i nostri valori iniziali dal BNO saranno compresi tra -1 e 1, quindi dovremo ridimensionarli manualmente ai valori che vogliamo veramente. Nessun problema, però: ecco la semplice funzione per farlo:

Ora arriviamo al ciclo principale(). La prima cosa che noterai è un'altra funzione di blocco, come quella che fa attendere il programma per una connessione di rete. Questo si ferma finché non ci sono dati dal BNO. Quando iniziamo a ricevere quei dati, assegniamo i valori dei quaternioni in entrata alle variabili in virgola mobile e stampiamo quei dati sul monitor seriale.

Ora dobbiamo mappare quei valori.

[Una parola sulla comunicazione UDP: i dati vengono trasferiti su UDP in pacchetti a 8 bit o valori da 0-255. Tutto ciò che supera 255 verrà inviato al pacchetto successivo, aggiungendone il valore. Pertanto, dobbiamo assicurarci che non ci siano valori superiori a 255.]

Come accennato in precedenza, abbiamo valori in entrata nell'intervallo -1 – 1. Questo non ci dà molto su cui lavorare, poiché qualsiasi cosa al di sotto di 0 verrà tagliata (o mostrata come 0) e non possiamo farlo una tonnellata con valori compresi tra 0 – 1. Dobbiamo prima dichiarare una nuova variabile per contenere il nostro valore mappato, quindi prendiamo quella variabile iniziale e la mappiamo da -1 – 1 a 0 – 255, assegnando il risultato alla nostra nuova variabile chiamata Nx.

Ora che abbiamo i nostri dati mappati, possiamo mettere insieme il nostro pacchetto. Per fare ciò, dobbiamo dichiarare un buffer per i dati del pacchetto, assegnandogli una dimensione di [50] per assicurarci che tutti i dati si adattino. Quindi iniziamo il pacchetto con l'indirizzo e la porta che abbiamo specificato sopra, scriviamo il nostro buffer e 3 valori nel pacchetto, quindi terminiamo il pacchetto.

Infine, stampiamo le nostre coordinate mappate sul monitor seriale. Ora il codice Arduino è fatto! Invia il codice alla scheda del sensore e controlla il monitor seriale per assicurarti che tutto funzioni come previsto. Dovresti vedere i valori dei quaternioni così come i valori mappati.

Passaggio 3: connessione con dati puri…

Connessione con dati puri…
Connessione con dati puri…

Ora per Pure Data! Apri Pure Data e avvia una nuova patch (ctrl n). La patch che creeremo è molto semplice, avendo solo sette oggetti. Il primo che creeremo è l'oggetto [netreceive]. Questo è il pane quotidiano della nostra patch, che gestisce tutte le comunicazioni UDP. Nota che ci sono tre argomenti per l'oggetto [netreceive]; -u specifica UDP, -b specifica binario e 7401 è ovviamente la porta su cui stiamo ascoltando. Puoi anche inviare il messaggio "listen 7401" a [netreceive] per specificare la tua porta.

Una volta ricevuti i dati, dobbiamo decomprimerli. Se colleghiamo un oggetto [print] a [netrecieve], possiamo vedere che i dati inizialmente ci arrivano come un flusso di numeri, ma vogliamo analizzare quei numeri e usarli ciascuno per qualcosa di diverso. Ad esempio, potresti voler utilizzare la rotazione dell'asse X per controllare l'intonazione di un oscillatore e l'asse Y per il volume o qualsiasi altra possibilità. Per fare ciò, il flusso di dati passa attraverso un oggetto [unpack] che ha tre float (f f f) sono i suoi argomenti.

Ora che sei così lontano, il mondo è la tua ostrica! Hai un controller wireless che puoi usare per manipolare tutto ciò che vuoi nell'universo di Pure Data. Ma fermati qui! Oltre al vettore di rotazione, prova l'accelerometro o il magnetometro. Prova a utilizzare funzioni speciali del BNO come "doppio tap" o "shake". Tutto ciò che serve è scavare un po' nei manuali dell'utente (o nel prossimo Instructable…).

Passaggio 4:

Quello che abbiamo fatto sopra è impostare la comunicazione tra la Sensor Board e Pure Data. Se vuoi iniziare a divertirti di più, collega le tue uscite dati ad alcuni oscillatori! Gioca con il controllo del volume! Forse controlla alcuni tempi di ritardo o riverbero! il mondo è la tua ostrica!

Consigliato: