Hallo liebe Fachleute,
ich bin leider seit der Schulzeit eine absolute Formelnull (ich bitte um Nachsicht) und hoffe daher auf Eure Hilfe, eine Lösung für meine Fragestellung zu finden. Folgendes Problem - ich versuche es so detailliert wie möglich zu beschreiben:
Ich habe ein Arduinosketch, dass mir aus einem Simulatorprogramm den Wert für die gefahrene Geschwindigkeit ausliest und diesen Wert an ein Stellservo ausgibt, um damit die Geschwindigkeit anzuzeigen. Funktioniert soweit auch ganz prima.
Nun möchte ich mir aber auch die Beschleunigung anzeigen lassen, sowohl beim Beschleunigen als auch beim Abbremsen. Es ist ja so, dass Fahrzeuge immer ungleichmäßig beschleunigte Bewegungen erfahren, welche nicht so einfach wie eine gleichmäßige Beschleunigung zu berechnen ist.
Nun habe ich ja im Arduino feste Abfragezyklen, in denen jeweils eine Veränderung der Geschwindigkeit festgestellt werden kann, womit man doch die Beschleunigung berechnen könnte...
Da ich jedoch mit abstraktem Formeldenken leider nicht zurechtkomme, würde ich mich sehr freuen, wenn mir ein Fachmann auf - für einen Laien wie mich - nachvollziehbare Weise einen Weg aufzeigen könnte, wie ich diesen Beschleunigungswert aus der Geschwindigkeit für einen Abfragezyklus errechnen kann.
Möglicherweise sollte ich diese Frage vielleicht im Physikforum stellen, aber mir geht's ja auch um das Einbauen einer Formel in den Code.
Für Eure Hilfe und Eure Geduld bedanke ich mich jetzt schon sehr herzlich
Liebe Grüße
Christiane
Hier der Code für den Geschwindigkeitsservo, diesen habe ich nicht selbst entwickelt:
#include <Servo.h>
typedef enum { NONE, GOT_v } states;
states state = NONE;
unsigned int aktueller_wert;
unsigned int wert_fur_an = 1;
// Servoname
Servo geschwindigkeit;
void setup ()
{
Serial.begin (115200);
state = NONE;
geschwindigkeit.attach(9);
}
// Servo Geschwindigkeit
void Servo4(const unsigned int value)
{
geschwindigkeit.write(aktueller_wert);
}
void aktion_ausfuhren()
{
switch (state)
{
case GOT_v:
Servo4(aktueller_wert);
break;
}
aktueller_wert = 0;
}
void processIncomingByte (const byte c)
{
if (isdigit (c))
{
aktueller_wert *= 10;
aktueller_wert += c - '0';
}
else
{
aktion_ausfuhren ();
switch (c)
{
case 'v':
state = GOT_v;
break;
default:
state = NONE;
break;
}
}
}
void loop()
{
if (Serial.available())
processIncomingByte (Serial.read());
}
// basiert auf Code von Nick und Lars. Vielen Dank dafür