Inhoudsopgave:
- Benodigdheden
- Stap 1: De code onderzoeken:
- Stap 2: De rest van de code…
- Stap 3: Verbinden met pure data…
- Stap 4:
Video: Het Complex Arts-sensorbord gebruiken om pure gegevens via wifi te besturen - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
Heb je ooit willen experimenteren met gebarencontrole? Met een handbeweging dingen laten bewegen? Muziek bedienen met een draai van je pols? Dit Instructable zal je laten zien hoe!
Het Complex Arts Sensor Board (complexarts.net) is een veelzijdige microcontroller op basis van de ESP32 WROOM. Het heeft alle functies van het ESP32-platform, inclusief ingebouwde WiFi en Bluetooth, en 23 configureerbare GPIO-pinnen. Het sensorbord bevat ook de BNO_085 IMU - een 9 DOF-bewegingsprocessor die ingebouwde sensorfusie- en quaternionvergelijkingen uitvoert, en superprecieze oriëntatie, zwaartekrachtvector en lineaire versnellingsgegevens levert. Het sensorbord kan worden geprogrammeerd met Arduino, MicroPython of de ESP-IDF, maar voor deze les zullen we het bord programmeren met de Arduino IDE. Het is belangrijk op te merken dat de ESP32-modules niet native programmeerbaar zijn vanuit de Arduino IDE, maar dat mogelijk maken is heel eenvoudig; er is een geweldige tutorial hier: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/ die ongeveer 2 minuten duurt om te voltooien. Het laatste stukje setup dat we nodig hebben, is de driver voor de USB-naar-UART-chip op de Sensor Board, die hier te vinden is: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-stuurprogramma's. Kies gewoon uw besturingssysteem en installeer het, wat nog ongeveer 2 minuten zou duren. Als dat klaar is, zijn we klaar om te gaan!
[Deze les veronderstelt geen bekendheid met Arduino of Pure Data, maar de installatie ervan wordt niet behandeld. Arduino is te vinden op aduino.cc. Pure Data is te vinden op puredata.info. Beide sites hebben eenvoudig te volgen instructies voor installatie en configuratie.]
Ook… de concepten die in deze tutorial worden behandeld, zoals het opzetten van UDP-verbindingen, het programmeren van de ESP32 met Arduino en het eenvoudig bouwen van Pure Data-patches - zijn bouwstenen die voor talloze projecten kunnen worden toegepast, dus stop hier niet als je eenmaal hebt heb deze concepten naar beneden gehaald!
Benodigdheden
1. Sensorbord voor complexe kunsten
2. Arduino-IDE
3. Pure gegevens
Stap 1: De code onderzoeken:
Eerst kijken we naar de Arduino-code. (De bron is beschikbaar op https://github.com/ComplexArts/SensorBoardArduino. Het wordt aanbevolen dat u de code volgt terwijl we gaan.) We hebben enkele bibliotheken nodig, waarvan er één geen kern-Arduino-bibliotheek is, dus u moet het mogelijk worden geïnstalleerd. Dit project is gebaseerd op het bestand SparkFun_BNO080_Arduino_Library.h, dus als je dat niet hebt, moet je naar Sketch -> Bibliotheek opnemen -> Bibliotheken beheren gaan. Typ “bno080” in en de eerder genoemde bibliotheek zal verschijnen. Druk op installeren.
De andere drie bibliotheken die worden gebruikt, moeten standaard met Arduino worden geleverd. Allereerst gebruiken we de SPI-bibliotheek om met de BNO te communiceren. Het is ook mogelijk om UART tussen de ESP32 en de BNO te gebruiken, maar aangezien SparkFun al een bibliotheek heeft die SPI gebruikt, houden we het daarbij. (Bedankt, SparkFun!) Door het SPI.h-bestand op te nemen, kunnen we selecteren welke pinnen en poorten we willen gebruiken voor de SPI-communicatie.
De wifi-bibliotheek bevat de functies waarmee we op een draadloos netwerk kunnen komen. WiFiUDP bevat de functies waarmee we gegevens over dat netwerk kunnen verzenden en ontvangen. De volgende twee regels brengen ons op het netwerk - voer uw netwerknaam en wachtwoord in. De twee regels daarna specificeren het netwerkadres en de poort waarnaar we onze gegevens verzenden. In dit geval zenden we het gewoon uit, wat betekent dat het wordt verzonden naar iedereen op ons netwerk die luistert. Het poortnummer bepaalt wie er luistert, zoals we straks zullen zien.
Deze volgende twee regels maken leden voor hun respectievelijke klassen, zodat we later gemakkelijk toegang kunnen krijgen tot hun functies.
Vervolgens wijzen we de juiste pinnen van de ESP toe aan hun respectievelijke pinnen op de BNO.
Nu hebben we het SPI-klasselid ingesteld en ook de SPI-poortsnelheid ingesteld.
Eindelijk komen we bij de setup-functie. Hier starten we een seriële poort, zodat we onze uitvoer op die manier kunnen controleren als we dat willen. Dan beginnen we met wifi. Merk op dat het programma wacht op een WiFi-verbinding voordat het verder gaat. Zodra WiFi is aangesloten, beginnen we met de UDP-verbinding en drukken vervolgens onze netwerknaam en ons IP-adres af op de seriële monitor. Daarna starten we de SPI-poort en controleren op communicatie tussen de ESP en de BNO. Ten slotte noemen we de functie "enableRotationVector(50);" aangezien we voor deze les alleen de rotatievector zullen gebruiken.
Stap 2: De rest van de code…
Voordat we naar de hoofdlus() gaan, hebben we een functie genaamd "mapFloat".
Dit is een aangepaste functie die we hebben toegevoegd om waarden toe te wijzen aan of te schalen naar andere waarden. De ingebouwde kaartfunctie in Arduino staat alleen integer mapping toe, maar al onze initiële waarden van de BNO zullen tussen -1 en 1 liggen, dus we zullen ze handmatig moeten schalen naar de waarden die we echt willen. Maar maak je geen zorgen - hier is de eenvoudige functie om precies dat te doen:
Nu komen we bij de hoofdlus(). Het eerste dat opvalt, is een andere blokkeerfunctie, zoals degene die het programma laat wachten op een netwerkverbinding. Deze stopt totdat er gegevens van de BNO zijn. Wanneer we die gegevens beginnen te ontvangen, wijzen we de binnenkomende quaternionwaarden toe aan drijvende-kommavariabelen en printen we die gegevens naar de seriële monitor.
Nu moeten we die waarden in kaart brengen.
[Een woord over UDP-communicatie: gegevens worden overgedragen via UDP in 8-bits pakketten, of waarden van 0-255. Alles boven de 255 wordt naar het volgende pakket gepusht, wat bijdraagt aan de waarde ervan. Daarom moeten we ervoor zorgen dat er geen waarden boven 255 zijn.]
Zoals eerder vermeld, hebben we inkomende waarden in het bereik van -1 - 1. Dit geeft ons niet veel om mee te werken, omdat alles onder 0 wordt afgesneden (of wordt weergegeven als 0) en we kunnen niet een ton met waarden tussen 0 - 1. We moeten eerst een nieuwe variabele declareren om onze toegewezen waarde te behouden, dan nemen we die initiële variabele en brengen deze in kaart van -1 - 1 tot 0 - 255, en wijzen het resultaat toe aan onze nieuwe variabele genaamd Nx.
Nu we onze in kaart gebrachte gegevens hebben, kunnen we ons pakket samenstellen. Om dat te doen, moeten we een buffer declareren voor de pakketgegevens, met een grootte van [50] om er zeker van te zijn dat alle gegevens passen. We beginnen het pakket dan met het adres en de poort die we hierboven hebben gespecificeerd, schrijven onze buffer en 3 waarden naar het pakket naar en beëindigen het pakket.
Ten slotte printen we onze toegewezen coördinaten naar de seriële monitor. Nu is de Arduino-code klaar! Flash de code naar het sensorbord en controleer de seriële monitor om er zeker van te zijn dat alles werkt zoals verwacht. U zou zowel de quaternion-waarden als de toegewezen waarden moeten zien.
Stap 3: Verbinden met pure data…
Nu voor pure data! Open Pure Data en start een nieuwe patch (ctrl n). De patch die we gaan maken is heel eenvoudig, met slechts zeven objecten. De eerste die we gaan maken, is het object [netreceive]. Dit is het brood en de boter van onze patch, die alle UDP-communicatie afhandelt. Merk op dat er drie argumenten zijn voor het [netreceive] object; de -u specificeert UDP, de -b specificeert binair, en 7401 is natuurlijk de poort waarnaar we luisteren. U kunt ook het bericht "listen 7401" naar [netreceive] sturen om uw poort te specificeren.
Zodra er gegevens binnenkomen, moeten we deze uitpakken. Als we een [print]-object verbinden met [netrecieve], kunnen we zien dat de gegevens in eerste instantie naar ons toe komen als een stroom getallen, maar we willen die getallen ontleden en elk voor iets anders gebruiken. U kunt bijvoorbeeld rotatie op de X-as gebruiken om de toonhoogte van een oscillator te regelen, en de Y-as voor het volume, of een aantal andere mogelijkheden. Om dat te doen, gaat de datastroom door een [uitpakken] object met drie floats (f f f) zijn de argumenten.
Nu je zo ver bent, is de wereld jouw oester! Je hebt een draadloze controller die je kunt gebruiken om alles te manipuleren wat je wilt in het Pure Data-universum. Maar stop daar! Probeer naast Rotation Vector ook de accelerometer of de magnetometer. Probeer speciale functies van de BNO te gebruiken, zoals “dubbeltikken” of “schudden”. Het enige dat nodig is, is een beetje graven in de gebruikershandleidingen (of de volgende Instructable…).
Stap 4:
Wat we hierboven hebben gedaan, is de communicatie tussen het Sensor Board en Pure Data opzetten. Als je meer plezier wilt hebben, sluit dan je data-uitgangen aan op een aantal oscillatoren! Speel met volumeregeling! Misschien wat vertragingstijden of reverb regelen! de wereld is jouw oester!
Aanbevolen:
Maak mooie plots van live Arduino-gegevens (en sla de gegevens op in Excel): 3 stappen
Maak mooie plots van live Arduino-gegevens (en sla de gegevens op in Excel): we spelen allemaal graag met onze plotterfunctie in de Arduino IDE. Hoewel het nuttig kan zijn voor basistoepassingen, worden de gegevens gewist naarmate meer punten worden toegevoegd en het is niet bijzonder aangenaam voor de ogen. De Arduino IDE-plotter werkt niet
Raspberry Pi Oled-klok Bekijk het, hoor het en voel het: 5 stappen (met afbeeldingen)
Raspberry Pi Oled Clock Watch It Hear It and Feel It: dit is een slimme klok die de tijd op een OLED-display weergeeft en je kunt ook de tijd horen op verschillende tijdsintervallen die hulpvol zijn voor blinden en het verandert ook de led-kleur met de tijd zoals licht in de schemering licht in de avond wordt oranje naar geel en houdt van t
Schrijf het ! Maak het ! Deel het!: 4 stappen
Schrijf het ! Maak het ! Deel het!: Mijn leerlingen hebben Lego gebruikt om creativiteit toe te voegen aan hun schrijven, de organisatie van het schrijven en om hun werk digitaal te presenteren met hun familie en met hun leeftijdsgenoten in de klas
Hoe muziek te krijgen van BIJNA ELKE (Haha) website (zolang je het kunt horen, kun je het krijgen Ok prima als het in Flash is ingesloten, kun je dat misschien niet) BEWERKT !!!!! Info toegevoegd: 4 stappen
Hoe muziek te krijgen van BIJNA ELKE (Haha) website (zolang je het kunt horen, kun je het krijgen … Ok prima als het in Flash is ingesloten, kun je dat misschien niet) BEWERKT !!!!! Toegevoegde info: als je ooit naar een website gaat en een nummer speelt dat je leuk vindt en wilt, dan is hier de instructie voor jou, niet mijn schuld als je iets verknoeit (de enige manier waarop het zal gebeuren is als je dingen begint te verwijderen zonder reden )ik heb muziek kunnen krijgen voor
Waterdichte luidsprekers die drijven - "Het drijft, het draagt en het rockt de noten!": 7 stappen (met afbeeldingen)
Waterdichte luidsprekers die drijven - "It Floats, It Totes and It Rocks the Notes!": Dit waterdichte luidsprekerproject is geïnspireerd op vele reizen naar de Gila-rivier in Arizona (en SNL's "I'm on a Boat!" ). We zullen de rivier afdrijven of lijnen aan de kust bevestigen zodat onze drijvers vlak bij onze camping blijven. Iedereen he