Site Tools


Sidebar

Translations of this page?:



TechWiki

GW60 Rollo

  • GW60 Superrollo
    • Hardware
    • Programming
    • S/W extension
  • TRADFRI Modul
    • Modul H/W
    • Programming
    • Tools
  • GW60 TRADFRI adapter
    • Schematic
    • Programming adapter
    • Housing
    • Integration

Laser Cutter

3D Printer

QuadCopter

RC car

Wiki

Misc

tech:bedsensor

This is an old revision of the document!


Bed Sensor

Motivation

Jeder der mit dem Thema Smart Home infiziert wurde überlegt fast kontinuierlich wie er/sie manuelle, wiederkehrende Aufgaben automatisieren kann. Vorausgesetzt genügend Sensoren und Aktuatoren sind schon vorhanden. Ein Bereich der etwas unterrepräsentiert erscheint ist der Belegungssensor um z.B. durch den Gang ins Bett Aktionen auszulösen oder zu unterlassen.
Es gibt Alarmmatten oder professionelle Belegungssensoren aus dem Pflegebereich. Auch die Sitzsensoren aus der Automobilindustrie erfüllen eine ähnliche Aufgabe. Allen gemeinsam ist die fehlende Anbindung an ein offenes Protokoll wie MQTT und natürlich der eher hohe Anschaffungspreis.

Professioneller Bettsensor

Einige findige Entwickler sind die Lücke angegangen und haben z.B. Schalter in das Bettgestell integriert Selbstgebauter Bettsensor... Steuern und Regeln im Schlaf!

Mein Ansatz sieht etwas anders aus um möglichst minimalinvasiv für das Bettgestellt zu sein. Als Sensor verwende ich einen druckempfindlichen Widerstand (force-sensitive resistor FSR). Den gibt es auch in einer extra langen Version von 60cm FSR 408. Unbelastet ist der Widerstand hochohmig (>10MOhm) und bei 10kg Belastung reduziert sich der Wert auf wenige 100 Ohm. Der Sensor ist selbstklebend und lässt sich einfach z.B. auf einem Lattenrost befestigen.

FSR 408 Typical Force Curve

Der vorliegende Druck lässt sich leicht mit einen einfachen Widerstandsnetzwerk und einem A/D Wandler oder Comparator auswerten. Um die Auswertung dann auch ins Smart Home Netzwerk zu bekommen gibt es mehrere Möglichkeiten. Eine der einfachsten ist ein ESP8266 Modul (ESP-07) mit der Open/Source Firmware ESP Easy

ESP-07

Features

Die Lösung sollte folgende Anforderungen erfüllen:

  • Belegungsauswertung über druckempfindlichen Widerstand (FSR 408)
  • Zwei Sensoreingänge für ein Doppelbett
  • WLAN Einbindung
  • MQTT Protokoll

Hardware

Das Widerstandsnetzwerk zur Auswertung des Drucks sieht wie folgt aus:

 Widerstandsnetzwerk

Die Ausgangsspannung zum ADC berechnet sich daher so:

V_ADC = Vcc ( R2 / (R2 + R1) )

wobei Vcc = 3.3V ist. Die entsprechenden Spannungswerte zu den Stützstellen des Kraftdiagramms sind in der Tabelle aufgelistet:

Force
[kg]
FSR Resistance
[KOhm]
V_ADC
[V]
Digital Value
[dec]
0.1 6 0.05 51
0.5 2 0.16 164
1.0 1.2 0.25 256
2.0 0.75 0.39 399
4.0 0.45 0.60 614
7.0 0.30 0.83 849
10.0 0.25 0.94 962

Der Maximalwert sollte 1V nicht überschreiten, da beim ESP-07 die interne analoge Referenzspannung 1V beträgt. Zusätzlich benötigen wir noch einen Multiplexer um zwei Sensoren auswerten zu können. Der vollständige Schaltplan ist trotzdem noch sehr übersichtlich.

 Schaltplan Bettsensor

Natürlich kann man auch nur einen FSR408 mit R2 direkt an das Modul anschliessen und umgeht so eventuell die Platine.

Um das Modul möglichst klein zu halten ist die Schaltung in SMD ausgeführt.

 Platine Bettsensor

