Table des matières:

Utilisation de la carte Complex Arts Sensor pour contrôler les données pures via le WiFi : 4 étapes (avec images)
Utilisation de la carte Complex Arts Sensor pour contrôler les données pures via le WiFi : 4 étapes (avec images)

Vidéo: Utilisation de la carte Complex Arts Sensor pour contrôler les données pures via le WiFi : 4 étapes (avec images)

Vidéo: Utilisation de la carte Complex Arts Sensor pour contrôler les données pures via le WiFi : 4 étapes (avec images)
Vidéo: Mohamed Merah, l'histoire d'un enfant de banlieue devenu l'ennemi public n°1 2024, Novembre
Anonim
Utilisation de la carte Complex Arts Sensor pour contrôler les données pures via le Wi-Fi
Utilisation de la carte Complex Arts Sensor pour contrôler les données pures via le Wi-Fi
Utilisation de la carte Complex Arts Sensor pour contrôler les données pures via le Wi-Fi
Utilisation de la carte Complex Arts Sensor pour contrôler les données pures via le Wi-Fi

Avez-vous déjà eu envie d'expérimenter le contrôle gestuel ? Faire bouger les choses d'un geste de la main ? Contrôler la musique avec une torsion de votre poignet ? Ce Instructable va vous montrer comment !

Le Complex Arts Sensor Board (complexarts.net) est un microcontrôleur polyvalent basé sur l'ESP32 WROOM. Il possède toutes les fonctionnalités de la plate-forme ESP32, y compris le WiFi et le Bluetooth intégrés, et 23 broches GPIO configurables. La carte de capteur comprend également l'IMU BNO_085 - un processeur de mouvement à 9 degrés de liberté qui exécute des équations de fusion de capteur et de quaternion embarquées, fournissant une orientation, un vecteur de gravité et des données d'accélération linéaire extrêmement précis. La carte de capteur peut être programmée à l'aide d'Arduino, de MicroPython ou d'ESP-IDF, mais pour cette leçon, nous allons programmer la carte avec l'IDE Arduino. Il est important de noter que les modules ESP32 ne sont pas programmables nativement à partir de l'IDE Arduino, mais rendre cela possible est très simple; il y a un excellent tutoriel ici: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ qui devrait prendre environ 2 minutes. Le dernier élément de configuration dont nous avons besoin est le pilote de la puce USB vers UART sur la carte du capteur, qui peut être trouvé ici: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-drivers. Choisissez simplement votre système d'exploitation et installez, ce qui devrait prendre environ 2 minutes de plus. Une fois cela fait, c'est parti !

