kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




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.

  • Die Armbewegung, die man bei einem Boxstoß ausführt, soll automatisch auf ihre maximale Schnelligkeit hin analysiert werden.
  • Aus einer Ruheposition heraus soll ein möglichst schneller Faustschlag nach vorne ausgeführt werden.
  • Der Schlag wird in die Luft ausgeführt, ohne etwas zu treffen.
  • Die Bewegung gliedert sich somit in zwei Phasen:
  1. Einnehmen der Haltung vor dem Boxstoß.
  2. Ausführen des Boxstoßes.
  1. Die Processing-Software soll erkennen, wann die Haltung vor dem Boxstoß richtig eingenommen wurde und dann "grünes Licht" geben.
  2. Dann soll die Maximalgeschwindigkeit während des Stoßes erfasst werden und schließlich im Anwendungsfenster in Meter pro Sekunde angezeigt werden.

1. Ruhehaltung vor dem Boxstoß richtig erkennen

  • Arduino-seitig kann wieder WiFi_IMU_Ardu001b verwendet werden, vergl. Oberkapitel:
WiFi_IMU_Ardu001b.zip
  • Ausgangspunkt für das PC-seitige Programm ist WiFi_IMU_Proc001b (vergl. Oberkapitel)
Orthogonale Achsen des Beschleunigungssensors bei Ardiono 33 NANO IoT.

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

  • Um einen definierten Startzeitpunkt zu erhalten, muss man die Leertaste einmal drücken.
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.

WiFi_IMU_Proc003_BOXSNIPPET.zip -- Minimallösung zur Erfassung der Maximalgeschwindigkeit bei einer Boxbewegung.

Hinweise zum Quelltext:

  • Alle Beschleunigungswerte werden betragsmäßig erfasst, um Fehler bei Richtung und Ausrichtung der Bewegung zu tolerieren.
  • Das Programm macht sich das Konzept der state-machine (Zustands gesteuerten Maschine) zunutze.
  • Mit Drücken der Leertaste wechselt das System in MODE 1, falls die Ruhelage vorliegt.
  • Während des MODEs 2 werden kontinuierlich die Beschleunigungswerte der x-Achse kombiniert mit der aktuell vergangenen Zeit in Millisekunden erfasst.
  • Nach zwei Sekunden wird MODE 2 nach MODE 0 verlassen und vmax bestimmt.
  • Liegt vmax>0 vor und ist der MODE nicht 2 wird vmax angezeigt.

Konzept State-Machine, siehe auch:

67_Echtzeitsysteme/12_Zustandsmaschine -- Konzept State-Machine.