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
Snowduino / Snowdepth-Meter = Laser-Schneehöhenmesser (Prototyp) | ||
![]() | ||
17.12.2017: Resumee Aufgrund der verschiedenen Schnee-Konsistenzen, bzw. -Oberflächen (Pulverschnee, Pappschnee, etc.), schwanken - für mich persönlich - die Meßwerte im cm-Bereich zu sehr. Deshalb verfolge ich dieses Projekt nicht weiter. Prinzipiell funktioniert es, somit kann es m.E. evtl. dort verwendet werden, wo es auf ein paar cm nicht ankommt (Gebirgsregionen) ? Ich betreibe hobbymäßig eine Wetterstation ( siehe joergeli.de ) und wollte schon länger einen automatischen Schneehöhenmesser integrieren. Mein erster Gedanke war, es mit einem Ultraschall-Sensor zu versuchen. Nach Internet-Recherchen habe ich jedoch davon Abstand genommen, weil die Schneeoberfläche zu inkonsistent ( Pulverschnee, Pappschnee, verharschter Schnee, etc.) ist, um verlässlich mit Ultraschall-Reflexionen zu messen. Außerdem ist Schall temperaturabhängig, was zusätzlich thermische Kompensationsmaßnahmen erfordert hätte. Entfernungsmessung mittels Laser soll wohl besser geeignet sein, nur sind Laser-Entfernungsmesser, deren Mess-Daten man über eine serielle Schnittstelle auswerten kann rel. teuer. Glücklicherweise habe ich diese Anleitung blog.qartis.com gefunden, wo beschrieben wird, wie man den rel. preiswerten Laser-Entfernungsmesser UNI-T UT390B "hacken" kann. Also einen UT390B via e..y von einem chinesischen Verkäufer für ca. 55,-€ gekauft. Zwischenzeitlich bekommt man das Gerät für 79,-€ z.B. auch hier: UT390B reichelt Für 10,-€ mehr gibt es dort auch den UT391A. Die Unterschiede zwischen beiden Geräten sind die Meßgenauigkeit ( UT390B: ± 2mm UT391A: ± 1.5mm), sowie die maximale Mess-Distanz ( UT390B: 45m UT391A: 70m). Wobei lt. Beschreibung des UT390B die Mess-Genaugkeit nur bei Abständen ≤ 10m gültig ist. Zitat aus der Beschreibung: "When measuring within 10m, measurement accuracy is ± 2mm; more than 10m, measurement accuracy ist calculated as follows: ± 2mm ± 0.05 x (Measuring Distance - 10)" Nun gut, Schneehöhen > 10 m sind bei uns hier im Taunus wohl kaum zu erwarten, also kann man ja mal versuchen, den UT390B zur Schneehöhenmessung zu verwenden :-) Also an's Werk: Zuerst muss der UT390B geöffnet werden, um an die Kontakte der seriellen Schnittstelle (s. Bild 1) zu gelangen. Eine gute Anleitung mit Bildern findet man bei: qartis. Zusätzlich habe ich noch Drähte zur Stromversorgung ( + 3,5V und Masse direkt an den Batterie-Anschlüssen ) und an die Kontakte "Off" und "On" auf der Platine ( s. Bild 0 und Bild 4 ) gelötet. Entgegen der Anleitung bei quartis würde ich nicht empfehlen, das Flachbandkabel zur Tastaturplatine aus der Fassung zu ziehen, sondern im Gegenteil das Flachbandkabel zusätzlich mit Heißkleber in der Fassung zu fixieren ( s. Bild 5 ). Ich hatte das Kabel zuerst abgezogen und es war sehr umständlich, es wieder in der Fassung zu befestigen ( evtl. ist mir aber auch eine Haltenase abgebrochen ). Im gleichen Zug habe ich auch den Buzzer auf der Platine des UT390B ausglötet ( s. Bild 5 ), denn ich will vermeiden, dass sich evtl. Nachbarn durch das Gepiepse bei den Messungen gestört fühlen. Stattdessen verwende ich einen externen Buzzer, den ich direkt mit dem Arduino ansteuere ( dazu später mehr ). Letzendlich werden also 6 Drähte ( s. Bild 0 ) aus dem UT390B nach außen geführt, welche in einem entspr. Steuerkabel zusammengefasst sind ( s. Bild 3 ). ( Wie ich erst später feststellte, hätten auch 5 Drähte ausgereicht, denn die "Off"-Taste kann man auch seriell simulieren ) Das ist alles, was an Eingriffen am UT390B notwendig ist. Der UT390B wurde dann mit einer Klemmvorrichtung, bestehend aus 2 Alu-L-Schienen ( s. Bild 2 und Bild 3 ) und entspr. Schrauben in einem Kunststoffgehäuse befestigt. An der Stelle, wo der Laserstrahl austritt wurde eine rechteckige öffnung in das Kunstoffgehäuse gesägt/gefeilt. Die Frontplatte des Kunstoffgehäuses wurde mit einer durchsichtigen 3mm Plexiglasplatte ersetzt, damit man das Display des UT390B und die LED's auch in geschlossenem Zustand sehen kann ( s. Bild 12 ). Als Witterungs-Schutz wurde noch mit der Heißluftpistole eine Hartschaumplatte u-förmig gebogen, und über dem Kunststoffgehäuse angebracht ( s. Bild 13 ), Elektronik ( s. Schaltplan Bild 0 ): Es wird nicht viel an zusätzlichen elektronischen Bauteilen benötigt:
Optional, wenn WLAN gewünscht:
Hinweis: LED's und Buzzer können auch entfallen, sie dienen lediglich dem Komfort (optische/akustische Kontrolle). elektr. Aufbau: Der Aufbau der Zusatzelektronik sollte einem halbwegs erfahrenen Elektronik-Bastler nicht schwerfallen. Gemäß Schaltplan ( s. Bild 0 ) sind lediglich ein paar Widerstände und Leuchtdioden, sowie ein Buzzer und ein Taster anzuschließen. Der Arduino-Nano wird dazu auf ein LAN-Shield gesteckt und diese "Huckepack"-Konstruktion auf eine Lochrasterplatine gelötet. Ein Wort zu dem verwendeten LAN-Shield: Es handelt sich hier um ein spezielles Shield für den Arduino Nano, wie z.B. dieses hier W5100 Ethernet Shield for Arduino Nano Man kann natürlich auch ein Ethernet-Shield für einen Arduino Uno verwenden, nur ist dieses größer und muss manuell mit den entspr. PIN's am Arduino-Nano verbunden werden. Alternativ kann das Ganze natürlich auch gleich mit einem Arduino Uno aufgebaut werden - dann fällt der kpl. Aufbau etwas "unhandlicher" aus. Es gibt auch Ethernet-Shields mit ENC28J60-Chipsatz ( z.B.: ENC28J60 Ethernet Shield ) , welche günstiger sind, als die mit W5100-Chipsatz. Allerdings muss hier der kpl. TCP/IP-Stack manuell im Arduino-Code implementiert werden, was ziemlich viel Speicherplatz verbraucht. In Bild 7 ist zu sehen, wie der UT390B mit Arduino verbunden ist. Optional, zusätzliche WLAN-Anbindung: Es ist natürlich lästig, wenn der Schneehöhenmesser im Freien eingesetzt wird und zusätzlich zum 9V-Spannungsversorgungskabel ein LAN-Kabel verlegt werden muss. Komfortabler ist das via WLAN zu realisieren (gesetzt den Fall, das hauseigene WLAN reicht bis zur Messtelle ;-) Dafür gibt es auch entspr. WLAN-Shields für den Arduino, aber erstens sind sie rel. teuer und zweitens hatte ich keines hier "rumliegen". Was aber ungenutzt im Bastelkeller lag, war ein Medion "WLAN AP/Repeater/Client" ( ist aber Edimax drin ;-) ( s. Bild 8 ). Diesen habe ich geöffnet und die kpl. Platine ausgebaut und mit einem sehr kurzen LAN-Kabel mit dem Ethernet-Shield verbunden. Dann wird der Schiebeschalter an dem WLAN-Modul in die Stellung "Client" gebracht und voila wird aus der LAN-Verbindung eine WLAN-Anbindung. Dieses Modul muss aber mit 5V versorgt werden, deshalb ist ein zusätzlicher µA 7805 5V-Spannungsregler erforderlich, welcher im Betrieb recht warm wurde. Messung ergab ca. 450mA Stromaufnahme allein durch das WLAN-Modul - sicherheitshalber wurde deshalb ein noch ein Kühlkörper für den µA 7805 spendiert. (Nebenbei: die kpl. Stromaufnahme beträgt ca. 500-600 mA, deshalb das Netzteil mit 1A) Andererseits ist als positiver Nebeneffekt zu vermerken, dass der µA 7805 das Innere des Gehäuses und den UT390B ein wenig aufheizt, so dass tiefe Wintertemperaturen den UT390B hoffentlich nicht "einfrieren" lassen. Funktionsprinzip: Der Schneehöhenmesser wird in einer bestimmten Höhe ("Kalibrierungsabstand") über dem Erdboden angebracht. Dazu habe ich mir ein "Stativ" ( s. Bild 11 ) gebastelt, an dem ich den Schneehöhenmesser in der Höhe verstellen kann. Jede andere Konstruktion tut es natürlich auch, ebenfalls ist eine hängende Montage denkbar. Wenn der Schneehöhenmesser mit Spannung versorgt wird, geht er zunächst in den "Kalibrierungsmodus", d.h. er führt 15 Messungen (Anzahl softwaremäßig einstellbar) durch, wo man den Schneehöhenmesser auf die softwaremäßig eingestellte Höhe ( Abstand Laser<->Erdboden ) einjustieren kann. Als optische Justage-Hilfe leuchten entweder die beiden roten LED's (zu hoch, zu tief), bzw. die grüne LED (Abstand OK). Zusätzlich piepst der Buzzer in unterschiedlichen Tönen. Kurz vor jeder Messung blitzt die blaue LED kurz auf, dann wird der Laserstrahl zum Boden gesendet. Dieser "Kalibrierungs-Modus" kann jederzeit durch Drücken und kurzes Halten des Tasters SW1 ( s. Schaltpan Bild 0 ) wiederholt werden. Nach dem "Kalibrierungs-Modus" wird in den normalen "Mess-Modus" übergegangen, d.h. der Arduino "triggert" zyklisch den UT390B für eine Messung und empfängt den Abstand Laser<->Erdboden über eine serielle Schnittstelle. Dann wird die Differenz aus gemessenem Wert und "Kalibrierungs-Abstand" gebildet, welche der Schneehöhe entspricht. Danach wird der UT390B bis zur nächsten Messung ausgeschaltet. Bei diesen Messungen erfolgt kein akustische Signal (Piepser), lediglich die blaue LED blitzt vor der Messung kurz auf. Hinweis: Messungen ≤ 3 mm werden als 0 mm berechnet, da der UT390B "nur" eine Genauigkeit von ± 2 mm hat. ( es sieht optisch halt unschön aus, wenn mitten im Juli 2 mm Schneehöhe angezeigt werden ;-) Wie sich bei den Messversuchen herausstellte, werden manchmal unsinnige Werte gemessen ( keine Ahnung, warum), deshalb mussten evtle. Ausreißer softwaremäßig eliminiert werden. Dazu werden z.B. 12 Messungen im Abstand von 1 Min. durchgeführt und jeder Messwert wird in einem Array (Tabelle) zwischengespeichert. Nach der 12ten Messung wird das Array aufsteigend sortiert - somit sind evtle. Messwert-Außreißer am Anfang, bzw. am Ende des Arrays. Dann werden nur die Messwerte aus der Mitte des Arrays ( also Messwert 5, Messwert 6 und Messwert 7 ) abgegriffen. Aus der Mitte des Arrays deshalb, weil hier die Wahrscheinlichkeit eines Ausreissers gering ist. Aus diesen 3 Werten wird dann noch der Mittelwert errechnet und auf 1 Stelle hinter dem Komma gerundet. Anschl. wird der errechnete Wert an eine Webseite gesendet. Hinweis: Messzyklus und Übertragungszyklus, d.h. nach wie vielen Messungen der Wert an die Webseite übertragen werden soll, sind softwaremäßig einstellbar. Zur Verdeutlichung ein Screenshot ( Kalibrierungsabstand 50cm, 15 Kalibrierungsmessungen, 10 Mess-Zyklen ) ![]() Übertragung auf Webseite: Im obigen Screenshot erfolgt die Übertragung nach 10 Mess-Zyklen ( 0-9 ). Die Webseite ist eine einfache PHP-Seite ( s. unten, data2text.zip ) , welche den Messwert entgegen nimmt und (testweise) in eine Text-Datei, als auch in eine Datenbank schreibt. Es würde hier zu weit führen auf die Einzelheiten in PHP, bzw. die Übernhame in eine Datenbank einzugehen, sehr gute Tutorials diesbzgl. sind hier zu finden: Tutorials von pscl.ch Abgefragt werden die Daten aus der Datenbank ebenfalls via PHP und mit den amCharts grafisch dargestellt. Hier ein Screenshot nach der Aufbereitung mit den amCharts: ![]() Bisherige Erfahrungen: In Ermangelung von Schnee, liegt zur Zeit ein Kalksandstein mit 11,5 cm Höhe auf dem Fussboden unter dem Laserstrahl ;-) Es gibt wohl kleine Messwertschwankungen in Abhängigkeit der Temperatur. So habe ich festgestellt, dass bei Erwärmung des Raumes, in dem der "Snowduino" z. Zt. steht, sich die Messwerte geringfügig verkleinern. Das sind aber nur 2-3 mm und ich gehe (hoffentlich) davon aus, dass bei Winterkälte die Schwankungen noch geringer werden. Update 17.02.2016: Heute ist bei uns ein wenig Schnee gefallen und ich konnte erstmalig Messungen mit dem "Snowduino" beobachten. Hier die Ergebnisse: ![]() Anmerkungen zu Screenshot 1: In der Nacht hatte es geschneit und am Morgen lag der Pulverschnee ca. 1,5 cm hoch (mit Zollstock gemessen). Der Snowduino hat nur 0,3 - 0,5 cm angezeigt. Komischerweise gingen die Meßwerte ab ca. 08:10 (Sonnenschein?) dann auf 0,0 cm, obwohl es lt. Zollstock immer noch ca. 1,5 cm waren. Gegen 11:20 habe ich dann ein weißes Blatt Papier unter den Laser gelegt, damit stimmten die Meßwerte mit der realen Schneehöhe überein. ![]() Anmerkungen zu Screenshot 2: Gegen 12:00 Uhr habe ich den Standort des Snowduino geändert, sprich an einer Stelle platziert, wo etwas mehr Schnee lag. Lt. Zollstock betrug die Schneehöhe hier ca. 3,5 cm. Der Snowduino zeigte aber auch hier geringere Werte an: 1,2 - 1,9 cm. Eine Besonderheit stellte ich zwischen 12:30 und 13:30 fest, als die Sonne nochmals hervor kam und die Meßwerte bis auf 0,7 cm herunter gingen. Ab 13:40 bewölkte es sich wieder und die Meßwerte gingen wieder hoch. Meine Schlußfolgerungen: 1.) Der Laser dringt wahrscheinlich ca. 1-2 cm in die (Pulver-)Schneeoberfläche ein, denn mit untergelegtem weißen Blatt Papier stimmten die Meßwerte ziemlich genau. Wie es sich z.B. bei Pappschnee , oder größeren Schneehöhen verhält, kann ich noch nicht sagen. 2.) Direkte Sonneneinstrahlung auf den Snowduino verfälscht die Meßwerte geringfügig nach unten. Ich muß dazu sagen, dass es in dem engen (zwar nach unten offenem) Gehäuse sowieso rel. warm ist, da der uA7805-Spannungsregler ziemlich heiß wird, weil das eingebaute WLAN-Modul rel. viel Strom zieht. Evtl. würde da ein großflächigerer Sonnenschutz/Abschattung helfen ? Evtl. hat aber auch die Außentemperatur an sich einen Einfluß auf die Messungen des UT390B, da sich die Meßwerte beim Erstaufbau im Bastelkeller bei Temperaturänderungen ebenfalls verändert hatten? Testseite mit aktuellen Meßwerten : Testseite-Schneehöhe |
Downloads | |
Sketch: | UT390_Snowduino.ino |
PHP DatenÜbernahme-Seite: | data2text.zip |