PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : shake-control ("wie im iPhone") mit Beschleunigung



bitreacter
21.11.2008, 18:22
Hallo,
Ich bin dabei ein UserInterface für intuitive Steuerung zu entwerfen.

Das Konzept:
Ein etwa faustgroßer Steuerball, der ohne Tasten auskommt.
Die Steuerung soll möglichst intuitiv passieren und einfach gehalten sein.

Gesteuert werden sollen damit Anwendungen auf dem PC und auch über relais netzbetriebene Geräte wie Lampen, usw....

Die Murmel soll in einiger Zeit über Neigung und Schütteln einfache eingaben ermöglichen. Der Benutzer soll auf der Couch sitzen, dabei beispielsweise auf den PC zielen und Winamp bedienen.

Ich benutze:
Arduino mit ATmega168
AccSensor LIS3LV02DQ (+-2g in 3-Achsen, kommunizeirt über I2C)
(wenn der Acc funktioniert, kommen noch einige ander Sensoren dazu.)
Processing, um die Daten über USB grafisch darzustellen.
AdobeFlashCS3 (hierher sollen alle Daten später übergeben werden und über ein GUI eingestellt und eingesehen werden.

Meine erste Signalübergabe umfasst das Signal eines 3-Achsen BeschleunigungsSensors (LIS3LV02DQ).
Als ersten Test soll der Controller nur ein Signal für Links, bzw. Rechts ausgeben.

Mein Problem:
Der Sensor soll links- bzw. rechts geschüttelt werden (ähnlich wie beim iPhone) und als ausgabe den Wert über eine Schnittstelle schicken.
Als debugginghilfe habe ich im Moment 2leds angeschlossen, die leuchten wenn ein schüttler registriert wurde.
Das Signal ist aber leider noch nicht eindeutig.
--> Am anfang der Bewegung (z.B. Schwenk nach rechts) bekomme ich am anfang der Bewegung einen negativen Peak und am Ende der Bewegung einen positiven Peak.

http://picasaweb.google.de/lh/photo/udx1D6RDfzKPqzco5_sGuw
http://picasaweb.google.de/lh/photo/udx1D6RDfzKPqzco5_sGuw

Meine bisherigen Tests:
Ich habe eine kleine Anwendung in Processing geschrieben, um die Daten, die später der Rechner zur Auswertung bekommt auch grafisch darstellen zu können. Hier ist eine kleine Grafik daraus:
http://picasaweb.google.de/lh/photo/So-NP91HATX2zCMrep5cjA
http://picasaweb.google.de/lh/photo/So-NP91HATX2zCMrep5cjA
Hier werden nur lansame Neigungsänderungen aufgenommen und die Farbe ändert sich, sobald ein Schwellwert überschritten ist.

Hat jemand eine Idee wie ich das schütteln sicher detektieren könnte?!?
Bis jetzt sieht die einfache Schleife so aus:

if(x_val >= 100){
digitalWrite(ledPin_x1,HIGH);
digitalWrite(ledPin_x2,LOW);
delay(50);
} else{digitalWrite(ledPin_x1,LOW);}

if(x_val <= -100){
digitalWrite(ledPin_x2,HIGH);
digitalWrite(ledPin_x1,LOW);
delay(50);
} else{digitalWrite(ledPin_x2,LOW);}

Sie funktioniert aber eher nach dem Zufallsprinzip, weil es eher zufall ist, welcher peak die Aktion auslöst.

Um meine kreativen CodeKünste ist es nicht allzu rosig bestellt...
Also wäre ich sehr dankbar für einen Tip, der mich weiter bringt.

Es müsste z.B. der erste Peak erfasst werden und danach die Steigung auf dem Weg zum anderen Peak.
Wenn das alles erfüllt ist, so soll die eine oder die andere led leuchten.

Beste Grüße,
bitreacter

bitreacter
23.11.2008, 13:44
Ich habe das Problem inzwischen gelöst.
Wer daran interessiert ist, kann hier nachlesen:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1227208027/0