Snippet Boxschnelle mit dem Arduino 33 nano IoT und am Laptop mit Java/Processing
(EN google-translate)
(PL google-translate)
In den Snippet-Unterkapiteln finden sich kurze, lauffähige Programme, die auf der Basis von IMU und WiFi auf dem Arduino 33 nano IoT in Kombination mit Java/Processing am PC/Laptop bestimmte nützliche Aufgaben erfüllen.
|
|
|
1. Ruhehaltung vor dem Boxstoß richtig erkennen
|

|

Bild 0-1: Orthogonale Achsen des Beschleunigungssensors bei Ardiono 33 NANO IoT.
Die Orientierung der Achsen bei obigem Bild ist so gewählt, dass der Beschleunigungssensor einen maximal positiven Wert von 100 liefert, wenn die jeweilige Achse senkrecht nach oben steht.
Eine beschleunigte Bewegung IN die jeweilige Achsrichtung resultiert bei der jeweiligen Komponente in einen POSITIVEN Beschleunigungswert.
Würde also der Arduino liegend auf dem rechten Handrücken mit zum Arm weisendem USB-Anschluss befestigt werden, so würde auf der zweiten Komponente ein maximal negativer Wert erscheinen, wenn man eine Faust mit Daumen oben macht. Dies wäre dann die zu erfassende Ruheposition.
void draw() { if(Math.abs(werte[0])<10.0 && Math.abs(werte[1])>90.0 && Math.abs(werte[2])<10.0) { background(100,255,100); } else { background(255,100,100); } ...
Code 0-1: Minimale Anpassung bei WiFi_IMU_Ardu001b, um die Ruheposition anzuzeigen.
2. Vorschnellen der Hand erfassen
|
int MODE=0; ArrayList<double[]> merker = new ArrayList<double[]>(); long Tstart=System.currentTimeMillis(); double vmax = 0.0; void draw() { if(Math.abs(werte[0])<10.0 && Math.abs(werte[1])>90.0 && Math.abs(werte[2])<10.0) { if(MODE==1) { MODE=2; Tstart=System.currentTimeMillis(); merker.clear(); } background(100,255,100); } else { background(255,100,100); } if(MODE==2 && System.currentTimeMillis() - Tstart <2000) //2 Sekunden erfassen { merker.add(new double[] {(double)(System.currentTimeMillis()-Tstart),werte[0]}); } else if(MODE==2) //auswerten { MODE=0; double v=0.0; for(int i=1;i<merker.size();i++) { double dt = 0.001*(double)(merker.get(i)[0]-merker.get(i-1)[0]); double a = 9.81*merker.get(i)[1]/100.0; v+=a*dt; if(Math.abs(v)>vmax) vmax=v; } merker.clear(); } if(MODE!=2 && vmax>0.0) { fill(0); textSize(20); text("Vmax="+vmax+"m/s",100,100); } ... //Hinzu kommt das Erfassen des Drückens der Leertaste: public void keyPressed() { if(key==' ') { MODE=1; } }
Code 0-2: Minimale Anpassung bei WiFi_IMU_Ardu001b, um die maximale Stoßgeschwindigkeit bei einer Boxbewegung zu erfassen.

Hinweise zum Quelltext:
|
Konzept State-Machine, siehe auch:
