README.md 4.3 KB
Newer Older
Bernhard Heinloth's avatar
Readme  
Bernhard Heinloth committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Zeiterfassungswürfel
====================

Ein kleiner und unauffälliger Würfel (mit etwa 6cm Kantenlänge) für den Schreibtisch.
Jede Seite entspricht einer zu erfassenden Tätigkeit reserviert, beispielsweise:

  * Feierabend
  * Kaffeepause
  * Forschung
  * Lehre
  * Besprechung
  * Sonstiges

Durch das Erkennen von Drehbewegungen und entsprechenden Speichern von Zeitstempel sowie Lage kann die Zeit bequem erfasst werden.
Diese wird regelmäßig an ein Endgerät mit Bildschirm (Computer/Smartphone) übertragen und visualisiert.

Im Gegensatz zu einer reinen PC-Zeitferfassungsanwendung ist man bei dem Würfel unabhängiger vom aktuellen Systemzustand des Arbeitsgeräts (PC aus, anderes Betriebssystem gebootet, ...), mit intuitiver Bedienung und sofort deutlich sichtbaren Zustand (ohne die Notwendigkeit den Fensterverwalter entsprechend einzurichten).

Die Zeiterfassung soll dabei helfen das Verhältnis der verschiedenen Tätigkeiten besser zu überblicken (Lehre - Forschung). Es ist nicht Ziel eine exakte hochdetaillierte Erfassung zu erhalten.


Grundüberlegungen
-----------------

  * Die Lage kann mit einem 3-Achsen-Beschleunigungssensor ausgemessen werden (durch die Erdbeschleunigung kann ein in Ruhe auf dem Tisch liegender Würfel sehr einfach die Oberseite erkennen). Weitere Sensoren sind nicht notwendig (Kosten nur Strom und Geld).
  * Der Würfel sollte kabellos sein
    * Übertragung sollte über WLan (und später eventuell auch Bluetooth) erfolgen.
    * Batterie für die Stromversorgung
    * Wiederaufladbar, z.B. über USB (oder Induktion?)
    * Dennoch: Möglichst niedriger Energiebedarf
  * Daten werden über eine Weboberfläche visualisiert
    * HTTP bietet sich auch als Protokoll für die Kommunikation zwischen Würfel und Uploadserver an
  * 6 Seiten (Würfel) sollten i.d.R. reichen, alternativ sollten aber auch 8 (Oktaeder) oder 12 (Dodekaeder) möglich sein


Prototyp
--------

Batteriebetriebener [ESP32](https://www.espressif.com/en/products/hardware/esp32/overview) ([Adafruit HUZZAH32](https://learn.adafruit.com/adafruit-huzzah32-esp32-feather/overview)) mit Beschleunigungssensor [LIS3DH](https://www.st.com/resource/en/datasheet/cd00274221.pdf) (von [Adafruit](https://learn.adafruit.com/adafruit-lis3dh-triple-axis-accelerometer-breakout/arduino)) und einer *1000 mAh* [LiPoly](https://de.wikipedia.org/wiki/Lithium-Polymer-Akkumulator) in einem im Fablab gelaserten Holzwürfel (Kostenpunkt: alles zusammen etwa 30 Euro).

### Entwicklung

  * Programmierung über [Arduino IDE](https://www.arduino.cc/)
    * Mit [ESP32 Erweiterung](https://github.com/espressif/arduino-esp32)
  * *LIS3DH* über SPI mit *ESP32* verbunden
    * Interruptpin des Beschleunigungssensors ebenfalls mit Mikrocontroller GPIO Pin verbunden
  * Bei Bedarf WLan-Verbindung herstellen
    * Verwendung von *eduroam*
    * RTC synchronisiert bei jeder Verbindung mit NTP
    * Daten werden regelmäßig (alle 4h) sowie nach Bedarf (Speicher zu 50% voll oder manuell durch zweifaches Klopfen auf den Würfel) an Server **i4time** übertragen
  * Tiefschlaf solange keine Änderung

### Erkenntnisse

  * Die Drehung sollte erst nach ein paar Sekunden ohne Änderung geloggt werden.
    * Es kommt sicher hin und wieder jemand ins Büro der den Würfel ungefragt/begeistert in die Hand nimmt und sich von allen Seiten anschaut. 
    * Eine sekundengenaue Erfassung ist eh nicht nötig.
  * Die Interruptkonfiguration für den Beschleunigungssensor ist nicht so frei wie erwartet.
    * Nach mehrfachen probieren wird die 6D-Bewegungs- und Klickerkennung verwendet, die bei korrekt platzierten Sensor sehr gut funktioniert (und Berechnungen erspart).
    * Für andere Körper muss hier mehr Hirnarbeit reingesteckt werden, sollte jedoch prinzipiell auch möglich sein.
  * Der *ESP32* hat eine Echtzeituhr (RTC), die unkompliziert zur Zeitmessung und dem Wecken verwendet werden kann.
    * Der 8kb RTC Ram bleibt (im Gegensatz zum normalen Ram) auch über den Tiefschlaf (Deep Sleep) hinweg persistent -- eignet sich also sehr gut als Speicher für Zeiten
  * Das verwendete Board verbraucht aufgrund des USB-Serial-Chip selbst im Tiefschlaf 6mA (der ESP32 selbst unter 10μA)
    * Laufzeit unter einer Woche (ohne laden)...


Revision 1
----------

Wechsel auf [Firebeetle ESP32](https://www.dfrobot.com/product-1590.html) mit 10μA Verbrauch im Tiefschlaf.