Windows-Tablet bei Bewegung und/oder per CCU-Taster wecken

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Antworten
hotroot
Beiträge: 55
Registriert: 23.05.2017, 13:08
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 6 Mal
Danksagung erhalten: 7 Mal

Windows-Tablet bei Bewegung und/oder per CCU-Taster wecken

Beitrag von hotroot » 02.10.2022, 23:37

Hallo zusammen,

ich experimentiere gerade etwas mit einem billigen Windows 10 Tablet zur Visualisierung. Natürlich möchte auch ich, dass der Bildschirm automatisch eingeschaltet wird, sobald man davor steht. Das Tablet selbst hat eine eingebaute Frontkamera. Es lag also nahe, diese für die Bewegungserkennung zu verwenden. Das Tablet ist hardwaremäßig allerdings so schwach ausgestattet, dass diese Lösung aus Stabilitätsgründen ausscheidet. Experimente mit Wecken des Bildschirms über das Netzwerk mittels HomeMatic-Bewegungsmelder funktionierten zwar technisch, waren aber zu träge.

Nach längerere Suche bin ich über diesen Blog-Beitrag gestolpert: http://www.dotmana.com/weblog/2014/06/u ... up-screen/
Ein Arduino Pro Micro und ein PIR-Sensor waren schnell beschafft und die drei Kabel auch schnell angelötet. Den Code aus dem Blog-Post habe ich fast 1:1 übernommen. Ich musste lediglich zwischen dem Drücken und Loslassen der simulierten Taste ein kleines delay einbauen. Außerdem sende ich nicht Caps-Lock sondern die Strg-Taste. Funktioniert soweit zufriedenstellend.

Als nächstes habe ich dem Tablet beigebracht, seinen Akkustand regelmäßig an die CCU zu melden, sodass diese bei bedarf das Ladegerät zuschalten und bei vollem Akku wieder abschalten kann. Leider hat das Tablet die Eigenheit in den Standby zu wechseln, wenn bei ausgeschaltetem Display das Netzteil abgesteckt wird. Eine Einstellung um dieses Verhalten zu unterbinden habe ich nicht gefunden. Also fing ich an zu überlegen, wie ich den Bildschirm des Tablets per CCU einschalten kann. Die Lösung ist denkbar simpel und vielleicht auch für den ein oder anderen interessant.

Ich habe einen Arduino Pro Mini inkl. Funkmodul mit dem Arduino Pro Micro verbunden. Als Sketch nutze ich den HM-LC-Sw1-Pl-CT-R1 von Jérome. In meinem Fall hatte ich in meiner Bastelkiste noch einen fertig verdrahteten Pro Mini aus einem anderen Experiment rumliegen, der neben Kabeln an RAW und GND auch noch ein Kabel an Pin 3 hatte. Deshalb verwende ich als RELAY_PIN Pin 3 und nicht Pin 5. Verkabelt habe ich die beiden Arduinos wie folgt:

Code: Alles auswählen

Pro Micro     Pro Mini
    VCC   <->    RAW
    GND   <->    GND
     9    <->     3 
Das Ganze sieht dann so aus:
PIR_HM_Keyboard.jpg
Auf dem Arduino Pro Micro kommt jetzt dieser angepasste Sketch zum Einsatz:

Code: Alles auswählen

// Board: Arduino Leonardo

#include <Keyboard.h>

#define SENSOR_PIN 10   // Senor state input pin
#define HMINPUT_PIN 9
#define RX_LED_PIN  17  // The RX LED has a defined Arduino pin
static bool sensor_previous_state = false;
static bool hm_previous_state = false;

void setup()
{
  pinMode(SENSOR_PIN, INPUT);  // PIR sensor pin as input
  pinMode(HMINPUT_PIN, INPUT);
  pinMode(RX_LED_PIN, OUTPUT);     //  RX LED as an output
  digitalWrite(RX_LED_PIN, HIGH);  //  RX LED off
  TXLED0;                     // switch on TX green to show init/powered up (only available by macro)
  sensor_previous_state = digitalRead(SENSOR_PIN); // get sensor initial state (can be already true)
  hm_previous_state = digitalRead(HMINPUT_PIN);
}

void loop()
{
  bool sensor_current_state = digitalRead(SENSOR_PIN);
  bool hm_current_state = digitalRead(HMINPUT_PIN);
  if (
      ( sensor_previous_state == false   // looping until we detect a rising edge
       && sensor_current_state == true)  // when sensor state is trigged, it takes about 20 sec to recover
     ||
      ( hm_previous_state == false && hm_current_state == true)
     ) {
    digitalWrite(RX_LED_PIN, LOW);   // set the LED on
    USBDevice.wakeupHost();
    Keyboard.press( KEY_LEFT_CTRL );
    delay(1);
    Keyboard.release( KEY_LEFT_CTRL );
    TXLED0;                     // great hackery in this: we have to force down the TXLED
    delay(1000);                  // wait a bit for the led
  } else {
    digitalWrite(RX_LED_PIN, HIGH);    // set the LED off
    TXLED0;
  }
  sensor_previous_state = sensor_current_state;
  hm_previous_state = hm_current_state;
}
Nach dem anlernen an der CCU habe ich noch eine direkte Verknüpfung zwischen dem HM-LC-Sw1-Pl-CT-R1 und einer virtuellen Taste erstellt und dort die Einschaltdauer auf 1s gesetzt. Jetzt kann ich vor dem Abschalten des Ladegeräts in der CCU den Bildschirm des Tablets per virtueller Taste aufwecken und so den Standby des Tablets verhindern.

Vielleicht hilft das ja dem ein oder anderen.

Gruß
hotroot

Antworten

Zurück zu „Projektvorstellungen“