Gestenerkennung mit APDS-9960

Begonnen von joginet, 21 März 2018, 22:27:01

Vorheriges Thema - Nächstes Thema

joginet

Hallo Forum,

Für alle, die das Teil nicht kennen - ich bin im Netz auf eine ganz einfache Gestenerkennung gestossen:

https://www.youtube.com/watch?v=d8txEBNaTw0

Hab's gerade nachgebaut - funktioniert bestens. Für den Sensor APDS-9960 habe ich 8,99€ ausgegeben.

An FHEM angebunden habe ich das ganze so, wie ich es auch für meine Sprachsteuerung mit Arduino und Movishield gemacht habe:
Arduino an einen PI, Pseudo-Jeelink-Device, FHEM2FHEM. Hab's hier beschrieben:

https://forum.fhem.de/index.php/topic,83787.msg764246.html#msg764246

Der Beispielsketch der Sensor-Library liefert die Events
"UNKNOWNCODE" gefolgt von "UP","DOWN","LEFT","RIGHT","NEAR" oder "FAR" - je nach Handbewegung.

Darauf kann ein DOIF triggern:

define LightstripsAus DOIF ([myArduino1:state] eq "UNKNOWNCODE DOWN")(set HUEDevice6 off)

Ich habe zu Testzwecken mal Hand links/rechts  = Stehlampe an/aus und Hand hoch/runter = Lightstrips an/aus angelegt.
Hier ein schnelles Video dazu:

https://www.bramborka.com/fp/gesture.mp4

Damit lassen sich bestimmt tolle Dinge anstellen  :)

Gruß, Jochen 

Das angehängte Bild zeigt die "quick-and-dirty"-Version, der Sensor ist das Teil am Ende des IDE-Kabels.
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

LuBeDa

Hallo,

ich suche noch nach einem Treiber mit dem man die Gestensteuerung als Eingabedevice für X-Windows nutzen kann. Quasi als Maus-Ersatz.

Einsatzzweck bei mir wäre: SqueezboxLite auf einem Raspberry Pi mit 2.8" Display und Gestensteuerung statt Touch.

Habe aber leider noch keinen Treiber gefunden.

Ludger


joginet

Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi

LuBeDa

Zitat von: joginet am 22 März 2018, 15:38:52
ist das hier evt. etwas für Dich?

Nicht schlecht! Werde ich am Wochenende nachbauen.  :D


joginet

#4
Die Squeezebox-Geschichte hat mich spontan zu einem kleinen und ganz trivialen "Versuchsaufbau" inspiriert  :)

Ich habe im setup-Teil des Gesten-Sketches zwei Variablen cud und clr (soll heissen: counter up/down bzw. counter links/rechts)
sowie zwei Strings "UD" und "LR" (für up-down und left-right) angelegt:

int cud =0;
int clr =0;
String S1 ="UD";
String S2 ="LR";


Dann im loop-Teil:


// Handgeste hoch-runter

case DIR_UP:
cud = cud+1;
if (cud >5) {
cud=5;
}
Serial.println(S1+cud);
break;
case DIR_DOWN:
cud =cud-1;
if (cud <0) {
cud=0;
}
Serial.println(S1+cud);
break;

// Handgeste links-rechts

case DIR_LEFT:
clr = clr-1;
if (clr <0) {
clr=5;
}
Serial.println(S2+clr);
break;
case DIR_RIGHT:
clr = clr+1;
if (clr >5) {
clr=0;
}
Serial.println(S2+clr);
break;


Die Handbewegungen hoch runter werden also in der Variable "cud" hoch bzw. runtergezählt. Im Beispiel ist bei "5" nach oben und "0" nach unten Schluss.
Bei Handbewegung links/rechts wird in "clr" gezählt, bei "<0" springt die Variable auf "5" und bei ">5" wieder auf "0"

Der Arduinio gibt bei Hand rauf/runter also String S1+cud aus, also z.B. "UNKNOWNCODE UD4".
Bei Hand links/trechts entsprechend String S2+clr, also z.B. "UNKNOWNCODE LR3".

Jetzt kommen die DOIFs im FHEM:

Hand links/rechts "winkt "die Sender oder playlisten meines players "Arbeitszimmer" durch:

define Senderwahl0 DOIF ([myArduino1:state] eq "UNKNOWNCODE LR0") (set Arbeitszimmer playlist play latina)
define Senderwahl1 DOIF ([myArduino1:state] eq "UNKNOWNCODE LR1") (set Arbeitszimmer playlist play Radio538)
define Senderwahl2 DOIF ([myArduino1:state] eq "UNKNOWNCODE LR2") (set Arbeitszimmer playlist play NDR2)
...


und die rauf/runter Handbewegung steuert die Lautstärke:

define Lautstaerke0 DOIF ([myArduino1:state] eq "UNKNOWNCODE UD0") (set Arbeitszimmer volume 10)
define Lautstaerke1 DOIF ([myArduino1:state] eq "UNKNOWNCODE UD1") (set Arbeitszimmer volume 20)
define Lautstaerke2 DOIF ([myArduino1:state] eq "UNKNOWNCODE UD2") (set Arbeitszimmer volume 30)
...


Funktioniert prima. Der Zustand "near/far" könnte sogar noch den player an/ausschalten.

Ich habe mir gerade mal ein 20x4 Display und ein passendes Gehäuse bestellt,
damit kann dann der Sendername und die Lautstärke angezeigt werden.
Dank WLAN kann dieses Squeezebox-Bedienteil überall im Haus aufgestellt werden.

Das ganze könnte z.B. auch den TV steuern. Oder Hue-Farben "durchwinken"...

Gruß, Jochen

Edit:
und hier kommt "Player an/aus":

Hierzu habe ich auf die Handbewegung "NEAR" verzichtet und dafür ein "Toggle" auf "FAR" gesetzt.
Also:
Hand Richtung Sensor und wieder weg: Player an
Hand Richtung Sensor und wieder weg: Player aus

Wieder habe ich im setup-Teil eine Variable gesetzt:
int onoff =0;

Und dann im loop ("NEAR" ist auskommentiert):

// case DIR_NEAR:
// Serial.println("NEAR");
// break;
   
case DIR_FAR:
onoff=onoff+1;
if (onoff >1) {
onoff=0;
Serial.println("PLR_OFF");
}
else if (onoff =1) {
Serial.println("PLR_ON");
}
break;


Das DOIF im FHEM wird dann entsprechend wie oben auf "UNKNOWCODE PLR_ON" bzw. "PLR_OFF" triggern.
Damit ist der Squeezebox-Player jetzt "stand-alone"-Gesten-bedienbar  :)
Meine Konfig: FHEM auf NUC i5 mit Mint, HM-LAN, div. HM Schalter und Heizungsthermostate, FB 6840LTE mit Dect200, HUE bridge, HUE bulbs + Lightstrips, VU+Duo2 und Philips-TV Steuerung, Pushmail, Floorplan, Sprachsteuerung + Feedback per Arduino mit MOVI-Shield, LMS Multiroom mit 7x Pi