[Cette leçon ne suppose aucune familiarité avec Arduino ou Pure Data, mais elle ne couvrira pas leur installation. Arduino peut être trouvé sur aduino.cc. Les données pures peuvent être trouvées sur puredata.info. Les deux sites ont des instructions faciles à suivre pour l'installation et la configuration.]

De plus… les concepts abordés dans ce didacticiel, tels que la configuration de connexions UDP, la programmation de l'ESP32 avec Arduino et la création de correctifs Pure Data de base - sont des blocs de construction qui peuvent être appliqués pour d'innombrables projets, alors ne vous penchez pas ici une fois que vous avez a compris ces concepts !

Fournitures

1. Carte de capteur d'arts complexes

2. IDE Arduino

3. Données pures

Étape 1: Examen du code:

Examen du code
Examen du code
Examen du code
Examen du code

Tout d'abord, nous allons examiner le code Arduino. (La source est disponible sur https://github.com/ComplexArts/SensorBoardArduino. Il est recommandé de suivre le code au fur et à mesure.) Nous avons besoin de bibliothèques, dont l'une n'est pas une bibliothèque Arduino de base, donc vous peut-être besoin de l'installer. Ce projet repose sur le fichier SparkFun_BNO080_Arduino_Library.h, donc si vous ne l'avez pas, vous devrez aller dans Sketch -> Inclure la bibliothèque -> Gérer les bibliothèques. Tapez "bno080" et la bibliothèque mentionnée ci-dessus apparaîtra. Appuyez sur installer.

Les trois autres bibliothèques utilisées doivent être livrées avec Arduino par défaut. Dans un premier temps, nous utiliserons la bibliothèque SPI pour communiquer avec le BNO. Il est également possible d'utiliser UART entre l'ESP32 et le BNO, mais étant donné que SparkFun a déjà une bibliothèque qui utilise SPI, nous nous en tiendrons à cela. (Merci, SparkFun !) L'inclusion du fichier SPI.h nous permettra de sélectionner les broches et les ports que nous souhaitons utiliser pour la communication SPI.

La bibliothèque WiFi contient les fonctions qui nous permettent d'accéder à un réseau sans fil. WiFiUDP contient les fonctions qui nous permettent d'envoyer et de recevoir des données sur ce réseau. Les deux lignes suivantes nous mettent sur le réseau – entrez votre nom de réseau et votre mot de passe. Les deux lignes qui suivent spécifient l'adresse réseau et le port vers lesquels nous envoyons nos données. Dans ce cas, nous allons simplement diffuser, ce qui signifie l'envoyer à toute personne de notre réseau qui écoute. Le numéro de port détermine qui écoute, comme nous le verrons dans un instant.

Ces deux lignes suivantes créent des membres pour leurs classes respectives afin que nous puissions facilement accéder à leurs fonctions plus tard.

Ensuite, nous attribuons les broches appropriées de l'ESP à leurs broches respectives sur le BNO.

Maintenant, nous configurons le membre de classe SPI, en définissant également la vitesse du port SPI.

Enfin, nous arrivons à la fonction de configuration. Ici, nous allons démarrer un port série afin que nous puissions surveiller notre sortie de cette façon si nous le voulons. Ensuite, nous commençons le WiFi. Notez que le programme attend une connexion WiFi avant de continuer. Une fois le WiFi connecté, nous commençons la connexion UDP, puis imprimons notre nom de réseau et notre adresse IP sur le moniteur série. Après cela, nous démarrons le port SPI et vérifions la communication entre l'ESP et le BNO. Enfin, nous appelons la fonction "enableRotationVector(50);" car nous n'utiliserons que le vecteur de rotation pour cette leçon.

Étape 2: Le reste du code…

Le reste du code…
Le reste du code…

Avant de passer à la boucle principale (), nous avons une fonction appelée "mapFloat".

Il s'agit d'une fonction personnalisée que nous avons ajoutée afin de mapper, ou de mettre à l'échelle, des valeurs à d'autres valeurs. La fonction de carte intégrée dans Arduino n'autorise que le mappage d'entiers, mais toutes nos valeurs initiales du BNO seront comprises entre -1 et 1, nous devrons donc les mettre à l'échelle manuellement aux valeurs que nous voulons vraiment. Pas de soucis, cependant - voici la fonction simple pour faire exactement cela:

Venons-en maintenant à la boucle principale(). La première chose que vous remarquerez est une autre fonction de blocage, comme celle qui fait attendre le programme pour une connexion réseau. Celui-ci s'arrête jusqu'à ce qu'il y ait des données du BNO. Lorsque nous commençons à recevoir ces données, nous attribuons les valeurs de quaternions entrantes à des variables à virgule flottante et imprimons ces données sur le moniteur série.

Maintenant, nous devons mapper ces valeurs.

[Un mot sur la communication UDP: les données sont transférées via UDP par paquets de 8 bits, ou valeurs de 0 à 255. Tout ce qui dépasse 255 sera poussé vers le prochain paquet, ajoutant à sa valeur. Par conséquent, nous devons nous assurer qu'il n'y a pas de valeurs supérieures à 255.]

Comme mentionné précédemment, nous avons des valeurs entrantes comprises entre -1 et 1. Cela ne nous donne pas beaucoup de travail, car tout ce qui est inférieur à 0 sera coupé (ou apparaîtra comme 0) et nous ne pouvons pas le faire. une tonne avec des valeurs comprises entre 0 et 1. Nous devons d'abord déclarer une nouvelle variable pour contenir notre valeur mappée, puis nous prenons cette variable initiale et la mappons de -1 - 1 à 0 - 255, en affectant le résultat à notre nouvelle variable appelée Nx.

Maintenant que nous avons nos données mappées, nous pouvons assembler notre paquet. Pour ce faire, nous devons déclarer un tampon pour les données du paquet, en lui donnant une taille de [50] pour s'assurer que toutes les données conviendront. Nous commençons ensuite le paquet avec l'adresse et le port que nous avons spécifiés ci-dessus, écrivons notre tampon et 3 valeurs dans le paquet à, puis terminons le paquet.

Enfin, nous imprimons nos coordonnées cartographiées sur le moniteur série. Le code Arduino est maintenant terminé ! Flashez le code sur la carte du capteur et vérifiez le moniteur série pour vous assurer que tout fonctionne comme prévu. Vous devriez voir les valeurs des quaternions ainsi que les valeurs mappées.

Étape 3: Connexion avec des données pures…

Connexion avec des données pures…
Connexion avec des données pures…

Maintenant, pour les données pures ! Ouvrez Pure Data et démarrez un nouveau patch (ctrl n). Le patch que nous allons créer est très simple, n'ayant que sept objets. Le premier que nous allons créer est l'objet [netreceive]. C'est le pain et le beurre de notre patch, gérant toute la communication UDP. Notez qu'il y a trois arguments pour l'objet [netreceive]; le -u spécifie UDP, le -b spécifie binaire, et 7401 est bien sûr le port sur lequel nous écoutons. Vous pouvez également envoyer le message « listen 7401 » à [netreceive] pour spécifier votre port.

Une fois que nous avons des données entrantes, nous devons les décompresser. Si nous connectons un objet [print] à [netrecieve], nous pouvons voir que les données nous parviennent initialement sous la forme d'un flux de nombres, mais nous voulons analyser ces nombres et utiliser chacun pour quelque chose de différent. Par exemple, vous pouvez utiliser la rotation de l'axe X pour contrôler la hauteur d'un oscillateur et l'axe Y pour le volume, ou tout autre nombre d'autres possibilités. Pour ce faire, le flux de données passe par un objet [unpack] qui a trois flottants (f f f) sont ses arguments.

Maintenant que vous êtes si loin, le monde est à vous ! Vous disposez d'un contrôleur sans fil que vous pouvez utiliser pour manipuler tout ce que vous voulez dans l'univers Pure Data. Mais arrêtez-vous là ! Outre Rotation Vector, essayez l'accéléromètre ou le magnétomètre. Essayez d'utiliser des fonctions spéciales du BNO telles que « double tapotement » ou « secouer ». Il suffit de creuser un peu dans les manuels d'utilisation (ou le prochain Instructable…).

Étape 4:

Ce que nous avons fait ci-dessus, c'est de configurer la communication entre la carte de capteur et Pure Data. Si vous voulez commencer à vous amuser davantage, connectez vos sorties de données à des oscillateurs ! Jouez avec le contrôle du volume ! Peut-être contrôler des temps de retard ou de réverbération ! le monde est ton coquillage!

Conseillé: