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.
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
Moin,
ist das hier evt. etwas für Dich?
https://github.com/platisd/nevma#readme
Gruß, Jochen
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
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 :)