Der Anschluss der Sensoren erfolgt über eine standard 2.5mm Klinkenbuchse (JY029). Die Spannungsversorgung ist auch steckbar mit einer 2.1mm Hohlbuchse (HEBW21). Hierzu findet man sehr preiswerte Steckernetzteile mit stabilisiertem 3.3V Gleichspannungsausgang. Mehr drahtgebundene Konnektivität benötigt der Bettsensor nicht.
Mit einem 3D Drucker lässt sich dann noch ein unauffälliges Gehäuse verwirklichen.

 Gehäuse Bettsensor

Programmierung

Nachdem die Hardware erstellt wurde müssen wir noch das ESP Modul programmieren. Wir schon erwähnt basiert der Bettsensor auf ESPEasy. Im Link findet man auch Anleitungen wie die ESPEasy Firmware auf das Modul aufgesp[eilt wird. Um in den Programmiermodus zu gelangen muss beim Reset Release der Jumper SJ1 geschlossen sein. Die Programmierung erfolgt seriell über JP1.

Wenn alles geklappt hat und das Modul im heimischen WLAN eingebunden ist kann die gesamte weitere Einstellung über das Webinterface erfolgen. Dazu benötigen wir

  • MQTT Controller setup
  • Device Setup
  • Rules Setup

MQTT Controller setup

Der Bettsensor soll sich ja mit einem vorhandenen MQTT Server verbinden und die aktuelle Belegungsinformation bei Änderung dorthin übertragen. Dazu geben wir auf den Reiter Controller und setzen die entsprechende Daten. Dazu gehören u.a. die IP Adresse des MQTT Servers sowie die Account Daten für die Anmeldung. Das Resultat sollte ähnlich dem folgenden Beispiel aussehen.

 MQTT Controller Setup

Devices

Als zweites brauchen wir ein Device was den analogen Wert misst und speichert. Das lässt sich über den Reiter Devices erreichen. Für jeden Sensor gibt es ein eigenes Device und zusätzlich benötigen wir noch ein Dummy Device um den vorherigen Messewert abzuspeichern.

 Devices Setup

Die grünen Zahlen rechts geben übrigens die aktuelle Messwert wieder. In dem Beispiel liegt keiner im Bett.
Hier die Einstellungen für die Devices:

 Analog Device Setup  Dummy Device Setup

Beispiel

Hier die Aufzeichnung der konvertierten Werte [0..1023] einer Nacht. Die Drops sind nicht bedingt durch eine altersbedingte Inkontinenz sondern das kurzzeitige Wegkuscheln auf die andere Betthälfte :-)

 Aufzeichnung einer Nacht

Rules

On System#Boot do
  gpio,12,0
  TaskValueSet 3,1,100 	// default value at boot
  TaskValueSet 3,2,100 	// default value at boot 
  timerSet,1,1
endon

On Rules#Timer=1 do
  TaskRun,1 	// Measure Bed 1
  GPIO,12,1
  TaskRun,2 	// Measure Bed 2
  GPIO,12,0

  if [sensor_1#analog] < 50 and [BedStatus#Bed1_Prev] > 49
    TaskValueSet 3,1,[sensor_1#analog] 
    publish /home-assistant/%sysname%/sensor_1/analog,OUT       
  endif

  if [sensor_1#analog] > 49 and [BedStatus#Bed1_Prev] < 50
    TaskValueSet 3,1,[sensor_1#analog] 
    publish /home-assistant/%sysname%/sensor_1/analog,IN       
  endif

  if [sensor_2#analog] < 50 and [BedStatus#Bed2_Prev] > 49
    TaskValueSet 3,2,[sensor_2#analog] 
    publish /home-assistant/%sysname%/sensor_2/analog,OUT       
  endif

  if [sensor_2#analog] > 49 and [BedStatus#Bed2_Prev] < 50
    TaskValueSet 3,2,[sensor_2#analog] 
    publish /home-assistant/%sysname%/sensor_2/analog,IN       
  endif

  TimerSet,1,1
endon
tech/bedsensor.1602271493.txt.gz · Last modified: 2020/10/09 20:24 (external edit)