Spisu treści:

Używanie płytki czujników Complex Arts do kontroli czystych danych przez Wi-Fi: 4 kroki (ze zdjęciami)
Używanie płytki czujników Complex Arts do kontroli czystych danych przez Wi-Fi: 4 kroki (ze zdjęciami)

Wideo: Używanie płytki czujników Complex Arts do kontroli czystych danych przez Wi-Fi: 4 kroki (ze zdjęciami)

Wideo: Używanie płytki czujników Complex Arts do kontroli czystych danych przez Wi-Fi: 4 kroki (ze zdjęciami)
Wideo: Wtyczki Waves — kompletny przewodnik 2024, Listopad
Anonim
Używanie płytki czujników Complex Arts do kontroli czystych danych przez Wi-Fi
Używanie płytki czujników Complex Arts do kontroli czystych danych przez Wi-Fi
Używanie płytki czujników Complex Arts do kontroli czystych danych przez Wi-Fi
Używanie płytki czujników Complex Arts do kontroli czystych danych przez Wi-Fi

Czy kiedykolwiek chciałeś poeksperymentować z kontrolą gestów? Wprawiać rzeczy w ruch machnięciem ręki? Kontroluj muzykę jednym ruchem nadgarstka? Ten Instruktaż pokaże Ci, jak!

Complex Arts Sensor Board (complexarts.net) to wszechstronny mikrokontroler oparty na ESP32 WROOM. Posiada wszystkie funkcje platformy ESP32, w tym wbudowane WiFi i Bluetooth oraz 23 konfigurowalne piny GPIO. Sensor Board zawiera również BNO_085 IMU – procesor ruchu o rozdzielczości 9 DOF, który wykonuje wbudowane równania fuzji czujników i kwaternionów, zapewniając bardzo precyzyjną orientację, wektor grawitacyjny i dane przyspieszenia liniowego. Płytkę czujnika można zaprogramować za pomocą Arduino, MicroPython lub ESP-IDF, ale w tej lekcji będziemy programować płytkę za pomocą Arduino IDE. Należy zauważyć, że moduły ESP32 nie są programowalne natywnie z Arduino IDE, ale umożliwienie tego jest bardzo proste; jest tu świetny samouczek: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/, który powinien zająć około 2 minut. Ostatnim elementem konfiguracji, którego potrzebujemy, jest sterownik układu USB-to-UART na płytce czujnika, który można znaleźć tutaj: https://www.silabs.com/products/development-tools/software/usb-to -uart-bridge-vcp-sterowniki. Po prostu wybierz swój system operacyjny i zainstaluj, co powinno zająć około 2 minut. Gdy to zrobisz, możemy iść!

[Ta lekcja nie zakłada znajomości Arduino ani Pure Data, jednak nie obejmuje ich instalacji. Arduino można znaleźć na stronie aduino.cc. Czyste dane można znaleźć na puredata.info. Obie strony mają łatwe do wykonania instrukcje dotyczące instalacji i konfiguracji.]

Ponadto… koncepcje omówione w tym samouczku, takie jak konfigurowanie połączeń UDP, programowanie ESP32 za pomocą Arduino i podstawowe budowanie łatek Pure Data – są elementami konstrukcyjnymi, które można zastosować w niezliczonych projektach, więc nie pochylaj się tutaj, gdy już to zrobisz mam te koncepcje!

Kieszonkowe dzieci

1. Płytka czujników złożonych sztuk

2. IDE Arduino

3. Czyste dane

Krok 1: Sprawdzenie kodu:

Badanie Kodeksu
Badanie Kodeksu
Badanie Kodeksu
Badanie Kodeksu

