Programmwahl durch EMG Sensor mittels Timer und Schwellen

Hallo Community! Dies ist mein erster Post in diesem Forum, ich hoffe mein Problem ist verständlich und hilfreich dargestellt. Ich bin immer offen für Veränderungs/Verbesserungsvorschläge.

Intention: Mein Plan besteht darin mittels eines EMG Sensors und einer festegelegten Schwelle ein Auswahlmechanismus für verschiedene servoansteuerungsprogramme zu schreiben.
Meine Vorstellung ist wie folgt: das Analoge Signal des EMG Sensors wird genutzt um zwischen den Programmen (z.B. 1-5) zu wählen. Dazu müsste ab der ersten Überschreitung einer festgelegten Schwelle ein Timer laufen (z.B. 3 oder 5 sek) innerhalb der laufenden Zeit werden die Kontraktionen, die die Schwelle überschreiten gezählt und auf dieser Basis das Programm gewählt. Da der umgang mit Timern bei der Arduino UI ja generell eher spärlich behandelt wird komme ich bei diesem Vorhaben an meine Grenzen. Ich hoffe bei euch Hilfe zu finden.

Bis jetzt habe ich mit folgende Gedanken gemacht:
delay() schließe ich aus da der "Stop" ja nicht meine Intention ist.
Man muss also mittels mills() den timer starten und bei erreichen der gewünschten Zeit wieder beenden.
Danach werden die "Auswahlkontraktionen" ausgewertet und über eine Hauptfunktion das gewünschte Programm aktiviert. Die Kombination aus der Zählung der Kontraktionen und dem Timer bereitet mir Schwierigkeiten. Getrennt kann ich beides recht gut einsetzen.

Ich hoffe mein Anliegen ist Verständlich. Vllt hat auch jemand eine komplett neue Idee zur Umsetzung :slight_smile:

mfg Hannes

Es wäre zuerst sinnvoll, wenn Du uns einen Link zu Deinem Sensor geben würdest und Deinen Sketch mit dem Du diesen ausliest in Codetags hier einstellst.

Gruß Tommy

Hi

Da millis() nur die Anzahl an Millisekunden seit Start zurück gibt (und bei 49,batsch Tagen überlauft), muß man den Timer nicht selber startet - man darf auch Mal Glück haben.

Wie schon geschrieben wurde: Link (klickbar) auf Deinen Sensor.
Deinen Sketch hier in Code-Tags, schön, wenn Dieser kompiliert!
Wenn Du irgend welche Libraries verwendest, sind Links zu Diesen auch nicht schlecht - wenn Diese mit der IDE mitkommen, vll die verwendete Version.

MfG

dann Folgt hier mal der Nachtrag ^^

EMG Sensor[https://www.ebay.de/i/352786665287?chn=ps&norover=1&mkevt=1&mkrid=707-134425-41852-0&mkcid=2&itemid=352786665287&targetid=860140269485&device=c&mktype=pla&googleloc=9061132&poi=&campaignid=1669295905&mkgroupid=88815387825&rlsatarget=pla-860140269485&abcId=1139676&merchantid=7364532&gclid=Cj0KCQiA1-3yBRCmARIsAN7B4H3BLKYNZtC4PSfEuA9vSRH6LJ1K5bAZmsIOaViHY4uat2rTksMEPLoaAt_xEALw_wcB]

Zum Auslesen verwende ich keine libraries sondern nur:

#define EMG_PIN analogRead (0) //sensor an Analog 0
void setup() 
{ 
//serieller Monitor 
Serial.begin(9600); 
}
void loop() 
{ 
Serial.println(analogRead(0));
//auslesen EMG sensor
}

Ok

Das Ding bringt eine analoge Spannung zwischen GND und Vs raus.
Wahrscheinlich in Abhängigkeit diverser Muskel-Aktivitäten.

Und nun?

Du wirst wohl aus dem analogem Signal irgend Etwas machen müssen, Was Du zählen kannst.

MfG

Gut: der Grundwert der EMG Messung ist bei mir ca 150. wenn ich meinen Muskel stark anspanne kommen Maximalwerte von ca. 1200 zustande. Ich lege also meine Schwelle bei 900 fest und Möchte nun die überschreitenden Peaks Zählen um eine Programmwahl zu machen. Das einzige Problem ist die Einschränkung des Zeitraumes der Zählung, da es ja sonst keine Abgeschlossene Wahl ist.

z.B.Ein Ausschlag über der Schwelle, der jetzt als "1" Gezählt werden müsste und in der Folge Programm 1 aktiviert

Also aus der Ruhestellung zählt der 1. Pik. (Pik merken, erst wenn der Wert wieder unter xyz ist kann ein neuer Pik kommen. Millis vom 1. Pik merken, Piks mitzählen und jedes mal schauen, ob die Zeitspanne vorbei ist. Wenn ja, Anzahl auswerten, alles auf Anfang und auf ein neues.

Wie lange Du die Zeit machst, musst Du selbst entscheiden/ausprobieren.

Gruß Tommy