Energie-
Verbrauch
Bewegungs-
melder
ioBroker-DHT22
ioBroker-
Laufschrift
ioBroker LED-
Thermometer
ioBroker-OLED
ioBroker
Multi-OLEDs
ioBroker
Mini-Mülltonne
Ball on Plate
Sonstige
Basteleien
"Laundrino V1" - "laundry is ready"-reminder ( also take a look at an alternative: Laundrino V2 ) |
||
https://youtu.be/qqjcp6YOo98 | ||
| ||
Auf Wunsch einer einzelnen Dame galt es dieses Mal, ein haushaltstechnisches Problem zu lösen: Unsere Waschmaschine steht im Keller und gibt leider kein akustisches Signal, wenn sie fertig ist. Die angezeigte Restdauer (bis die Wäsche fertig ist) variiert in Abhängigkeit von der Füllmenge, Restfeuchte, etc. (ich kenne mich da nicht so aus ;-), so daß oft mehrmalige Kontrollgänge - verbunden mit Treppensteigen - durchgeführt wurden - meistens war die Wäsche jedoch noch nicht fertig. Mein Argument, daß schließlich jeder Gang schlank mache, wurde mit einem bösen "wasch deine Wäsche doch selber ... :-((" entkräftet. Um dieser Gefahr zu entgehen, musste also eine technische Lösung gefunden werden. Nach Möglichkeit sollte dazu kein Eingriff in die Elektronik der Waschmaschine erfolgen Also das Internet befragt, ob dieses Problem schon bekannt war. Es fanden sich auch Vorschläge, die auf verschiedenen Erfassungsprinzipien beruhten:
Außerdem ist diese Lösung recht teuer, wenn noch kein entspr. Equipment verhanden ist. Es fanden sich auch andere mehr, oder wenige brauchbare Vorschläge, den Stromverbrauch z.B. induktiv (Stromzange, Stromsensor in Zuleitung,etc.) zu messen und mit einem Arduino auszuwerten. Ich hatte mich schon in der Vergangenheit mit den ACS7xx-Stromsensoren in Verbindung mit einem Arduino befasst, allerdings waren die Ergebnisse nicht so berauschend: relativ große Schwankungen. Erschwerend kommt hinzu, daß unsere Waschmaschine ein sog. Toplader ist, d.h. die kpl. Tastatur-/Anzeigeeinheit wird beim Befüllen der Maschine nach oben geschwenkt. Man müsste also den Sensor jedes Mal erneut über dem LED-Ring anbringen - unakzeptabel, WAF-Faktor (Woman-Acceptance-Factor) = 0. Nachfolgend wird die Auswertung der Vibrationen mit einem Beschleunigungs- und Gyroskop-Sensor MPU6050 beschrieben, siehe z.B.: https://playground.arduino.cc/Main/MPU-6050 Es gibt verschiedene breakout boards für diesen Sensor, ich habe ein GY-521 verwendet, dieses enthält einen Spannungsregler und kann mit 5V betrieben werden. Dieser Sensor agiert so, wie man es z.B. von einem Smartphone gewohnt ist, d.h. wenn man das Smartphone dreht oder kippt, ändert sich die Display-Ausrichtung entspr. Software: Die Beschaltung eines Arduino (Nano) mit einem MPU6050 ist recht simpel. Außer Versorgungsspannung (5V) und GND sind nur 3 weitere Anschlüsse notwendig: SDA, SCL und INT. Diese werden mit den entsp. PIN's am Arduino verbunden ( s. Schaltplan Bild 0, bzw. Lochrasterplatine Bild 1). Mittels des unten auf dieser Seite downloadbaren Sketch "Waschmaschine_final.ino", lassen sich dann schon über die serielle Schnittstelle in der Arduino-IDE Erschütterungen in 3 Richtungen (x,y und z) erkennen. Zusätzlich habe ich noch Kalibrierungsfaktoren in den Sketch eingebaut. Der MPU6050 ist zwar werksseitig kalibriert, aber eine "Feinjustierung" kann nicht schaden. Zum Ermitteln der entspr. Kalibrierungsfaktoren habe ich den Sketch "MPU6050-Calibration.ino" verwendet (ebenfalls downloadbar unten auf dieser Seite). Man startet diesen Sketch und platziert den MPU6050 erschütterungsfrei. Nach einer Weile werden dann im seriellen Monitor die 6 Korrekturfaktoren beispielsweise so ausgegeben: Calculated offsets: x accel: -4741 y accel: -273 z accel: 581 x gyro: 159 y gyro: -56 z gyro: 99 Diese Werte werden dann in den Sketch "Waschmaschine_final.ino" manuell übernommen. Zur optischen Anzeige der Erschütterungen/Beschleunigungen habe ich noch einige LED's verbaut. Jeweils eine LED für x,y und z-Achse und eine weitere LED (M) als "generelle" Erschütterungsanzeige, d.h. wenn x-,y- oder z-LED leuchtet, leuchtet die M-LED ebenfalls. über die 3 Variablen int gx_thres = 170; // threshold of x movement int gy_thres = 180; // threshold of y movement int gz_thres = 170; // threshold of z movement kann man die Empfindlichkeit in der jeweiligen Richtung einstellen (je höher, desto unempfindlicher) Die Empfindlichkeiten sind an die verwendete Waschmaschine anzupassen. Warum?: Meist haben die modernen Waschmaschinen einen sog. "Knitterschutz", d.h. die Waschtrommel dreht sich auch nach Ende des Waschvorganges noch periodisch um eine halbe (glaube ich zumindest) Umdrehung, um ein Zerknittern der feuchten Wäsche zu verhindern. Hierzu müssen die 3 obigen Empfindlichkeiten so gewählt werden, daß einerseits der Knitterschutz keine Erschütterung des MPU6050 mehr auslöst und andererseits "normale" Waschbewegungen noch zuverlässig erkannt werden Das läßt sich leider nur experimentell ermitteln, in dem man sich u.U. mehrmals vor die Maschine setzt, die LED's beobachtet und anschl. die Variablen im Sketch anpasst. Ein mitlaufender Timer wird jedes Mal beim Aufleuchten der M-LED, also bei Erschütterung, zurückgesetzt. Wenn über einen bestimmten Zeitraum (anpassbar über die Variable long offTime) keine Erschütterungen mehr erfolgen (=Waschmaschine fertig), wird über den Timer der PIN 4 des Arduino periodisch (Periodendauer anpassbar über Variable long repeat) auf Masse gezogen. Die LED WaschOff an PIN 4 erlischt dann kurzzeitig. Im Sketch erfolgt die Auslösung nach 70 Sekunden Stillstand und wiederholt sich dann alle 20 Sekunden. Diese Zeiten hängen natürlich von den entspr. Pausenzeiten der jeweiligen Waschmaschine ab. Hinweis: Nach erstmaliger Auslösung reagiert der Arduino nicht mehr auf weitere Erschütterungen des MPU6050. So weit, so gut, nun haben wir also einen Arduino-Ausgang (PIN 4), der nach dem Ende des Waschvorganges periodisch auf Masse geschaltet wird. Wie setze ich nun eine Meldung ab, daß auch an entfernter Stelle bemerkt wird, daß die Wäsche fertig ist? Mail, oder Pushmail scheiden aus oben schon erwähnten Gründen aus. Die simpelste Lösung schien mir das "Hacken" einer drahtlosen Funkklingel zu sein. Diese Funkklingeln bestehen meist aus einem batteriebetriebenen Sender (Klingelknopf) und einem Empfänger, den man in eine "fast beliebige" 230V-Steckdose stecken kann. "Fast beliebig" deshalb, weil die Funkreichweite noch gegeben sein muß. Bei uns funktioniert es jedoch über 2 Etagen problemlos. Ich hatte noch so ein Grundig Funkklingel-Set im Bastelkeller liegen, im Handel kosten sie ca. 25,- € (s. Bild 4). Vom Sender(Klingelknopf) wurde das Gehäuse, die 3V-Batterie (CR2032) und der Button entfernt ( s. Bild 5). Der Ausgang des Arduino (PIN 4) wurde über einen Spannungsteiler (R5/R6, s. Schaltplan Bild 0) mit dem entspr. Lötpunkt auf der Sender-Platine verbunden. Zur Spannungsversorgung (ca. 3V) des Senders wurde ein Spannungsregler LM317 verwendet. Für einen möglichst platzsparenden Aufbau wurde der Sender dann auf der Lochrasterplatine über dem Arduino-Nano mit einem Abstandshalter verschraubt (s. Bild 6). Hardware: Die "Auswerteeinheit" war somit fertig, wie befestige ich jedoch den MPU6050 an der Waschmaschine? Erste Versuche, den MPU6050 einfach über ein 4poliges Kabel an die Rückwand der Waschmaschine zu kleben/schrauben schlugen fehl, weil auf das Gehäuse der Waschmaschine nur geringe Erschütterungen übertragen wurden. Auch ein Heraufsetzen der Empfindlichkeiten in x-,y- und z-Richtung brachte nicht den gewünschten Erfolg, da jetzt schon ein Aufstampfen mit dem Fuß, oder Zuschlagen der Waschküchentür zum Auslösen führte. Grübel, grübel ... wo gibt's "bessere" Erschütterungen - ja klar, direkt an der Trommel der Waschmaschine. Die Trommel ist mitsamt Antrieb (Motor, Antriebsriemen, etc.) schwingend an Federn in der Maschine befestigt. Zuerst wollte ich die Maschine öffnen, um einen passenden Befestigungspunkt an der "schwingenden Einheit" zu finden, aber das war gar nicht notwendig, da man durch eine längliche Öffnung in der Rückwand das Gewinde für die Verschraubung der Transportsicherung der Waschmaschine erreichen konnte (s. Bild 3). Da der MPU6050 nur briefmarkengroß ist und auf der Platine kein Loch mit entspr. großem Durchmesser gebohrt werden konnte, habe ich noch ein Gehäuse aus einem defekten Servo-Motor gebastelt (s. Bild 2). Durch dieses Gehäuse wurde ein Loch für eine M10-Schraube gebohrt. Die Original-Transportsicherungsschrauben konnten nicht verwendet werden, weil sie zu lang waren. Eine entspr. kurze Schraube im Baumarkt besorgt und den MPU6050 mitsamt Gehäuse an der "schwingenden Einheit" verschraubt. Man muss allerdings darauf achten, daß beim Betrieb der Waschmaschine das MPU6050-Gehäuse, bzw. die Befestigungsschraube genügend Abstand zur Rückwand hat, da sonst evtl. mechanische Schäden enstehen könnten. Wo diese Möglichkeit der Befestigung nicht gegeben ist, muss das Gehäuse der Waschmaschine aufgeschraubt werden und eine andere Verschraubungsmöglichkeit an der "schwingenden Einheit" gesucht werden. |
Downloads | |
Sketches: | Waschmaschine_final.ino |
MPU6050-Calibration.ino | |
Libraries: | I2cdev.zip |
Mpu6050.zip | |