Najpierw przyjrzymy się kodowi Arduino. (Źródło jest dostępne pod adresem https://github.com/ComplexArts/SensorBoardArduino. Zaleca się, aby śledzić wraz z kodem, gdy idziemy.) Potrzebujemy kilku bibliotek, z których jedna nie jest podstawową biblioteką Arduino, więc ty może trzeba go zainstalować. Ten projekt opiera się na pliku SparkFun_BNO080_Arduino_Library.h, więc jeśli go nie masz, musisz przejść do Szkic -> Dołącz bibliotekę -> Zarządzaj bibliotekami. Wpisz „bno080”, a pojawi się wspomniana biblioteka. Naciśnij zainstaluj.

Pozostałe trzy używane biblioteki powinny być domyślnie dostarczane z Arduino. Najpierw użyjemy biblioteki SPI do komunikacji z BNO. Możliwe jest również użycie UART między ESP32 a BNO, ale ponieważ SparkFun ma już bibliotekę wykorzystującą SPI, będziemy się tego trzymać. (Dzięki, SparkFun!) Dołączenie pliku SPI.h pozwoli nam wybrać, które piny i porty chcemy wykorzystać do komunikacji SPI.

Biblioteka WiFi zawiera funkcje, które pozwalają nam uzyskać dostęp do sieci bezprzewodowej. WiFiUDP zawiera funkcje, które pozwalają nam wysyłać i odbierać dane przez tę sieć. Kolejne dwie linijki przekierowują nas do sieci – wpisz nazwę sieci i hasło. Dwie kolejne linie określają adres sieciowy i port, do którego wysyłamy nasze dane. W tym przypadku po prostu będziemy nadawać, co oznacza, że wyślemy to do każdego w naszej sieci, kto słucha. Numer portu określa, kto nasłuchuje, jak zobaczymy za chwilę.

Kolejne dwie linie tworzą członków dla odpowiednich klas, dzięki czemu możemy później łatwo uzyskać dostęp do ich funkcji.

Następnie przypisujemy odpowiednie piny ESP do odpowiednich pinów na BNO.

Teraz konfigurujemy członka klasy SPI, ustawiając również prędkość portu SPI.

Wreszcie dochodzimy do funkcji konfiguracji. Tutaj uruchomimy port szeregowy, abyśmy mogli monitorować nasze wyjście w ten sposób, jeśli chcemy. Następnie zaczynamy WiFi. Zauważ, że program czeka na połączenie Wi-Fi przed kontynuowaniem. Po podłączeniu WiFi rozpoczynamy połączenie UDP, a następnie drukujemy naszą nazwę sieci i adres IP na monitorze szeregowym. Następnie uruchamiamy port SPI i sprawdzamy komunikację między ESP a BNO. Na koniec wywołujemy funkcję „enableRotationVector(50);” ponieważ w tej lekcji będziemy używać tylko wektora rotacji.

Krok 2: Reszta Kodeksu…

Reszta Kodeksu…
Reszta Kodeksu…

Zanim przejdziemy do głównej pętli(), mamy funkcję o nazwie „mapFloat”.

Jest to funkcja niestandardowa, którą dodaliśmy w celu mapowania lub skalowania wartości do innych wartości. Wbudowana funkcja map w Arduino umożliwia tylko mapowanie liczb całkowitych, ale wszystkie nasze początkowe wartości z BNO będą mieścić się w zakresie od -1 do 1, więc będziemy musieli ręcznie przeskalować je do wartości, których naprawdę chcemy. Nie martw się jednak - oto prosta funkcja, która właśnie to robi:

Teraz dochodzimy do głównej pętli(). Pierwszą rzeczą, którą zauważysz, jest kolejna funkcja blokująca, taka jak ta, która powoduje, że program czeka na połączenie sieciowe. Ten zatrzymuje się, dopóki nie pojawią się dane z BNO. Kiedy zaczynamy otrzymywać te dane, przypisujemy przychodzące wartości kwaternionów do zmiennych zmiennoprzecinkowych i drukujemy te dane na monitorze szeregowym.

Teraz musimy zmapować te wartości.

[Słowo o komunikacji UDP: dane są przesyłane przez UDP w pakietach 8-bitowych lub wartościach od 0-255. Wszystko powyżej 255 zostanie przesłane do następnego pakietu, zwiększając jego wartość. Dlatego musimy upewnić się, że nie ma wartości powyżej 255.]

Jak wspomnieliśmy wcześniej, mamy nadchodzące wartości z zakresu -1 – 1. To nie daje nam wiele pracy, ponieważ wszystko poniżej 0 zostanie odcięte (lub pojawi się jako 0) i nie możemy tego zrobić tonę o wartościach od 0 do 1. Najpierw musimy zadeklarować nową zmienną do przechowywania naszej mapowanej wartości, następnie bierzemy tę początkową zmienną i mapujemy ją od -1 – 1 do 0 – 255, przypisując wynik do naszej nowej zmiennej o nazwie Nx.

Teraz, gdy mamy już zmapowane dane, możemy złożyć nasz pakiet. Aby to zrobić, musimy zadeklarować bufor dla danych pakietu, nadając mu rozmiar [50], aby upewnić się, że wszystkie dane będą pasować. Następnie zaczynamy pakiet od adresu i portu, które określiliśmy powyżej, zapisujemy nasz bufor i 3 wartości do pakietu do, a następnie kończymy pakiet.

Na koniec wypisujemy nasze zmapowane współrzędne na monitorze szeregowym. Teraz kod Arduino jest gotowy! Prześlij kod do płytki czujnika i sprawdź monitor szeregowy, aby upewnić się, że wszystko działa zgodnie z oczekiwaniami. Powinieneś zobaczyć wartości kwaternionów, a także wartości mapowane.

Krok 3: Łączenie z czystymi danymi…

Łączenie z czystymi danymi…
Łączenie z czystymi danymi…

Teraz dla czystych danych! Otwórz Pure Data i rozpocznij nową łatkę (ctrl n). Łatka, którą stworzymy, jest bardzo prosta, ma tylko siedem obiektów. Pierwszym, który stworzymy, jest obiekt [netreceive]. To jest chleb powszedni naszej łatki, obsługującej całą komunikację UDP. Zauważ, że istnieją trzy argumenty dla obiektu [netreceive]; -u określa UDP, -b binarne, a 7401 to oczywiście port, na którym nasłuchujemy. Możesz również wysłać wiadomość „listen 7401” do [netreceive], aby określić swój port.

Gdy mamy już dane, musimy je rozpakować. Jeśli połączymy obiekt [print] z [netrecieve], możemy zobaczyć, że dane początkowo przychodzą do nas jako strumień liczb, ale chcemy przeanalizować te liczby i użyć każdej z nich do czegoś innego. Na przykład możesz chcieć użyć obrotu osi X do kontrolowania wysokości oscylatora, a osi Y do głośności lub dowolnej liczby innych możliwości. Aby to zrobić, strumień danych przechodzi przez obiekt [rozpakuj], którego argumentami są trzy pływaki (ff f).

Teraz, gdy jesteś tak daleko, świat jest twoją ostrygą! Masz kontroler bezprzewodowy, którego możesz użyć do manipulowania wszystkim, co chcesz w uniwersum Pure Data. Ale zatrzymaj się tam! Oprócz wektora obrotu wypróbuj akcelerometr lub magnetometr. Spróbuj użyć specjalnych funkcji BNO, takich jak „podwójne dotknięcie” lub „wstrząśnij”. Wystarczy trochę pogrzebać w podręcznikach użytkownika (lub następnym Instruktażowym…).

Krok 4:

To, co zrobiliśmy powyżej, to skonfigurowanie komunikacji między płytą czujnika a czystymi danymi. Jeśli chcesz zacząć się bawić, podłącz wyjścia danych do niektórych oscylatorów! Graj z regulacją głośności! Może kontrolować czasy opóźnienia lub pogłos! Świat stoi przed Tobą otworem!

Zalecana: